Repository: npms-io/npms-analyzer Branch: master Commit: bfee077ab3dc Files: 314 Total size: 2.1 MB Directory structure: gitextract_mgcbttt5/ ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── cli.js ├── cmd/ │ ├── consume.js │ ├── observe.js │ ├── scoring.js │ ├── tasks/ │ │ ├── check-gh-tokens.js │ │ ├── clean-extraneous.js │ │ ├── enqueue-missing.js │ │ ├── enqueue-outdated.js │ │ ├── enqueue-view.js │ │ ├── migrate.js │ │ ├── process-package.js │ │ ├── re-evaluate.js │ │ └── re-metadata.js │ ├── tasks.js │ └── util/ │ ├── bootstrap.js │ └── stats/ │ ├── index.js │ ├── process.js │ ├── progress.js │ ├── queue.js │ └── tokens.js ├── config/ │ ├── couchdb/ │ │ ├── npms-analyzer-npm.json │ │ └── npms-analyzer-npms.json │ ├── default.json5 │ └── elasticsearch/ │ └── npms.json5 ├── docs/ │ ├── architecture.md │ ├── deploys.md │ ├── diagrams/ │ │ ├── analysis.xml │ │ └── continuous-scoring.xml │ └── setup.md ├── ecosystem.json5 ├── lib/ │ ├── analyze/ │ │ ├── collect/ │ │ │ ├── bin/ │ │ │ │ └── david-json │ │ │ ├── github.js │ │ │ ├── index.js │ │ │ ├── metadata.js │ │ │ ├── npm.js │ │ │ ├── source.js │ │ │ └── util/ │ │ │ ├── fileContents.js │ │ │ ├── fileSize.js │ │ │ ├── pointsToRanges.js │ │ │ └── promisePropsSettled.js │ │ ├── download/ │ │ │ ├── git.js │ │ │ ├── github.js │ │ │ ├── index.js │ │ │ ├── npm.js │ │ │ └── util/ │ │ │ ├── assertFilesCount.js │ │ │ ├── findPackageDir.js │ │ │ ├── mergePackageJson.js │ │ │ └── untar.js │ │ ├── evaluate/ │ │ │ ├── index.js │ │ │ ├── maintenance.js │ │ │ ├── popularity.js │ │ │ └── quality.js │ │ ├── index.js │ │ └── util/ │ │ ├── exec.js │ │ ├── gotRetry.js │ │ ├── hostedGitInfo.js │ │ ├── normalizePackageJson.js │ │ └── packageJsonFromData.js │ ├── configure.js │ ├── observers/ │ │ ├── realtime.js │ │ └── stale.js │ ├── queue.js │ └── scoring/ │ ├── aggregate.js │ ├── finalize.js │ ├── prepare.js │ ├── score.js │ └── util/ │ └── paperNumerical.js ├── package.json └── test/ ├── .eslintrc.json ├── bin/ │ └── download-fixtures ├── fixtures/ │ └── analyze/ │ ├── collect/ │ │ ├── modules/ │ │ │ ├── 0/ │ │ │ │ ├── data.json │ │ │ │ └── expected-source.json │ │ │ ├── @bcoe%2fexpress-oauth-server/ │ │ │ │ ├── data.json │ │ │ │ └── expected-metadata.json │ │ │ ├── babel-jest/ │ │ │ │ ├── data.json │ │ │ │ └── expected-source.json │ │ │ ├── backoff/ │ │ │ │ ├── data.json │ │ │ │ └── expected-source.json │ │ │ ├── cross-spawn/ │ │ │ │ ├── data.json │ │ │ │ ├── expected-github.json │ │ │ │ ├── expected-metadata.json │ │ │ │ ├── expected-npm.json │ │ │ │ └── expected-source.json │ │ │ ├── hapi/ │ │ │ │ ├── data.json │ │ │ │ └── expected-source.json │ │ │ ├── planify/ │ │ │ │ ├── data.json │ │ │ │ └── expected-source.json │ │ │ ├── react/ │ │ │ │ ├── data.json │ │ │ │ └── expected-source.json │ │ │ └── react-router/ │ │ │ ├── data.json │ │ │ └── expected-source.json │ │ └── recorded/ │ │ ├── github/ │ │ │ ├── 0bfbe2f1c03ff5ed9c3baa91d588e218 │ │ │ ├── 0bfbe2f1c03ff5ed9c3baa91d588e218.headers │ │ │ ├── 2236c266c85b15946d7ca69cc2e1e091 │ │ │ ├── 2236c266c85b15946d7ca69cc2e1e091.headers │ │ │ ├── 24d4b4797edc40614848f01802bbe2b3 │ │ │ ├── 24d4b4797edc40614848f01802bbe2b3.headers │ │ │ ├── 2f87db1cf50593ec3f80835f624ec88a │ │ │ ├── 2f87db1cf50593ec3f80835f624ec88a.headers │ │ │ ├── 3a1a79735cab3e2c46da0f739eccd595 │ │ │ ├── 3a1a79735cab3e2c46da0f739eccd595.headers │ │ │ ├── 3b5e34c45a594730608f6170cacf31fe │ │ │ ├── 3b5e34c45a594730608f6170cacf31fe.headers │ │ │ ├── 3d15804db16c597c23a14946a78b8e1b │ │ │ ├── 3d15804db16c597c23a14946a78b8e1b.headers │ │ │ ├── 4109ed740591855f9e48eb868f40db86 │ │ │ ├── 4109ed740591855f9e48eb868f40db86.headers │ │ │ ├── 5bdd0f1e3c86f0114eb714a2ce79e905 │ │ │ ├── 5bdd0f1e3c86f0114eb714a2ce79e905.headers │ │ │ ├── 6913bcb008bea8f6a0384da9bbae2293 │ │ │ ├── 6913bcb008bea8f6a0384da9bbae2293.headers │ │ │ ├── 85c5e5ee4a806e7d405984c325f29007 │ │ │ ├── 85c5e5ee4a806e7d405984c325f29007.headers │ │ │ ├── 92a4188d8af9e8c1ff665859b3cd86b8 │ │ │ ├── 92a4188d8af9e8c1ff665859b3cd86b8.headers │ │ │ ├── 9ccf24e28c94543e4ae601d5aa9c8cba │ │ │ ├── 9ccf24e28c94543e4ae601d5aa9c8cba.headers │ │ │ ├── a3360f53aa71342ad67cded65f6ea1da │ │ │ ├── a3360f53aa71342ad67cded65f6ea1da.headers │ │ │ ├── a7d2cca72c7267fd27fe769cb4d2f611 │ │ │ ├── a7d2cca72c7267fd27fe769cb4d2f611.headers │ │ │ ├── afcd15ede3deaa855315f5a1fbc3e61d │ │ │ ├── afcd15ede3deaa855315f5a1fbc3e61d.headers │ │ │ ├── b32671b71119c7fc156f3aa050d1cb12 │ │ │ ├── b32671b71119c7fc156f3aa050d1cb12.headers │ │ │ ├── c23e4492fdaefde5fe60524fab308532 │ │ │ ├── c23e4492fdaefde5fe60524fab308532.headers │ │ │ ├── c389930a56f1bad9257ed1490fc32c9b │ │ │ ├── c389930a56f1bad9257ed1490fc32c9b.headers │ │ │ ├── cc88ef857a3a1492913c066047c5c033 │ │ │ ├── cc88ef857a3a1492913c066047c5c033.headers │ │ │ ├── d3b7e3ec7ad3c841c45ff000fd77b711 │ │ │ ├── d3b7e3ec7ad3c841c45ff000fd77b711.headers │ │ │ ├── d495e09987382290004f52a8fa39243b │ │ │ ├── d495e09987382290004f52a8fa39243b.headers │ │ │ ├── dadb0a8973a79e019a2a0affeb248deb │ │ │ ├── dadb0a8973a79e019a2a0affeb248deb.headers │ │ │ ├── ebd826ea6dcd2abd0dcc961dd0fe4176 │ │ │ ├── ebd826ea6dcd2abd0dcc961dd0fe4176.headers │ │ │ ├── ede6348d94fd4d537bcc1e42b050d8ed │ │ │ ├── ede6348d94fd4d537bcc1e42b050d8ed.headers │ │ │ ├── ff4470aede5dba39b4736419dda38443 │ │ │ └── ff4470aede5dba39b4736419dda38443.headers │ │ ├── index/ │ │ │ ├── 474829c21c2e69d2c0d889af2a714584 │ │ │ ├── 474829c21c2e69d2c0d889af2a714584.headers │ │ │ ├── ae18615611dfb3f32feaf1c607df7bac │ │ │ ├── ae18615611dfb3f32feaf1c607df7bac.headers │ │ │ ├── d40cbb49129f01a9d5130a95f54d4f79 │ │ │ └── d40cbb49129f01a9d5130a95f54d4f79.headers │ │ ├── npm/ │ │ │ ├── 278e742ec691d9647761d9e06a93c852 │ │ │ ├── 278e742ec691d9647761d9e06a93c852.headers │ │ │ ├── 6da574a19e30e15a2628bc2a7ae7d5a4 │ │ │ └── 6da574a19e30e15a2628bc2a7ae7d5a4.headers │ │ └── source/ │ │ ├── 0046732f19ee23072e08f55d2a400eca │ │ ├── 0046732f19ee23072e08f55d2a400eca.headers │ │ ├── 02777f766910df6791475f44c0e2b57b │ │ ├── 02777f766910df6791475f44c0e2b57b.headers │ │ ├── 0429ac4bdf217161d9a2772fdb7861e2 │ │ ├── 0429ac4bdf217161d9a2772fdb7861e2.headers │ │ ├── 0c774ab0c1fa72fb9dbba94b96693973 │ │ ├── 0c774ab0c1fa72fb9dbba94b96693973.headers │ │ ├── 1152654e8bfc034a9d043925c55fbe48 │ │ ├── 1152654e8bfc034a9d043925c55fbe48.headers │ │ ├── 180995f905c69e6355ccbeb197109fb9 │ │ ├── 180995f905c69e6355ccbeb197109fb9.headers │ │ ├── 1b4935ddf796087a37e45c313edddd4f │ │ ├── 1b4935ddf796087a37e45c313edddd4f.headers │ │ ├── 310c26a3622e22be3798b810bb056cd2 │ │ ├── 310c26a3622e22be3798b810bb056cd2.headers │ │ ├── 32532aa076ea4d37a94def3f370e23fc │ │ ├── 32532aa076ea4d37a94def3f370e23fc.headers │ │ ├── 36d2b9e3113bb8656477a0866759fca3 │ │ ├── 36d2b9e3113bb8656477a0866759fca3.headers │ │ ├── 3f5a8e5d9434bbd4ec976c36835cdc49 │ │ ├── 3f5a8e5d9434bbd4ec976c36835cdc49.headers │ │ ├── 40971c651c26e9ab81128eb0c10f37af │ │ ├── 40971c651c26e9ab81128eb0c10f37af.headers │ │ ├── 44c08d748b72275a181e7820e9c258e8 │ │ ├── 44c08d748b72275a181e7820e9c258e8.headers │ │ ├── 4d7966a6e7249722abdff0a7555a2527 │ │ ├── 4d7966a6e7249722abdff0a7555a2527.headers │ │ ├── 4ece6fa3645c526294eaf1b270113e6d │ │ ├── 4ece6fa3645c526294eaf1b270113e6d.headers │ │ ├── 50ec845be323513dc05d4ce6eeb56639 │ │ ├── 50ec845be323513dc05d4ce6eeb56639.headers │ │ ├── 586e879d6364ca5313dd5f956d47dbd4 │ │ ├── 586e879d6364ca5313dd5f956d47dbd4.headers │ │ ├── 5fcfa736ff5a936752226c33baab7ce5 │ │ ├── 5fcfa736ff5a936752226c33baab7ce5.headers │ │ ├── 6566d9e3adefb1ed8fe60a17bbf13133 │ │ ├── 6566d9e3adefb1ed8fe60a17bbf13133.headers │ │ ├── 6632454a445cfcd8152c30b4b8c64783 │ │ ├── 6632454a445cfcd8152c30b4b8c64783.headers │ │ ├── 672a67ca0e6ca2125e9601f4e532dc2e │ │ ├── 672a67ca0e6ca2125e9601f4e532dc2e.headers │ │ ├── 6ef5fd0be1ac70c0cc78c63dc72f97da │ │ ├── 6ef5fd0be1ac70c0cc78c63dc72f97da.headers │ │ ├── 6f6f60463501ffe7964700fdb5262ea7 │ │ ├── 6f6f60463501ffe7964700fdb5262ea7.headers │ │ ├── 77c0ab2484ae068cadf90515cd2bb6d4 │ │ ├── 77c0ab2484ae068cadf90515cd2bb6d4.headers │ │ ├── 7fb20e04d9d456482d62b369a1c268c0 │ │ ├── 7fb20e04d9d456482d62b369a1c268c0.headers │ │ ├── 833f1d757cdb7cfa152b54680d0d2d73 │ │ ├── 833f1d757cdb7cfa152b54680d0d2d73.headers │ │ ├── 8881281d102f7688a2b0e5d7ffb48299 │ │ ├── 8881281d102f7688a2b0e5d7ffb48299.headers │ │ ├── 8acf97225f349b2c99978025ba5b8e92 │ │ ├── 8acf97225f349b2c99978025ba5b8e92.headers │ │ ├── 8dcbc0b25ce4f37fd5c0bc06d633eb52 │ │ ├── 8dcbc0b25ce4f37fd5c0bc06d633eb52.headers │ │ ├── 92d4837e4094c3e096f398bc89aabb0f │ │ ├── 92d4837e4094c3e096f398bc89aabb0f.headers │ │ ├── 981d42650123f10d1600074d65aa4f43 │ │ ├── 981d42650123f10d1600074d65aa4f43.headers │ │ ├── 9a7bfe12b0910e8bd69ed06184030276 │ │ ├── 9a7bfe12b0910e8bd69ed06184030276.headers │ │ ├── a27623f8433973cd8a3c9ac32782dd9b │ │ ├── a27623f8433973cd8a3c9ac32782dd9b.headers │ │ ├── a9be16a47e9b4e3762bfbcfbec14effd │ │ ├── a9be16a47e9b4e3762bfbcfbec14effd.headers │ │ ├── acd2d3271b8cd130cd75e572ada409c1 │ │ ├── acd2d3271b8cd130cd75e572ada409c1.headers │ │ ├── afd6397af26789ff7e024c758e094e02 │ │ ├── afd6397af26789ff7e024c758e094e02.headers │ │ ├── b00ce31e18a32896ac83d6819e9816fe │ │ ├── b00ce31e18a32896ac83d6819e9816fe.headers │ │ ├── b6d2435e45a7f8f3b88152e577c55b84 │ │ ├── b6d2435e45a7f8f3b88152e577c55b84.headers │ │ ├── bb391b38e8f2529e20e3e313a7875566 │ │ ├── bb391b38e8f2529e20e3e313a7875566.headers │ │ ├── bbd9372c326ea4fb4acc82bd30e9491c │ │ ├── bbd9372c326ea4fb4acc82bd30e9491c.headers │ │ ├── c2a263604b39c741dcba960ab7bdf64e │ │ ├── c2a263604b39c741dcba960ab7bdf64e.headers │ │ ├── ca1b5b9f76e662b613be43d64e92c4b4 │ │ ├── ca1b5b9f76e662b613be43d64e92c4b4.headers │ │ ├── d4bf4a43cf4e7b6c27e40c732c9d8bfa │ │ ├── d4bf4a43cf4e7b6c27e40c732c9d8bfa.headers │ │ ├── daaa6494600d82aa3e21e56452a8702a │ │ ├── daaa6494600d82aa3e21e56452a8702a.headers │ │ ├── e2d10b245b6bce60976eb41c755c5333 │ │ ├── e2d10b245b6bce60976eb41c755c5333.headers │ │ ├── e66bf57e7754e3a75c0b3da3c7d3b894 │ │ ├── e66bf57e7754e3a75c0b3da3c7d3b894.headers │ │ ├── f13ef1d336f7343f21a8f1e755ee4a1d │ │ ├── f13ef1d336f7343f21a8f1e755ee4a1d.headers │ │ ├── f4fbc0e6ea0806cdebfe05e95480858f │ │ ├── f4fbc0e6ea0806cdebfe05e95480858f.headers │ │ ├── fba7a93bdb3f483048d32ccc0a105e2b │ │ ├── fba7a93bdb3f483048d32ccc0a105e2b.headers │ │ ├── febf07de22a7d2d7ffe02742c6b81857 │ │ └── febf07de22a7d2d7ffe02742c6b81857.headers │ └── download/ │ ├── mocked/ │ │ ├── broken-archive.tgz │ │ └── non-gzip-archive.tgz │ └── recorded/ │ ├── github/ │ │ ├── 0ca08d9404d3be6b0f4b710e7dce325c │ │ ├── 0ca08d9404d3be6b0f4b710e7dce325c.headers │ │ ├── 0d6bf2e4d590ee9d6ece01c851500563 │ │ ├── 0d6bf2e4d590ee9d6ece01c851500563.headers │ │ ├── 2197e3675f7b1189860675d45228c712 │ │ ├── 2197e3675f7b1189860675d45228c712.headers │ │ ├── 324da49a49b1bf9799ad0af735d42175 │ │ ├── 324da49a49b1bf9799ad0af735d42175.headers │ │ ├── 347ad9c22b702976e2e6304bee584cd2 │ │ ├── 347ad9c22b702976e2e6304bee584cd2.headers │ │ ├── 39c4db447b629049bd6c82625ecbb182 │ │ ├── 39c4db447b629049bd6c82625ecbb182.headers │ │ ├── 598868e39b0c5f898b243dc6a7799590 │ │ ├── 598868e39b0c5f898b243dc6a7799590.headers │ │ ├── 6b4c11cf7f1c30a3c0f45d6dee2c98c8 │ │ ├── 6b4c11cf7f1c30a3c0f45d6dee2c98c8.headers │ │ ├── ce4fa3241f0364d1ea4e654f3cf13cb9 │ │ ├── ce4fa3241f0364d1ea4e654f3cf13cb9.headers │ │ ├── d7c449b25de454b1b362bc5af32cc777 │ │ └── d7c449b25de454b1b362bc5af32cc777.headers │ └── npm/ │ ├── 57f54040bdda5ac6ffd196cac24be2d8 │ ├── 57f54040bdda5ac6ffd196cac24be2d8.headers │ ├── afed24ca0f8e9f12344ae6a851b46159 │ └── afed24ca0f8e9f12344ae6a851b46159.headers ├── mocha.opts ├── spec/ │ └── analyze/ │ ├── collect/ │ │ ├── github.js │ │ ├── index.js │ │ ├── metadata.js │ │ ├── npm.js │ │ ├── source.js │ │ └── util/ │ │ ├── fileContents.js │ │ ├── fileSize.js │ │ ├── pointsToRanges.js │ │ └── promisePropsSettled.js │ ├── download/ │ │ ├── git.js │ │ ├── github.js │ │ ├── index.js │ │ ├── npm.js │ │ └── util/ │ │ ├── findPackageDir.js │ │ ├── mergePackageJson.js │ │ └── untar.js │ ├── evaluate/ │ │ ├── index.js │ │ ├── maintenance.js │ │ ├── popularity.js │ │ └── quality.js │ └── util/ │ ├── exec.js │ ├── gotRetry.js │ ├── hostedGitInfo.js │ ├── normalizePackageJson.js │ └── packageJsonFromData.js ├── test.js └── util/ └── sepia.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ root = true [*] indent_style = space indent_size = 4 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false [package.json] indent_size = 2 ================================================ FILE: .eslintignore ================================================ /test/coverage /dev /cli.js ================================================ FILE: .eslintrc.json ================================================ { "root": true, "extends": [ "eslint-config-moxy/es8", "eslint-config-moxy/addons/node" ], "globals": { "logger": false } } ================================================ FILE: .gitignore ================================================ node_modules npm-debug.* /config/local.* /test/coverage /test/tmp /test/fixtures/**/downloaded /dev ================================================ FILE: .travis.yml ================================================ language: node_js node_js: - node - lts/* script: "npm run test-travis" before_install: - sudo apt-get install -y bsdtar after_success: - "npm i codecov" - "node_modules/.bin/codecov" ================================================ FILE: LICENSE ================================================ Copyright (c) 2016 npms Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # npms-analyzer [![Build status][travis-image]][travis-url] [![Coverage status][codecov-image]][codecov-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev dependency status][david-dm-dev-image]][david-dm-dev-url] The npms-analyzer analyzes the npm ecosystem, collecting info, evaluating and scoring each package. ## Usage This project offers all its functionality through a CLI. ![Demo](https://i.imgur.com/nz9CzVR.gif) *(output might be outdated)* Note that you must [setup](./docs/setup.md) the project before using the CLI. The most important commands will be described below. To discover the other ones run `$ npms-analyzer -h`. ### npms-analyzer observe The `observe` command starts observing changes that occur in the `npm` registry as well as packages that were not analyzed for a while. Each reported package will be pushed into a queue to be processed by the queue consumers. ```bash $ npms-analyzer observe --log-level debug | pino ``` For more information about the command, run `$ npms-analyzer observe -h` ### npms-analyzer consume The `consume` command starts consuming the queue, running the analysis process for each queued package. ```bash $ npms-analyzer consume --log-level debug --concurrency 5 | pino ``` For more information about the command, run `$ npms-analyzer consume -h` ### npms-analyzer scoring The `scoring` command, continuously iterates over the analysis results and calculates a score for all the `npm` packages, storing its result in `elasticsearch`. ```bash $ npms-analyzer scoring ``` For more information about the command, run `$ npms-analyzer scoring -h` ## Architecture There's a separate document that explains the architecture, you may read it [here](./docs/architecture.md). ## Setup There's a separate document that explains the setup procedure, you may read it [here](./docs/setup.md). ## Deploys There's a separate document that explains the deployment procedure, you may read it [here](./docs/deploys.md). ## Tests Before running the tests, you must have read through the setup guide. ```bash $ npm test $ npm test-cov # to get coverage report ``` [codecov-url]:https://codecov.io/gh/npms-io/npms-analyzer [codecov-image]:https://img.shields.io/codecov/c/github/npms-io/npms-analyzer/master.svg [david-dm-dev-image]: https://img.shields.io/david/dev/npms-io/npms-analyzer.svg [david-dm-dev-url]: https://david-dm.org/npms-io/npms-analyzer#info=devDependencies [david-dm-image]: https://img.shields.io/david/npms-io/npms-analyzer.svg [david-dm-url]: https://david-dm.org/npms-io/npms-analyzer [travis-image]: http://img.shields.io/travis/npms-io/npms-analyzer/master.svg [travis-url]: https://travis-ci.org/npms-io/npms-analyzer ================================================ FILE: cli.js ================================================ #!/bin/sh ':' //; exec "$(command -v node)" --max-old-space-size=4192 "$0" "$@" 'use strict'; // require('heapdump'); require('./lib/configure'); const yargs = require('yargs'); yargs .strict() .wrap(Math.min(120, yargs.terminalWidth())) .version() .alias('version', 'v') .help() .alias('help', 'h') .usage('npms-analyzer command line, choose one of the available commands.\n\nUsage: $0 .. [options]') .option('log-level', { type: 'string', alias: 'll', choices: ['fatal', 'error', 'warn', 'info', 'debug', 'trace'], describe: 'The log level to use', global: true, }) .commandDir('./cmd') .demandCommand(1, 'Please supply a valid command') .argv; ================================================ FILE: cmd/consume.js ================================================ 'use strict'; const assert = require('assert'); const config = require('config'); const analyze = require('../lib/analyze'); const score = require('../lib/scoring/score'); const bootstrap = require('./util/bootstrap'); const stats = require('./util/stats'); // Need JSON.parse & JSON stringify because of config reserved words // See: https://github.com/lorenwest/node-config/issues/223 const blacklist = JSON.parse(JSON.stringify(config.get('blacklist'))); const githubTokens = config.get('githubTokens'); const log = logger.child({ module: 'cli/consume' }); /** * Handles a message. * * @param {Object} msg - The message. * @param {Nano} npmNano - The npm nano instance. * @param {Nano} npmsNano - The npms nano instance. * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} A promise that fulfills when consumed. */ function onMessage(msg, npmNano, npmsNano, esClient) { const name = msg.data; // Check if this package is blacklisted const blacklisted = blacklist[name]; if (blacklisted) { const err = Object.assign(new Error(`Package ${name} is blacklisted`), { code: 'BLACKLISTED', unrecoverable: true }); return onFailedAnalysis(name, err, npmsNano, esClient) .catch(() => {}); } log.info(`Processing package ${name}`); // Check if the package has been analyzed after it has been pushed to the queue return analyze.get(name, npmsNano) .catch({ code: 'ANALYSIS_NOT_FOUND' }, () => {}) .then((analysis) => { if (analysis && Date.parse(analysis.startedAt) >= Date.parse(msg.pushedAt)) { log.info(`Skipping analysis of ${name} because it was already analyzed meanwhile`); return; } // If not, analyze it! :D return analyze(name, npmNano, npmsNano, { githubTokens, waitRateLimit: true, rev: analysis && analysis._rev, }) // Score it to get a "real-time" feeling, ignoring any errors .then((analysis) => score(analysis, npmsNano, esClient).catch(() => {})) .catch({ code: 'PACKAGE_NOT_FOUND' }, () => score.remove(name, esClient)) // Ignore unrecoverable errors, so that these are not re-queued .catch({ unrecoverable: true }, (err) => ( onFailedAnalysis(name, err, npmsNano, esClient) .catch(() => {}) )); }); } function onFailedAnalysis(name, err, npmsNano, esClient) { // Save the failed analysis, by generating an empty analysis object with the associated error return analyze.saveFailed(name, err, npmsNano) // Score it to get a "real-time" feeling, ignoring any errors .then((analysis) => score(analysis, npmsNano, esClient).catch(() => {})); } // ---------------------------------------------------------------------------- exports.command = 'consume [options]'; exports.describe = 'Starts observing module changes and pushes them into the queue'; exports.builder = (yargs) => yargs .usage('Usage: $0 consume [options]\n\n\ Consumes packages that are queued, triggering the analysis process for each package.') .default('log-level', 'error') .option('concurrency', { type: 'number', default: 5, alias: 'c', describe: 'Number of packages to consume concurrently', }) .check((argv) => { assert(argv.concurrency > 0, 'Invalid argument: --concurrency must be a number greater than 0'); return true; }); exports.handler = (argv) => { process.title = 'npms-analyzer-consume'; logger.level = argv.logLevel || 'error'; // Bootstrap dependencies on external services bootstrap(['couchdbNpm', 'couchdbNpms', 'queue', 'elasticsearch'], { wait: true }) .spread((npmNano, npmsNano, queue, esClient) => { // Stats stats.process(); stats.queue(queue); stats.progress(npmNano, npmsNano); stats.tokens(githubTokens, 'github'); // Clean old packages from the download directory return analyze.cleanTmpDir() // Start consuming .then(() => ( queue.consume((message) => onMessage(message, npmNano, npmsNano, esClient), { concurrency: argv.concurrency, onRetriesExceeded: (message, err) => onFailedAnalysis(message.data, err, npmsNano, esClient), }) )); }) .done(); }; ================================================ FILE: cmd/observe.js ================================================ 'use strict'; const assert = require('assert'); const config = require('config'); const promiseRetry = require('promise-retry'); const realtime = require('../lib/observers/realtime'); const stale = require('../lib/observers/stale'); const bootstrap = require('./util/bootstrap'); const stats = require('./util/stats'); const log = logger.child({ module: 'cli/observe' }); /** * Pushes a package into the queue, retrying several times on error. * If all retries are used, there isn't much we can do, therefore the process will gracefully exit. * * @param {Array} name - The package name. * @param {Number} priority - The priority to assign to this package when pushing into the queue. * @param {Queue} queue - The analysis queue instance. * * @returns {Promise} The promise that fulfills once done. */ function onPackage(name, priority, queue) { return promiseRetry((retry) => ( queue.push(name, priority) .catch(retry) )) .catch((err) => { log.fatal({ err, name }, 'Too many failed attempts while trying to push the package into the queue, exiting..'); process.exit(1); }); } // ---------------------------------------------------------------------------- exports.command = 'observe [options]'; exports.describe = 'Consumes modules from the queue, analyzing them'; exports.builder = (yargs) => yargs .usage('Usage: $0 observe [options]\n\n\ Starts the observing process, enqueueing packages that need to be analyzed into the queue.') .default('log-level', 'error') .option('default-seq', { type: 'number', default: 0, alias: 'ds', describe: 'The default seq to be used on first run', }) .check((argv) => { assert(argv.defaultSeq >= 0, 'Invalid argument: --default-seq must be a number greater or equal to 0'); return true; }); exports.handler = (argv) => { process.title = 'npms-analyzer-observe'; logger.level = argv.logLevel || 'error'; // Bootstrap dependencies on external services bootstrap(['couchdbNpm', 'couchdbNpms', 'queue'], { wait: true }) .spread((npmNano, npmsNano, queue) => { // Stats stats.process(); stats.queue(queue); // Start observing.. config.observers.realtime && realtime(npmNano, npmsNano, { defaultSeq: argv.defaultSeq }, (name) => onPackage(name, 1, queue)); config.observers.stale && stale(npmsNano, (name) => onPackage(name, 0, queue)); }) .done(); }; ================================================ FILE: cmd/scoring.js ================================================ 'use strict'; const assert = require('assert'); const humanizeDuration = require('humanize-duration'); const prepare = require('../lib/scoring/prepare'); const aggregate = require('../lib/scoring/aggregate'); const score = require('../lib/scoring/score'); const finalize = require('../lib/scoring/finalize'); const bootstrap = require('./util/bootstrap'); const stats = require('./util/stats'); const log = logger.child({ module: 'cli/scoring' }); /** * Waits the time needed before running the first cycle. * * @param {Number} delay - The delay between each cycle. * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} The promise to be waited. */ function waitRemaining(delay, esClient) { // Need to use Promise.resolve() because Elasticsearch doesn't use the global promise return Promise.resolve(esClient.indices.getAlias({ name: 'npms-current' })) .then((response) => { const index = Object.keys(response)[0]; const timestamp = Number(index.replace(/^npms-/, '')); const wait = timestamp ? Math.max(0, timestamp + delay - Date.now()) : 0; const waitStr = humanizeDuration(Math.round(wait / 1000) * 1000, { largest: 2 }); wait && log.info({ now: (new Date()).toISOString() }, `Waiting ${waitStr} before running the first cycle..`); return Promise.delay(wait); }) .catch((err) => err.status === 404, () => {}); } /** * Runs a scoring cycle. * When it finishes, another cycle will be automatically run after a certain delay. * * @param {Number} delay - The delay between each cycle. * @param {Nano} npmsNano - The npm nano instance. * @param {Elastic} esClient - The Elasticsearch instance. */ function cycle(delay, npmsNano, esClient) { const startedAt = Date.now(); log.info('Starting scoring cycle'); // Prepare prepare(esClient) // Aggregate + score all packages .tap(() => ( aggregate(npmsNano) .then((aggregation) => aggregation && score.all(aggregation, npmsNano, esClient)) // If aggregation is null, there were no evaluations )) // Finalize .then((esInfo) => finalize(esInfo, esClient)) // We are done! .then(() => { const durationStr = humanizeDuration(Math.round((Date.now() - startedAt) / 1000) * 1000, { largest: 2 }); log.info(`Scoring cycle successful, took ${durationStr}`); return delay; }, (err) => { log.fatal({ err }, 'Scoring cycle failed'); return 10 * 60 * 1000; }) // Start all over again after a short delay .then((wait) => { const waitStr = humanizeDuration(Math.round(wait / 1000) * 1000, { largest: 2 }); log.info({ now: (new Date()).toISOString() }, `Waiting ${waitStr} before running the next cycle..`); Promise.delay(wait) .then(() => cycle(delay, npmsNano, esClient)); }) .done(); } // ---------------------------------------------------------------------------- exports.command = 'scoring [options]'; exports.describe = 'Continuously iterate over the analyzed modules, scoring them'; exports.builder = (yargs) => yargs .usage('Usage: $0 scoring [options]\n\n\ Continuously iterate over the analyzed packages, scoring them.') .default('log-level', 'error') .option('cycle-delay', { type: 'number', default: 3 * 60 * 60 * 1000, // 3 hours alias: 'd', describe: 'The time to wait between each scoring cycle (in ms)', }) .check((argv) => { assert(argv.cycleDelay >= 0, 'Invalid argument: --cycle-delay must be a number greater or equal to 0'); return true; }); exports.handler = (argv) => { // Disable long stack traces specifically for this command since we create them in bursts // This improves performance by a great margin Promise.config({ longStackTraces: false }); process.title = 'npms-analyzer-scoring'; logger.level = argv.logLevel || 'error'; // Bootstrap dependencies on external services bootstrap(['couchdbNpms', 'elasticsearch'], { wait: true }) .spread((npmsNano, esClient) => { // Stats stats.process(); // Wait for the previous cycle delay if necessary return waitRemaining(argv.cycleDelay, esClient) // Start the continuous process of scoring! .then(() => cycle(argv.cycleDelay, npmsNano, esClient)); }) .done(); }; ================================================ FILE: cmd/tasks/check-gh-tokens.js ================================================ 'use strict'; const config = require('config'); const got = require('got'); const githubTokens = config.get('githubTokens'); const log = logger.child({ module: 'cli/check-gh-tokens' }); exports.command = 'check-gh-tokens [options]'; exports.describe = 'Checks the status of each GitHub token'; exports.builder = (yargs) => yargs .usage('Usage: $0 check-gh-tokens [options]\n\n\ Checks the status of each GitHub token.'); exports.handler = (argv) => { process.title = 'npms-analyzer-check-gh-tokens'; logger.level = argv.logLevel; const valid = []; const invalid = []; Promise.map(githubTokens, (token) => ( got.get('https://api.github.com/user', { json: true, headers: { accept: 'application/vnd.github.v3+json', authorization: `token ${token}`, }, }) .then(() => valid.push(token)) .catch((err) => err.statusCode === 401 || err.statusCode === 403, (err) => { log.debug({ err }, `Token ${token} seems invalid`); invalid.push(token); }) ), { concurrency: 5 }) .then(() => { log.info({ valid }, `${valid.length} valid tokens`); invalid.length && log.error({ invalid }, `${invalid.length} invalid tokens`); }) .then(() => process.exit(invalid.length ? 1 : 0)) .done(); }; ================================================ FILE: cmd/tasks/clean-extraneous.js ================================================ 'use strict'; const stats = require('../util/stats'); const bootstrap = require('../util/bootstrap'); const log = logger.child({ module: 'cli/clean-extraneous' }); /** * Fetches the npm packages. * * @param {Nano} npmNano - The npm nano instance. * * @returns {Promise} The promise that fulfills when done. */ function fetchNpmPackages(npmNano) { log.info('Fetching npm packages, this might take a while..'); return npmNano.listAsync() .then((response) => ( response.rows .map((row) => row.id) .filter((id) => id.indexOf('_design/') !== 0) )); } /** * Fetches the npms packages. * * @param {Nano} npmsNano - The npms nano instance. * * @returns {Promise} The promise that fulfills when done. */ function fetchNpmsPackages(npmsNano) { log.info('Fetching npms packages, this might take a while..'); return npmsNano.listAsync({ startkey: 'package!', endkey: 'package!\ufff0' }) .then((response) => response.rows.map((row) => row.id .split('!') .slice(1) .join('!') )); } /** * Fetches the npms packages. * * @param {Nano} npmsNano - The npms nano instance. * * @returns {Promise} The promise that fulfills when done. */ function fetchNpmsObservedPackages(npmsNano) { log.info('Fetching npms observed packages, this might take a while..'); return npmsNano.listAsync({ startkey: 'observer!package!', endkey: 'observer!package!\ufff0' }) .then((response) => response.rows.map((row) => row.id .split('!') .slice(2) .join('!') )); } /** * Calculates which npms packages are considered extraneous and removes them. * * @param {Array} npmPackages - All npm packages. * @param {Array} npmsPackages - All npms packages. * @param {Nano} npmsNano - The npms nano instance. * @param {Boolean} dryRun - True to do a dry-run, false otherwise. * * @returns {Promise} The promise that fulfills when done. */ function cleanExtraneousNpmsPackages(npmPackages, npmsPackages, npmsNano, dryRun) { log.info( { npmPackagesCount: npmPackages.length, npmsPackagesCount: npmsPackages.length }, 'Calculating extraneous packages, this might take a while..' ); const npmPackagesSet = new Set(npmPackages); const extraneousPackages = npmsPackages.filter((name) => !npmPackagesSet.has(name)); log.info(`There's a total of ${extraneousPackages.length} extraneous packages`); extraneousPackages.forEach((name) => log.debug(name)); if (!extraneousPackages.length) { return; } if (dryRun) { log.info('This is a dry-run, skipping..'); return; } let count = 0; return Promise.map(extraneousPackages, (name) => { count += 1; count % 100 === 0 && log.info(`Removed ${count} packages`); const key = `package!${name}`; return npmsNano.getAsync(key) .then((doc) => npmsNano.destroyAsync(key, doc._rev)); }, { concurrency: 15 }) .then(() => log.info('Extraneous packages were removed!')); } /** * Calculates which npms observed packages are considered extraneous and removes them. * * @param {Array} npmPackages - All npm packages. * @param {Array} npmsObservedPackages - All npms observed packages. * @param {Nano} npmsNano - The npms nano instance. * @param {Boolean} dryRun - True to do a dry-run, false otherwise. * * @returns {Promise} The promise that fulfills when done. */ function cleanExtraneousNpmsObservedPackages(npmPackages, npmsObservedPackages, npmsNano, dryRun) { log.info( { npmPackagesCount: npmPackages.length, npmsObservedPackagesCount: npmsObservedPackages.length }, 'Calculating extraneous observed packages, this might take a while..' ); const npmPackagesSet = new Set(npmPackages); const extraneousPackages = npmsObservedPackages.filter((name) => !npmPackagesSet.has(name)); log.info(`There's a total of ${extraneousPackages.length} extraneous observed packages`); extraneousPackages.forEach((name) => log.debug(name)); if (!extraneousPackages.length || dryRun) { log.info('This is a dry-run, skipping..'); return; } let count = 0; return Promise.map(extraneousPackages, (name) => { count += 1; count % 100 === 0 && log.info(`Removed ${count} observed packages`); const key = `observer!package!${name}`; return npmsNano.getAsync(key) .then((doc) => npmsNano.destroyAsync(key, doc._rev)); }, { concurrency: 15 }) .then(() => log.info('Extraneous observed packages were removed!')); } // -------------------------------------------------- exports.command = 'clean-extraneous [options]'; exports.describe = 'Finds packages that are analyzed but no longer exist in npm'; exports.builder = (yargs) => yargs .usage('Usage: $0 tasks clean-extraneous [options]\n\n\ Finds packages that are analyzed but no longer exist in npm.\nThis command is useful if operations were lost due to repeated \ errors, e.g.: RabbitMQ or CouchDB were down or unstable.') .option('dry-run', { alias: 'dr', type: 'boolean', default: false, describe: 'Enables dry-run', }); exports.handler = (argv) => { process.title = 'npms-analyzer-clean-extraneous'; logger.level = argv.logLevel; bootstrap(['couchdbNpm', 'couchdbNpms']) .spread((npmNano, npmsNano) => { // Stats stats.process(); // The strategy below loads all packages in memory.. we can do this because the total packages is around ~250k // which fit well in memory and is much faster than doing manual iteration (~20sec vs ~3min) // Fetch npm packages return fetchNpmPackages(npmNano) // Fetch npms packages & clean extraneous .tap((npmPackages) => ( fetchNpmsPackages(npmsNano) .then((npmsPackages) => cleanExtraneousNpmsPackages(npmPackages, npmsPackages, npmsNano, argv.dryRun)) )) // Fetch npms observed packages & clean extraneous .then((npmPackages) => ( fetchNpmsObservedPackages(npmsNano) .then((npmsObservedPackages) => cleanExtraneousNpmsObservedPackages(npmPackages, npmsObservedPackages, npmsNano, argv.dryRun)) )); }) .then(() => process.exit()) .done(); }; ================================================ FILE: cmd/tasks/enqueue-missing.js ================================================ 'use strict'; const difference = require('lodash/difference'); const bootstrap = require('../util/bootstrap'); const stats = require('../util/stats'); const log = logger.child({ module: 'cli/enqueue-missing' }); /** * Fetches the npm packages. * * @param {Nano} npmNano - The npm nano instance. * * @returns {Promise} The promise that fulfills when done. */ function fetchNpmPackages(npmNano) { log.info('Fetching npm packages, this might take a while..'); return npmNano.listAsync() .then((response) => ( response.rows .map((row) => row.id) .filter((id) => id.indexOf('_design/') !== 0) )); } /** * Fetches the npms packages. * * @param {Nano} npmsNano - The npms nano instance. * * @returns {Promise} The promise that fulfills when done. */ function fetchNpmsPackages(npmsNano) { log.info('Fetching npms packages, this might take a while..'); return npmsNano.listAsync({ startkey: 'package!', endkey: 'package!\ufff0' }) .then((response) => response.rows.map((row) => row.id.split('!')[1])); } /** * Calculates which packages are missing and enqueues them. * * @param {Array} npmPackages - All npm packages. * @param {Array} npmsPackages - All npms packages. * @param {Queue} queue - The analysis queue instance. * @param {Boolean} dryRun - True to do a dry-run, false otherwise. * * @returns {Promise} The promise that fulfills when done. */ function enqueueMissingPackages(npmPackages, npmsPackages, queue, dryRun) { const missingPackages = difference(npmPackages, npmsPackages); log.info(`There's a total of ${missingPackages.length} missing packages`); missingPackages.forEach((name) => log.debug(name)); if (!missingPackages.length) { return; } if (dryRun) { log.info('This is a dry-run, skipping..'); return; } let count = 0; return Promise.map(missingPackages, (name) => { count += 1; count % 1000 === 0 && log.info(`Enqueued ${count} packages`); return queue.push(name); }, { concurrency: 15 }) .then(() => log.info('Missing packages were enqueued!')); } // -------------------------------------------------- exports.command = 'enqueue-missing [options]'; exports.describe = 'Finds packages that were not analyzed and enqueues them'; exports.builder = (yargs) => yargs .usage('Usage: $0 tasks enqueue-missing [options]\n\n\ Finds packages that were not analyzed and enqueues them.\nThis command is useful if packages were lost due to repeated transient \ errors, e.g.: internet connection was lot or GitHub was down.') .option('dry-run', { alias: 'dr', type: 'boolean', default: false, describe: 'Enables dry-run', }); exports.handler = (argv) => { process.title = 'npms-analyzer-enqueue-missing'; logger.level = argv.logLevel; // Bootstrap dependencies on external services bootstrap(['couchdbNpm', 'couchdbNpms', 'queue']) .spread((npmNano, npmsNano, queue) => { // Stats stats.process(); // The strategy below loads all packages in memory.. we can do this because the total packages is around ~250k // which fit well in memory and is much faster than doing manual iteration (~20sec vs ~3min) return Promise.all([ fetchNpmPackages(npmNano), fetchNpmsPackages(npmsNano), ]) .spread((npmPackages, npmsPackages) => enqueueMissingPackages(npmPackages, npmsPackages, queue, argv.dryRun)); }) .then(() => process.exit()) .done(); }; ================================================ FILE: cmd/tasks/enqueue-outdated.js ================================================ 'use strict'; const bootstrap = require('../util/bootstrap'); const stats = require('../util/stats'); const log = logger.child({ module: 'cli/enqueue-outdated' }); /** * Fetches the npm packages. * * @param {Nano} npmNano - The npm nano instance. * * @returns {Promise} The promise that fulfills when done. */ function fetchNpmPackages(npmNano) { log.info('Fetching npm packages, this might take a while..'); return npmNano.viewAsync('npms-analyzer', 'packages-version') .then((response) => ( response.rows .map((row) => ({ name: row.key, version: row.value })) )); } /** * Fetches the npms packages. * * @param {Nano} npmsNano - The npms nano instance. * * @returns {Promise} The promise that fulfills when done. */ function fetchNpmsPackages(npmsNano) { log.info('Fetching npms packages, this might take a while..'); return npmsNano.viewAsync('npms-analyzer', 'packages-version') .then((response) => ( response.rows .map((row) => ({ name: row.key, version: row.value })) )); } /** * Calculates which packages are outdated (missing or version mismatch) and enqueues them. * * @param {Array} npmPackages - All npm packages. * @param {Array} npmsPackages - All npms packages. * @param {Queue} queue - The analysis queue instance. * @param {Boolean} dryRun - True to do a dry-run, false otherwise. * * @returns {Promise} The promise that fulfills when done. */ function enqueueOutdated(npmPackages, npmsPackages, queue, dryRun) { log.info( { npmPackagesCount: npmPackages.length, npmsPackagesCount: npmsPackages.length }, 'Calculating outdated packages, this might take a while..' ); const npmsPackagesMap = npmsPackages.reduce((npmsPackagesMap, pkg) => npmsPackagesMap.set(pkg.name, pkg.version), new Map()); const outdatedPackages = npmPackages.filter((pkg) => npmsPackagesMap.get(pkg.name) !== pkg.version); log.info(`There's a total of ${outdatedPackages.length} outdated packages`); outdatedPackages.forEach((pkg) => log.debug(pkg.name)); if (!outdatedPackages.length) { return; } if (dryRun) { log.info('This is a dry-run, skipping..'); return; } let count = 0; return Promise.map(outdatedPackages, (pkg) => { count += 1; count % 1000 === 0 && log.info(`Enqueued ${count} packages`); return queue.push(pkg.name); }, { concurrency: 15 }) .then(() => log.info('Outdated packages were enqueued!')); } // -------------------------------------------------- exports.command = 'enqueue-outdated [options]'; exports.describe = 'Finds packages that are outdated and enqueues them'; exports.builder = (yargs) => yargs .usage('Usage: $0 tasks enqueue-outdated [options]\n\n\ Finds packages that are outdated and enqueues them.\nThis command is useful if packages were lost due to repeated transient \ errors, e.g.: internet connection was lot or GitHub was down.') .option('dry-run', { alias: 'dr', type: 'boolean', default: false, describe: 'Enables dry-run', }); exports.handler = (argv) => { process.title = 'npms-analyzer-enqueue-outdated'; logger.level = argv.logLevel; // Bootstrap dependencies on external services bootstrap(['couchdbNpm', 'couchdbNpms', 'queue']) .spread((npmNano, npmsNano, queue) => { // Stats stats.process(); // The strategy below loads all packages in memory.. we can do this because the total packages is around ~250k // which fit well in memory and is much faster than doing manual iteration (~20sec vs ~3min) return Promise.all([ fetchNpmPackages(npmNano), fetchNpmsPackages(npmsNano), ]) .spread((npmPackages, npmsPackages) => enqueueOutdated(npmPackages, npmsPackages, queue, argv.dryRun)); }) .then(() => process.exit()) .done(); }; ================================================ FILE: cmd/tasks/enqueue-view.js ================================================ 'use strict'; const assert = require('assert'); const bootstrap = require('../util/bootstrap'); const stats = require('../util/stats'); const log = logger.child({ module: 'cli/enqueue-view' }); /** * Fetches packages of a view. * * @param {String} view - The view in the form of design-doc/view-name. * @param {Nano} npmNano - The npm nano instance. * * @returns {Promise} The promise that fulfills when done. */ function fetchView(view, npmNano) { log.info(`Fetching view ${view}`); const split = view.split('/'); return npmNano.viewAsync(split[0], split[1]) .then((response) => ( response.rows .map((row) => row.key.replace(/^package!/, '')) )); } /** * Enqueues packages to be analyzed. * * @param {Array} packages - The package names to be enqueued. * @param {Queue} queue - The analysis queue instance. * @param {Boolean} dryRun - True to do a dry-run, false otherwise. * * @returns {Promise} The promise that fulfills when done. */ function enqueueViewPackages(packages, queue, dryRun) { log.info(`There's a total of ${packages.length} packages in the view`); packages.forEach((name) => log.debug(name)); if (!packages.length) { return; } if (dryRun) { log.info('This is a dry-run, skipping..'); return; } let count = 0; return Promise.map(packages, (name) => { count += 1; count % 5000 === 0 && log.info(`Enqueued ${count} packages`); return queue.push(name); }, { concurrency: 15 }) .then(() => log.info('View packages were enqueued!')); } // -------------------------------------------------- exports.command = 'enqueue-view [options]'; exports.describe = 'Enqueues all packages contained in a npms view'; exports.builder = (yargs) => yargs .usage('Usage: $0 tasks enqueue-view [options]\n\n\ Enqueues all packages contained in the npms database view.\n\nNOTE: The view must be in the npms database and the key must be the package \ name (may be prefixed with `package!`)') .example('$0 tasks enqueue-view npms-analyzer/docs-to-be-fixed') .option('dry-run', { alias: 'dr', type: 'boolean', default: false, describe: 'Enables dry-run', }) .check((argv) => { assert(/^[a-z0-9_-]+\/[a-z0-9_-]+$/.test(argv.view), 'The view argument must match the following format: '); return true; }); exports.handler = (argv) => { process.title = 'npms-analyzer-enqueue-view'; logger.level = argv.logLevel; const view = argv.view; // Bootstrap dependencies on external services bootstrap(['couchdbNpm', 'couchdbNpms', 'queue']) .spread((npmNano, npmsNano, queue) => { // Stats stats.process(); // The strategy below loads all packages in memory.. we can do this because the total packages is around ~250k // which fit well in memory and is much faster than doing manual iteration (~20sec vs ~3min) return fetchView(view, npmsNano) .then((packages) => enqueueViewPackages(packages, queue, argv.dryRun)); }) .then(() => process.exit()) .done(); }; ================================================ FILE: cmd/tasks/migrate.js ================================================ 'use strict'; const couchdbIterator = require('couchdb-iterator'); const analyze = require('../../lib/analyze'); const bootstrap = require('../util/bootstrap'); const stats = require('../util/stats'); const log = logger.child({ module: 'cli/migrate' }); function extractScope(name) { const match = name.match(/^@([^/]+)\/.+$/); return match ? match[1] : 'unscoped'; } // -------------------------------------------------------------- exports.command = 'migrate [options]'; exports.describe = 'Run the latest migration'; exports.builder = (yargs) => yargs .usage('Usage: $0 tasks migrate [options]\n\n\ Run the latest migration.'); exports.handler = (argv) => { process.title = 'npms-analyzer-migrate'; logger.level = argv.logLevel; // Bootstrap dependencies on external services bootstrap(['couchdbNpm', 'couchdbNpms']) .spread((npmNano, npmsNano) => { log.info('Starting migration'); // Stats stats.process(); // Iterate over all packages return couchdbIterator(npmsNano, (row) => { row.index && row.index % 2500 === 0 && log.info(`Processed ${row.index} rows`); if (!row.doc) { return; } const name = row.doc.collected.metadata.name; row.doc.collected.metadata.scope = extractScope(name); return analyze.save(row.doc, npmsNano) .catch((err) => { log.error({ err }, `Failed to process ${name}`); throw err; }); }, { startkey: 'package!', endkey: 'package!\ufff0', concurrency: 25, limit: 2500, includeDocs: true, }) .then((count) => log.info(`Completed, processed a total of ${count} rows`)); }) .then(() => process.exit()) .done(); }; ================================================ FILE: cmd/tasks/process-package.js ================================================ 'use strict'; const config = require('config'); const analyze = require('../../lib/analyze'); const score = require('../../lib/scoring/score'); const bootstrap = require('../util/bootstrap'); const log = logger.child({ module: 'cli/process-package' }); exports.command = 'process-package [options]'; exports.describe = 'Processes a single package, analyzing and scoring it'; exports.builder = (yargs) => yargs .usage('Usage: $0 tasks process-package [options]\n\n\ Processes a single package, analyzing and scoring it.') .example('$0 tasks process-package analyze cross-spawn') .example('$0 tasks process-package analyze cross-spawn --no-analyze', 'Just score the package, do not analyze') .option('analyze', { type: 'boolean', default: true, describe: 'Either to analyze and score or just score', }); exports.handler = (argv) => { process.title = 'npms-analyzer-process-package'; logger.level = argv.logLevel; const name = argv.package.toString(); // Package 0 evaluates to number so we must cast to a string // Bootstrap dependencies on external services bootstrap(['couchdbNpm', 'couchdbNpms', 'elasticsearch']) .spread((npmNano, npmsNano, esClient) => ( // Analyze the package Promise.try(() => { if (!argv.analyze) { return analyze.get(name, npmsNano); } return analyze(name, npmNano, npmsNano, { githubTokens: config.get('githubTokens'), }); }) .tap((analysis) => log.info({ analysis }, 'Analyze data')) // Score the package .then((analysis) => ( score(analysis, npmsNano, esClient) .tap((score) => log.info({ score }, 'Score data')) .catch({ code: 'SCORE_INDEX_NOT_FOUND' }, () => {}) )) .catch({ code: 'PACKAGE_NOT_FOUND' }, (err) => score.remove(name, esClient).finally(() => { throw err; })) )) .then(() => process.exit()) .done(); }; ================================================ FILE: cmd/tasks/re-evaluate.js ================================================ 'use strict'; const couchdbIterator = require('couchdb-iterator'); const evaluate = require('../../lib/analyze/evaluate'); const save = require('../../lib/analyze').save; const bootstrap = require('../util/bootstrap'); const stats = require('../util/stats'); const log = logger.child({ module: 'cli/re-evaluate' }); exports.command = 're-evaluate [options]'; exports.describe = 'Iterates over all analyzed packages, evaluating them again'; exports.builder = (yargs) => yargs .usage('Usage: $0 tasks re-evaluate [options]\n\n\ Iterates over all analyzed packages, evaluating them again.\nThis command is useful if the evaluation algorithm has changed and \ the evaluation needs to be re-calculated for all packages. Note that the packages score won\'t be updated.'); exports.handler = (argv) => { process.title = 'npms-analyzer-re-evaluate'; logger.level = argv.logLevel; // Bootstrap dependencies on external services bootstrap(['couchdbNpms']) .spread((npmsNano) => { log.info('Starting packages re-evaluation'); // Stats stats.process(); // Iterate over all packages, re-evaluating them return couchdbIterator(npmsNano, (row) => { row.index && row.index % 10000 === 0 && log.info(`Processed ${row.index} rows`); const doc = row.doc; if (!doc) { return; } const name = doc.collected.metadata.name; log.debug(`Evaluating ${name}..`); return Promise.try(() => { doc.evaluation = evaluate(doc.collected); return save(doc, npmsNano); }) .catch((err) => { log.error({ err }, `Failed to evaluate ${name}`); throw err; }); }, { startkey: 'package!', endkey: 'package!\ufff0', concurrency: 25, limit: 2500, includeDocs: true, }) .then((count) => log.info(`Completed, processed a total of ${count} rows`)); }) .then(() => process.exit()) .done(); }; ================================================ FILE: cmd/tasks/re-metadata.js ================================================ 'use strict'; const couchdbIterator = require('couchdb-iterator'); const metadata = require('../../lib/analyze/collect/metadata'); const packageJsonFromData = require('../../lib/analyze/util/packageJsonFromData'); const analyze = require('../../lib/analyze'); const bootstrap = require('../util/bootstrap'); const stats = require('../util/stats'); const log = logger.child({ module: 'cli/re-metadata' }); exports.command = 're-metadata [options]'; exports.describe = 'Iterates over all analyzed packages, running the metadata collector again'; exports.builder = (yargs) => yargs .usage('Usage: $0 tasks re-metadata [options]\n\n\ Iterates over all analyzed packages, running the metadata collector again.\nThis command is useful if there was a bug in the \ metadata collector. Note that the packages score won\'t be updated.'); exports.handler = (argv) => { process.title = 'npms-analyzer-re-metadata'; logger.level = argv.logLevel; // Bootstrap dependencies on external services bootstrap(['couchdbNpm', 'couchdbNpms']) .spread((npmNano, npmsNano) => { log.info('Starting packages re-metadata'); // Stats stats.process(); // Iterate over all packages return couchdbIterator(npmsNano, (row) => { row.index && row.index % 2500 === 0 && log.info(`Processed ${row.index} rows`); if (!row.doc) { return; } const name = row.id .split('!') .slice(1) .join('!'); // Grab package data return npmNano.getAsync(name) .then((data) => { let packageJson; // Extract package json try { packageJson = packageJsonFromData(name, data); } catch (err) { if (!err.unrecoverable) { throw err; } // Remove the package if an unrecoverable error happened // We do this to prevent old metadata to stay around, which will probably cause issues further ahead return analyze.remove(name, npmsNano); } // Re-run metadata return metadata(data, packageJson) // Save it! .then((metadata) => { row.doc.collected.metadata = metadata; return analyze.save(row.doc, npmsNano); }) .catch((err) => { log.error({ err }, `Failed to process ${name}`); throw err; }); }) // Delete the analisis if the package does not exist in npm (e.g.: was deleted) .catch({ error: 'not_found' }, () => analyze.remove(name, npmsNano)); }, { startkey: 'package!', endkey: 'package!\ufff0', concurrency: 25, limit: 2500, includeDocs: true, }) .then((count) => log.info(`Completed, processed a total of ${count} rows`)); }) .then(() => process.exit()) .done(); }; ================================================ FILE: cmd/tasks.js ================================================ 'use strict'; exports.command = 'tasks'; exports.describe = 'Execute a task'; exports.builder = (yargs) => yargs .usage('Group of task commands, choose one of the available commands.\n\nUsage: $0 tasks [options]') .default('log-level', 'info') .commandDir('./tasks') .demandCommand(1, 'Please supply a valid command'); ================================================ FILE: cmd/util/bootstrap.js ================================================ 'use strict'; const config = require('config'); const nano = require('nano'); const elasticsearch = require('elasticsearch'); const promiseRetry = require('promise-retry'); const get = require('lodash/get'); const queue = require('../../lib/queue'); const retriesOption = { minTimeout: 2500, retries: 5 }; const log = logger.child({ module: 'bootstrap' }); /** * Bootstrap several dependencies, waiting for them to be ready: CouchDB, Elasticsearch and Queue. * Tries several times before failing. * * @param {Object} deps - The dependencies to setup. * @param {Object} [options] - The options; read bellow to get to know each available option. * * @returns {Promise} The promise that resolves when they are ready. */ function bootstrap(deps, options) { options = Object.assign({ wait: false, // True to wait for the dependencies to be ready (in case they are unavailable) }, options); // Log uncaught exceptions process.on('uncaughtException', (err) => { log.fatal({ err }, `Uncaught exception: ${err.message}`); throw err; }); return Promise.map(deps, (dep) => { switch (dep) { case 'couchdbNpm': case 'couchdbNpms': return bootstrapCouchdb(config.get(dep), options); case 'elasticsearch': return bootstrapElasticsearch(config.get('elasticsearch'), options); case 'queue': return bootstrapQueue(config.get('queue'), options); default: throw new Error(`Unknown dependency: ${dep}`); } }); } // ---------------------------------------------------------------------------- /** * Bootstraps a CouchDB database client, returning a nano instance. * * @param {Object} config - The CouchDB config. * @param {Object} options - The options inferred from bootstrap(). * * @returns {Promise} The promise that resolves when done. */ function bootstrapCouchdb(config, options) { const nanoClient = Promise.promisifyAll(nano(config)); if (!nanoClient.config.db) { throw new Error('Expected CouchDB URL to point to a DB'); } nanoClient.serverScope = Promise.promisifyAll(nano(Object.assign({}, config, { url: nanoClient.config.url }))); return promiseRetry((retry) => ( nanoClient.getAsync('somedocthatwillneverexist') .catch({ error: 'not_found' }, () => {}) .catch((err) => { log.warn({ err }, `Check of ${nanoClient.config.db} failed`); retry(err); }) ), options.wait ? retriesOption : { retries: 0 }) .then(() => log.debug(`CouchDB for ${nanoClient.config.db} is ready`)) .return(nanoClient); } /** * Bootstraps a Elasticsearch client. * * @param {Object} config - The Elasticsearch config. * @param {Object} options - The options inferred from bootstrap(). * * @returns {Promise} The promise that resolves when done. */ function bootstrapElasticsearch(config, options) { const esClient = new elasticsearch.Client(config); return promiseRetry((retry) => ( Promise.resolve(esClient.get({ index: 'someindexthatwillneverexist', type: 'sometypethatwillneverexist', id: 'someidthatwillneverexist', maxRetries: 0, })) .catch((err) => get(err, 'body.error.type') === 'index_not_found_exception', () => {}) .catch((err) => { log.warn({ err }, 'Check of Elasticsearch failed'); retry(err); }) ), options.wait ? retriesOption : { retries: 0 }) .then(() => log.debug('Elasticsearch is ready')) .return(esClient); } /** * Bootstraps the analysis queue. * * @param {Object} config - The queue config. * @param {Object} options - The options inferred from bootstrap(). * * @returns {Promise} The promise that resolves when done. */ function bootstrapQueue(config, options) { const analysisQueue = queue(config.name, config.addr, config.options); return promiseRetry((retry) => ( analysisQueue.stat() .catch((err) => { log.warn({ err }, 'Check of Queue failed'); retry(err); }) ), options.wait ? retriesOption : { retries: 0 }) .then(() => log.debug('Queue is ready')) .return(analysisQueue); } module.exports = bootstrap; ================================================ FILE: cmd/util/stats/index.js ================================================ 'use strict'; module.exports = require('require-directory')(module, './', { recurse: false }); ================================================ FILE: cmd/util/stats/process.js ================================================ 'use strict'; const pino = require('pino'); const humanizeDuration = require('humanize-duration'); const log = logger.child({ module: 'stats/process' }); /** * Continuously monitor the process, printing metrics such as the memory and uptime. */ function statProcess() { // Do nothing if loglevel is higher than info if (log.levelVal > pino.levels.values.info) { return; } const pid = process.pid; setInterval(() => { const memoryUsage = (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2); const uptime = humanizeDuration(Math.round(process.uptime()) * 1000, { largest: 1 }); log.info(`pid: ${pid}; memory: ${memoryUsage} MB; uptime: ${uptime}`); }, 15000) .unref(); } module.exports = statProcess; ================================================ FILE: cmd/util/stats/progress.js ================================================ 'use strict'; const pino = require('pino'); const log = logger.child({ module: 'stats/progress' }); // TODO: Add status for replication and other stuff? /** * Continuously monitor the analyzer progress, printing information such as the analysis %. * * @param {Nano} npmNano - The npm nano client instance. * @param {Nano} npmsNano - The npms nano client instance. */ function statProgress(npmNano, npmsNano) { // Do nothing if loglevel is higher than info if (log.levelVal > pino.levels.values.info) { return; } let pending = false; setInterval(() => { if (pending) { log.info('Progress stat is still being retrieved..'); return; } pending = true; Promise.props({ npmDocsCount: npmNano.infoAsync().then((res) => res.doc_count), npmDesignDocsCount: npmNano.listAsync({ startkey: '_design/', endkey: '_design0' }).then((res) => res.rows.length), npmsPackagesCount: npmsNano.viewAsync('npms-analyzer', 'packages-evaluation', { reduce: true }) .then((res) => res.rows[0] ? res.rows[0].value : 0), }) .finally(() => { pending = false; }) .then((result) => { const analysis = `${(result.npmsPackagesCount / (result.npmDocsCount - result.npmDesignDocsCount) * 100).toFixed(4)}%`; log.info({ analysis }, 'Progress stat'); }, (err) => { log.error({ err }, 'Progress stat failed'); }) .done(); }, 15000) .unref(); } module.exports = statProgress; ================================================ FILE: cmd/util/stats/queue.js ================================================ 'use strict'; const pino = require('pino'); const log = logger.child({ module: 'stats/queue' }); /** * Continuously monitor the queue, printing information such as the number of enqueued messages. * * @param {Queue} queue - The queue instance. */ function statQueue(queue) { // Do nothing if loglevel is higher than info if (log.levelVal > pino.levels.values.info) { return; } let pending = false; setInterval(() => { if (pending) { log.info('Queue stat is still being retrieved..'); return; } pending = true; queue.stat() .finally(() => { pending = false; }) .then((stat) => { log.info({ stat }, 'Queue stat'); }, (err) => { log.error({ err }, 'Queue stat failed'); }) .done(); }, 15000) .unref(); } module.exports = statQueue; ================================================ FILE: cmd/util/stats/tokens.js ================================================ 'use strict'; const pino = require('pino'); const tokenDealer = require('token-dealer'); const minBy = require('lodash/minBy'); const log = logger.child({ module: 'stats/tokens' }); /** * Monitors the API tokens managed by token-dealer of a given group. * * @param {Array} tokens - The array of tokens. * @param {String} [group] - The token's group (e.g.: Github). */ function statTokens(tokens, group) { // Do nothing if loglevel is higher than info if (log.levelVal > pino.levels.values.info) { return; } setInterval(() => { const tokensUsage = Object.values(tokenDealer.getTokensUsage(tokens, { group })); const usableTokensUsage = tokensUsage.filter((entry) => !entry.exhausted); if (usableTokensUsage.length) { log.info(`${usableTokensUsage.length} out of ${tokensUsage.length} tokens are usable (${group})`); return; } if (tokensUsage.length < 1) { log.info(`No tokens (${group})`); return; } const nextResettingToken = minBy(tokensUsage, 'reset'); const remainingMins = Math.ceil((nextResettingToken.reset - Date.now()) / 1000 / 60); log.info(`All tokens are exhausted, next one will reset in ${remainingMins} minutes (${group})`); }, 15000) .unref(); } module.exports = statTokens; ================================================ FILE: config/couchdb/npms-analyzer-npm.json ================================================ { "_id": "_design/npms-analyzer", "language": "javascript", "views": { "packages-version": { "map": "function (doc) {\n if (doc['dist-tags'] && doc['dist-tags'].latest) {\n emit(doc._id, doc['dist-tags'].latest);\n }\n}" } } } ================================================ FILE: config/couchdb/npms-analyzer-npms.json ================================================ { "_id": "_design/npms-analyzer", "language": "javascript", "views": { "packages-evaluation": { "map": "function (doc) {\n if (doc._id.indexOf('package!') === 0) {\n emit(doc._id.split('!').slice(1).join('!'), doc.evaluation);\n }\n}", "reduce": "_count" }, "packages-stale": { "map": "function (doc) {\n if (doc._id.indexOf('package!') === 0) {\n if (doc.error) {\n if (!doc.error.unrecoverable) {\n emit(['failed', Date.parse(doc.error.caughtAt), doc._id.split('!').slice(1).join('!')]);\n }\n } else {\n emit(['normal', Date.parse(doc.finishedAt), doc._id.split('!').slice(1).join('!')]);\n }\n }\n}" }, "packages-version": { "map": "function (doc) {\n if (doc._id.indexOf('package!') === 0) {\n emit(doc._id.split('!').slice(1).join('!'), doc.collected.metadata.version);\n }\n}" } } } ================================================ FILE: config/default.json5 ================================================ { // Databases & similar stuff couchdbNpm: { url: 'http://admin:admin@127.0.0.1:5984/npm', requestDefaults: { timeout: 15000 }, }, couchdbNpms: { url: 'http://admin:admin@127.0.0.1:5984/npms', requestDefaults: { timeout: 15000 }, }, elasticsearch: { host: 'http://127.0.0.1:9200', requestTimeout: 15000, apiVersion: '6.3', log: null, }, queue: { name: 'npms', addr: 'amqp://guest:guest@127.0.0.1', options: { maxPriority: 1 }, }, // List of packages that will be ignored by the CLI consume command (analysis process) blacklist: { 'hownpm': 'Invalid version: 1.01', 'zachtestproject1': 'Test project that makes registry return 500 internal', 'zachtestproject2': 'Test project that makes registry return 500 internal', 'zachtestproject3': 'Test project that makes registry return 500 internal', 'zachtestproject4': 'Test project that makes registry return 500 internal', 'broken-package-truncated-tar-header': 'Broken tarball', }, // Github tokens to be used by token-dealer githubTokens: [], // Enabled observers. observers: { realtime: true, stale: false, } } ================================================ FILE: config/elasticsearch/npms.json5 ================================================ { // ------------------------------------------------------------------------------ // Index settings // ------------------------------------------------------------------------------ "settings" : { "number_of_shards" : 1, "number_of_replicas": 0, "analysis": { // Custom tokenizers "tokenizer": { // Exclusive tokenizer used for autocompletion highlight so that it correctly highlights partial words.. // See: https://github.com/elastic/elasticsearch/issues/3137#issuecomment-22116469 "autocomplete": { "type": "edgeNGram", "min_gram": "1", "max_gram": "15", "token_chars": ["letter", "digit"], }, }, // Custom filters "filter": { "non_alfanum_to_space": { "type": "pattern_replace", "pattern": "(?i)[^a-z0-9]+", "replacement": " ", }, // Split word filter, which takes tokens, such as es6_promise or lodash.foreach, and splits them // into several other tokens "split_word": { "type": "word_delimiter", "generate_word_parts": true, "generate_number_parts": true, "catenate_words": false, "catenate_numbers": false, "catenate_all": false, "split_on_case_change": true, "preserve_original": true, "split_on_numerics": true, "stem_english_possessive": true, }, // Edge ngram to provide fallback to stemming "edge_ngram": { "type": "edgeNGram", "min_gram": "4", "max_gram": "15", }, // Dedicated filter for autocompletion "autocomplete": { "type": "edgeNGram", "min_gram": "1", "max_gram": "15", }, // Remove duplicate tokens "unique_on_same_position": { "type": "unique", "only_on_same_position": false, }, }, // Custom analyzers "analyzer": { // The packages_* series produces good results for the `name` and `keywords` fields "package": { "tokenizer": "standard", "filter": [ "asciifolding", "split_word", "lowercase", "unique_on_same_position", ], }, "package_english": { "tokenizer": "standard", "filter": [ "asciifolding", "split_word", "lowercase", "kstem", // Non-aggressive english stemmer "unique_on_same_position", ], }, "package_english_aggressive": { "tokenizer": "standard", "filter": [ "asciifolding", "split_word", "lowercase", "porter_stem", // Aggressive english stemmer "unique_on_same_position", ], }, "package_edge_ngram": { // This analyzer provides fallbacks in which the stemmer is not efficient, e.g.: searching for "glob" should match "globby" "tokenizer": "standard", "filter": [ "asciifolding", "split_word", "lowercase", "edge_ngram", "unique_on_same_position", ], }, // The package_autocomplete_* series produces good results for autocompletion "package_autocomplete": { "tokenizer": "standard", "filter": [ "asciifolding", "split_word", "lowercase", "autocomplete", "unique_on_same_position", ], }, "package_autocomplete_keyword": { // This analyzer emits the whole string but replaces non-alfanum with spaces // so that we can use it boost exact prefix matches higher "tokenizer": "keyword", "filter": [ "asciifolding", "non_alfanum_to_space", "lowercase", "autocomplete", "trim", "unique_on_same_position", ], }, "package_autocomplete_keyword_search": { // This analyzer is the "search_analyzer" for "package_autocomplete_keyword" "tokenizer": "keyword", "filter": [ "asciifolding", "non_alfanum_to_space", "lowercase", "trim", ], }, "package_autocomplete_highlight": { // This analyzer is necessary to perform proper highlighting // See: https://github.com/elastic/elasticsearch/issues/3137#issuecomment-22116469 // Can't use split_word which may lead to "strange" highlighting in some edge cases :( "tokenizer": "autocomplete", "filter": [ "asciifolding", "non_alfanum_to_space", "lowercase", "trim", ], }, // The raw analyzer does very small normalizations "raw": { "tokenizer": "keyword", "filter": [ "asciifolding", "lowercase", "trim", ], }, }, // Custom normalizers "normalizer": { // The raw analyzer does very small normalizations "raw": { "type": "custom", "filter": [ "asciifolding", "lowercase", "trim", ], }, }, }, }, // ------------------------------------------------------------------------------ // Mappings // ------------------------------------------------------------------------------ "mappings" : { "score" : { "dynamic": false, "_all": { "enabled": false, }, "properties" : { "package": { "type": "object", "properties": { // The `name`, `description` and `keywords` fields all have `norms` disabled because we don't care about the fields length // Also they have additional fields beyond the `standard` analyzer, such as `package_english`, `package_english` etc "name": { "type": "text", "fields": { "standard": { "type": "text", "analyzer": "standard", }, "english": { "type": "text", "analyzer": "package_english", }, "english_aggressive": { "type": "text", "analyzer": "package_english_aggressive", }, "edge_ngram": { "type": "text", "analyzer": "package_edge_ngram", "search_analyzer": "package", }, "autocomplete": { "type": "text", "analyzer": "package_autocomplete", "search_analyzer": "package", }, "autocomplete_highlight": { "type": "text", "analyzer": "package_autocomplete_highlight", "search_analyzer": "package", "index_options": "offsets", }, "autocomplete_keyword": { "type": "text", "analyzer": "package_autocomplete_keyword", "search_analyzer": "package_autocomplete_keyword_search", }, "raw": { "type": "keyword", "normalizer": "raw", }, }, }, "description": { "type": "text", "fields": { "standard": { "type": "text", "analyzer": "standard", }, "english": { "type": "text", "analyzer": "package_english", }, "english_aggressive": { "type": "text", "analyzer": "package_english_aggressive", }, "edge_ngram": { "type": "text", "analyzer": "package_edge_ngram", "search_analyzer": "package", }, }, }, "keywords": { "type": "text", "fields": { "standard": { "type": "text", "analyzer": "standard", }, "english": { "type": "text", "analyzer": "package_english", }, "english_aggressive": { "type": "text", "analyzer": "package_english_aggressive", }, "edge_ngram": { "type": "text", "analyzer": "package_edge_ngram", "search_analyzer": "package", }, "raw": { "type": "text", "analyzer": "raw", } }, }, "version": { "type": "text", "index": false, }, "date": { "type": "date", "index": false, }, "links": { "type": "object", "properties": { "npm": { "type": "text", "index": false }, "homepage": { "type": "text", "index": false }, "repository": { "type": "text", "index": false }, "bugs": { "type": "text", "index": false }, }, }, "author": { "type": "object", "properties": { "name": { "type": "keyword", "normalizer": "raw", }, "username": { "type": "keyword", "normalizer": "raw", }, "email": { "type": "keyword", "normalizer": "raw", }, "url": { "type": "text", "index": false }, }, }, "publisher": { "type": "object", "properties": { "username": { "type": "text", "index": false }, "email": { "type": "text", "index": false }, }, }, "maintainers": { "type": "object", "properties": { "username": { "type": "keyword", "normalizer": "raw", }, "email": { "type": "keyword", "normalizer": "raw", }, }, }, "scope": { "type": "keyword", "normalizer": "raw", }, }, }, "flags": { "type": "object", "properties": { "deprecated": { "type": "text", "index_options": "docs" }, "insecure": { "type": "integer" }, "unstable": { "type": "boolean" }, }, }, "evaluation": { "type": "object", "properties": { "quality": { "type": "object", "properties": { "carefulness": { "type": "double", "index": false }, "tests": { "type": "double", "index": false }, "health": { "type": "double", "index": false }, "branding": { "type": "double", "index": false }, }, }, "popularity": { "type": "object", "properties": { "communityInterest": { "type": "double", "index": false }, "downloadsCount": { "type": "double", "index": false }, "downloadsAcceleration": { "type": "double", "index": false }, "dependentsCount": { "type": "double", "index": false }, }, }, "maintenance": { "type": "object", "properties": { "releasesFrequency": { "type": "double", "index": false }, "commitsFrequency": { "type": "double", "index": false }, "openIssues": { "type": "double", "index": false }, "issuesDistribution": { "type": "double", "index": false }, }, }, }, }, "score": { "type": "object", "properties": { "final": { "type": "double" }, "detail": { "type": "object", "properties": { "quality": { "type": "double" }, "popularity": { "type": "double" }, "maintenance": { "type": "double" }, }, }, }, }, }, }, }, } ================================================ FILE: docs/architecture.md ================================================ # Architecture The `npms-analyzer` runs two continuous and distinct processes. One is the `analysis` process where each package gets inspected and evaluated. The other one is the `continuous scoring` process where all packages get a score based on the aggregated evaluation results. - [Analysis](#analysis) - [Continuous scoring](#continuous-scoring) ## Analysis The analysis process analyzes the `npm` packages, producing a result and a score. ![analysis](./diagrams/analysis.png) By looking at the diagram above, you get an idea of how the analysis process works. Below you may find a more detailed description for the most complex components. The `grey` components are present in `lib`. ### Observers Observers continuously push packages to the queue whenever they see fit. - realtime - Observes the replicated `npm` registry for changes, pushing new or updated packages into the analyze queue. - stale - Fetches packages that were not analyzed for some time, pushing them to the queue. The packages reported by the `realtime` have priority over the other observers, so that recently published packages are analyzed first. ### Queue The queue holds all packages that are waiting to be analyzed. This component gives us: - Burst protection - No loss of packages on crashes or failures - Automatic retries ### Analyze The analyze is a simple pipeline that produces an analysis result: 1. Fetches the package data 2. Downloads the source code 3. Runs the collectors 4. Runs the evaluators 5. Stores the result in CouchDB and Elasticsearch Below you may find additional information on the collectors and evaluators. #### Collectors The collectors are responsible for gathering useful information about each package from a variety of sources: - metadata - source - github - npm ##### metadata The metadata collector extracts basic data and attributes of a package. - Extract package name, scope, description and keywords - Extract package author, maintainers and contributors - Extract the license - Get releases timing information - Extract repository and homepage - Extract README - Extract the package dependencies - Check if the package is deprecated - Check if the package has a test script ##### source The source collector digs into the source code. - Check certain files: `.npmignore`, `.gitignore`, `.gitattributes`, README size, tests size, etc - Detect linters, such as `eslint`, `jshint`, `jslint` and `jscs` - Detect badges in the README - Compute code complexity * - Grab the code coverage % - Get repository file size - Get dependencies insight, including if they are outdated - Search for tech debts: TODOs, FIXMEs, etc * - Get security insight with node security project Items signaled with * are not yet done. ##### github The github collector uses GitHub to collect useful data and statistics present there. - Get number of stars, subscribers and forks - Fetch the repository activity in terms of commits - Fetch the number of issues and their distribution over time - Extract the homepage - Fetch contributors - Check the build status This collector is susceptible to the GitHub [rate limit](https://developer.github.com/v3/rate_limit/) policy. To fight against this limit, you may define several GitHub keys in the config to be used in a round-robin fashion. ##### npm The npm collector uses the replicated CouchDB views and the npm [download-counts](https://github.com/npm/download-counts) API to extract useful information present there. - Get number of stars - Get number of downloads over time - Get number of dependents #### Evaluators The evaluators take the information that was previously collected and evaluate different aspects of the package. These aspects are divide in four categories: - quality - popularity - maintenance - personalities Evaluators may further divide each of these aspects into more granular ones, but their values are always scalars. ##### quality Quality attributes are easy to calculate because they are self contained. These are the kind of attributes that a person looks first when looking at the package. Below are some of the points taken into consideration: - Has README? Has license? Has .gitignore and friends? - Is the version stable (> 1.x.x)? Is it deprecated? - Has tests? Whats their coverage %? Is build passing? - Has outdated dependencies? Do they have vulnerabilities? - Has custom website? Has badges? - Does the project have linters configured? - What's the code complexity score? ##### maintenance Maintenance attributes allows us to understand if the package is active & healthy or if it is abandoned. These are typically the second kind of attributes that a person looks when looking at the package. Below follows some of the points taken into consideration: - Ratio of open issues vs the total issues - The time it takes to close issues - Most recent commit - Commit frequency ##### popularity Popularity attributes allows us to understand the package adoption and community size. These are the kind of attributes that a person looks when they are undecided on the package choice. Below follows some of the points taken into consideration: - Number of stars - Number of forks - Number of subscribers - Number of contributors - Number of dependents - Number of downloads - Downloads acceleration ##### personalities If two packages are similar, one tend to choose the one in which the author is well known in the community. While this doesn't directly translate to quality, it's still a strong factor that we should account. Relationships between people are also important. When an user follows another, there's a bound between them. We can infer that people prefer packages from the users they follow. I will not elaborate on this because this evaluator will NOT be developed nor used in the initial release. ### Scoring Calculates the package score based on the current aggregation if any. If there's no aggregation, the package won't be scored at the moment, but it will be later in the `continuous scoring` process. ## Continuous scoring The continuous scoring process runs once in a while to score all `npm` packages, indexing the score data in `Elasticsearch` to be searchable. ![continuous-scoring](./diagrams/continuous-scoring.png) By looking at the diagram above, you get an idea of how the continuous scoring process works. Below you may find a more detailed description for each component. The `grey` components are present in `lib`. One important detail is that the continuous scoring process creates and maintains two [aliases](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html): - `npms-current`: The index with the full data from the last completed scoring process - `npms-new`: The index that the current scoring process is writing to ### Prepare The prepare step creates a new index and updates the `npms-new` alias to point to that index. It also removes extraneous indices from previous failed cycles (if any). ### Aggregate The aggregation step iterates all the packages evaluations, calculating the `min`, `max` and `mean` values for each evaluation. The aggregation is stored in CouchDB to also be used by the `analysis` process. ### Score packages After having the aggregation done, all packages are iterated again to produce a score based on the previously calculated aggregation. The package evaluation and aggregation `mean` are normalized ([0, 1]), using the aggregation `min` and `max` values, and a Bezier Curve is computed using 4 control points: (0, 0), (normalizedAggregationMean, 0.75), (normalizedAggregationMean, 0.75), (1, 1). The package score is the Y value that corresponds, in this curve, to the package evaluation (X axis). ![bezier](./diagrams/bezier.png) The score data for each package are stored in `Elasticsearch` into both `npms-current` and `npms-new` indices. ### Finalize The finalize step updates the `npms-current` alias to point to the newly populated index and deletes the `npms-new` alias and previous index. ================================================ FILE: docs/deploys.md ================================================ # Deploys We use `pm2` to deploy `npms-analyzer`, install it by running `$ npm install -g pm2`. You may find the pm2 configuration file in `ecosystem.json5`. ## Setting up Before doing the first deploy, you need to setup the server. All commands executed in the server are expected to be run with `analyzer` user. - Create the `analyzer` user on server - Add `analyzer` user to the list of sudoers - Install pm2 in the server - Setup the deploy environment by running `$ pm2 deploy ecosystem.json5 production setup` in your local machine - Create `~/npms-analyzer/local.json5` in the server with the custom configuration (databases, GitHub API tokens, etc) - Do your first deploy by running `$ pm2 deploy ecosystem.json5 production` in your local machine - Setup logrotate by running `$ sudo pm2 logrotate -u analyzer` on the server and then edit `/etc/logrotate.d/pm2-www` to change change `/root` to `/home/analyzer`, weekly to daily, and from 12 days to 14 days) - Setup pm2 to run at start by running `$ sudo pm2 startup -u analyzer --hp "/home/analyzer"` on the server - Finally run `$ pm2 save` to store the running processes ## Deploying Deployment is easy, just run `$ pm2 deploy ecosystem.json5 production` in your local machine. ================================================ FILE: docs/diagrams/analysis.xml ================================================ 7Vxbc+K4Ev41qZrzkBRgLsljmElmHnZrZzcPe/bplMAC+0RYHtmEZH79tOxuX2UwQSY7E0MV2EKS5e5PfTcXzsfN82fFQu936XJxMRq4zxfOp4vRaDaZwKdueEkbxsObtGGtfDdtGuYND/53jo0DbN36Lo9KHWMpReyH5calDAK+jEttTCm5K3dbSVG+asjWdMW84WHJRL31b9+NvbT1ejTN279wf+3RlYdTvL8FWz6uldwGeL2LkbNKXunPG0ZzJTfq3AENlZQwjT7aPH/kQtORaJRS477h12yRige4kAMDHBzyxMQW7zRtiOIXuvWd58f8IWRLfb4D7l44cy/eCDgbwmEUK/nIP0ohFbQEMoBu85UvBDXBHd990m/dLoMYmQtLS88L/ab349E1LDbth0ugJXIVc4ST4UaTJrzLz1xueKxeoAsOmA7xvhB+zhRxtcuZOURiDbwiIwfYyBBA62zunK5wgKRtIPPo+qchc42mBso3ktlBYiGVafMWiDw2EpnGnUbk2bskskPnBSpPJiYq31igMsq7Eo2nAq4wd/0nOFzrQ2paqGoLTG/oV2jigkWxv2zdP+JMLb2m7hXuRx4L9eHyRfiBy4FR8wOASAQ31/euOQzjXbnDkzWsVBMy+aGEG2D+8Fa/6+C5T156tGKuDxioYg2wcs82vtDM/cLFEwdisDLYhk4dbGPYWGPAzJwJfx3oW4S5kxu0ALgZ7WPa1gbhOTMAzgbehuMaF7kLmhlPpYo9uZYBE3d5a4VrBXYCDdTLf7E9OflHn1xNqszlgXurrQY4XQi5fEyb7oGZONP/eRy/IEPYNpbQlK/lNykBRwaJUkRG+gsZE7pvWx43sjSSW5UAWRMfjSSm1px6oTzUBNzLdwW7MPafyqaPiYvJUCAU06OoQyj9II5qTM7mb8d3tBfbCZpC04fIh+3DQPKAgdhajAThRl88WMn/7B9zQMLAjtLtRQnCI/87WyQdNLKQOtB7Mr+YaD1i2rV6c8LGF7f4w8Z33QTagi24mGc2pUF8VBHUKE5aQgs3oMH8Qlsbb65kwprEyOXgajBDtpIXkJ4dh7fN81dNw8LE0/Ksl6T9aAq5WkWwCU5DJG6oAiDBydnCrYNTw2J2rKnRaxZtu6BdnDmFBqucDPCiZhlb0CxkyljSLM9+rBULHed65R3pHFIwJaWDLLasdGpCwBmi+U9YqvoU6aJwVA6TbrQXEqIgLD7JXSAkc3OSaQHqwlcvN46WG8OKxD+r4CBEF5gL9y1AE0qVAuddsdOTyv8OnZm+Jb1WC/wd3VTCNaTRC/wl3VFycckzOYm/dU0Pc7Beyb9WyVcDFgZmkqtoXcnX45uJqd+z8WQ2jsnlPwcb6/p07cfedtFz0gYnDRHErjjpOI1+fRSyoMTM6betToTMIVjHL2kht9BleKUH4a9ZJBCtqsxPT+drcNR7nLxCcBMozoCTGWr3Pu6Xj2zlg5FULvpgaNCcLe5n9tAqUWSCSZab3N+dhFSOn/T6r3XRiE5NAUaDHNLBvUvcaFoM4V6rSaIs/UENf245XCOXTNkPLaOKsHLIc2uEdyS2BslrT67LstjKIF0TW/vjmzZcx2scQjAkN/FQJvjaglS7oQ1rWarlgaZErv2CUs2QzqAdbE+stVZOdQ/xL86gGGWjozpyEXEFgKxnQT8IP4p5ADISClB0hiLgO10DksSRobVNfiMZB7NHvkwmcn0FkQfYgDCnkjqLsZTbpecuTktknFnQdGUfNQsaG/ZROeI4QSelKEhMaVErgqRe2nCCIPnFhAVJ+H+HsKDVFITFAwTLTJKimMYMOX/U+zsTDoPYY9o82nGlxwZgcsDCgOQvEfCUJAqEqAawdwVv3P79Rj8+HDlDr/UtdrrJYa7WtdT2U3lzJ0Uvm2cgeehdrYTcLT2m4isWAIgA7DL4X9GFFHylkdKS8+fmrwV2jq/L2QNDPNJUP5UVXp0UXB7YNQENaceSaZid0C+/gKzvPJV4g6lhinvMUNHTFKmyqaUSj5+oISf5mowjZaX6gEk+snF3wPFXrsBcT1TE/qxVOcGN0riU4aaY5hvHV6bkyZojJsf2L0dY6qOnZT86K+w9dpPMKsvIZG8Hm2RQd9zslq9aimXXV6B4KEBRxompR9VqubPXGPZueyd9pawNy2JK1XJkWaC8P0ehLMVLO8M2oE67IRGUOeiHZXogdQikCRUyvEXJtaEA4k4fs77AxVaBy5iU3J6aCEqj2S9wIVVdYPC3Ldx3nE7T50mPZCbtuj3MpFCA9WI0Q4VLCNFhbV37sa8DRz1HT+aoqdalO47Wi102DIxfHrBAFzj0/Dydn4aKl+742VnJSyjDLTzqksjtvuylM3FuKHvpDiwYmjxTeLCSOf65AoRHhXG6DhpWLfba8wdt4yGTm3J0ust4SP8MjJVnYA5iiyQLDWjCyGGYVR0He4+51C91aLUNiH4VEA8E5lpUYyVpq5qK/ANTrFl1xdEPcB78TwBsqqTPGp/gNKlgCb11Xg5aPOjHYUDr/NupCTXrf09QznmQr1l6MgejZKXsmg3tSQi1DqNbnWcHWvYgehMQOWRbnQdFdQfMDooelhBKCtY9itqj6LR//SE4ZPnXOozIbLOPInpwfk/hRsfG1psZ91n1z6nZ/4pldThBS7nYYoI2kSVnqPTKLl4s9YItr8u10jKu9+qPn7iLy9VXXT7sC6f5v6+lhmz+d3bO3Q8= ================================================ FILE: docs/diagrams/continuous-scoring.xml ================================================ 7VpZb+M2EP41fkxgHT7yaGfj3YcWWCAF2j4VtERLbCjRpehrf/0OqaF1+zqSAhsbMMTRkCLn++Yg5Z73nGy/SrKMfxch5T23H2573pee645GffjVgl0uGHgoiCQLc5FTCF7ZD4pCq7ZiIc0qikoIrtiyKgxEmtJAVWRESrGpqi0Erz51SSL7xELwGhDelP7JQhXn0rE7LOTfKIti+2Rn+JTfmZPgLZJileLzeq63MJ/8dkLsWGah3gvYUAoBw+irZPtMubajtVFujVnH3f0kJU1xIkc6uKO8y5rwFa40F2RqZ5e+iZmir0sS6PYG0O1501glHFoOXGZKijf6LLiQIElFCmrTBePcimDFL1/0V8tFqhBcmFreLukNZ747hsnmejiFllWhaE2losgwI8JVfqUioUruQAXvWrYh+zzb3hRY+k8oi8s49lFIkD/RfujCrHCBlm23MnKkYuMhhydMQ7aGy0hfWtFc1iUwfIteSUQ5yRQLTtbPKJFB3KVeQz+LyVJfBjvO0pACUNMjhDBkp3rtGmHoH4oNNiKYqTakuVHhDYDvTPS3SZ6Z+ejekoQMOFDnGnBlRhLGNbjfKF9TMAapks3xmmTzXf0FOeEsSvUSYWyzwBsQzn0aVxjn+E3G2ZhYJpwl4TV8c/wGijSEaIZNIVUsIpES/lJIa6iV4AQbyN1fKDeNv3XjcVAHl6bhREdaaM65CN5y0QzAxJH+pUrtEBCyUgJExVx+EwJ41BJRyszI79gArHVPxbgT0kyspCGyNj4mFiIjarUwHmoDHsRdghcqtq6mizYUTVcwFNG9rMJSsFRlDZD345+EO06/FGe+S6qXfG5I//RgnSOqDuyNmw68zw5lD7aOfo0H25RxIw/eMqUd2F4X/vsL+bZ15Ipze2jnG3t3sv2u/bmcDfDpSCa/Xlbks8JeBU/uEiasJUpxYhJFkkZEfUaKSyKFMxx8XKhw+pbsd4sVlSpg37B3/vdxYt+zE+p7u7/3hHHGEmSE2y47RB6oGu5//kAdceSSKGF33nfbtqTLBEIZ8FZIvfn+3I7cM0SNvI/bjtjNdheTSvgO/1vps48pLEs9oCEmoMHpAght71p2vAZCsjQ6kTp6zDOPLlBkETGz8Kba7AApn6A4YWFoomobEwVoL7ihXAx6FDqcSslLmVQw99anKLXo00Iip4+bzzKL8BTqShbhwIeOqu5SJL9Tguubz1UJrj1J56tozXTHq2YPE0y5bDYsuHmSHLnVEOXbsHF2kvSr5ZgzwvbFxXb7cwaW/rWivmtedX1nnM+rcIB8BhdnbA8PAH6BXeMNnOVSh8AYWN1HGi+5wiVOj4LNw2SdBaF86iciXHF4R/KLbuEaaawFywPHtbUXBO+6hbNBtgTqjIEHaGN8onk+mr7du3wImjb9HCpUmmGrXJbiHifZgtGX8aMuH4OYSPVI0lQoiCgi/adsO6xLTy0r3wfhPaMkThnED+Bmt/FXH13G5tJhE+FBC8D7F4HXIdz2Rq9jo2pBnC+T9JGblHYLfz2UADvevd4L3xoLb+G/9WMOu4Eooevi8XwFXSyArgJ30DweNbDpp8PDYXT9NwZI7DDsFcchRzenkmbsB5kbBQ00lqOgPZj2BhpQXTGBTr67O7pLVYZ6GWQO2DL/YUqrB78D5k4+dBdS1wHer52g2uBcDtg2qJcRv8CdoVn8wSIvs4t/rHgvPwE= ================================================ FILE: docs/setup.md ================================================ # Setup Below you will find a list of items that you must do to get the project working on your local machine. The production setup document is not present in the repository for security reasons. ## Config file This project uses [config](https://www.npmjs.com/package/config) for configuration. You may create `config/local.json5` file to override the configuration as necessary, especially to define `githubTokens`. ## Programs & utilities - `node` must be installed and available in `$PATH` (`>= v8`) - `git` must be installed and available in the `$PATH`. - GNU coreutils (`rm`, `mkdir`, `chmod`, `wc`) must be available. - `tar` or `bsdtar` must be available (BSD version is preferred.. on Debian install with `$ aptitude install bsdtar`) - Install the `pino` CLI to prettify logging output by running `$ npm install -g pino-pretty` ## CouchDB - Install [CouchDB](http://couchdb.apache.org/) and run it (tested with `v2.2`). - Create database named `npms` by executing `curl -X PUT http://admin:admin@localhost:5984/npms` - Setup npm replication from `https://replicate.npmjs.com/registry` to `npm` database in `continuous` mode. - Setup the necessary views by creating the document `_design/npms-analyzer-npm` in the `npm` database with the contents of `https://github.com/npms-io/npms-analyzer/blob/master/config/couchdb/npm-analyzer.json` - Setup the necessary views by creating the document `_design/npms-analyzer-npms` in the `npms` database with the contents of `https://github.com/npms-io/npms-analyzer/blob/master/config/couchdb/npms-analyzer.json` Note: for the replication to work, you might need to [tweak](https://github.com/apache/couchdb/issues/1550#issuecomment-411751809) `auth-plugins` in the CouchDB config: ``` [replicator] auth_plugins = couch_replicator_auth_noop ``` ## RabbitMQ **NOTE**: You may put `RabbitMQ standalone` into the gitignored `dev` folder while developing! - Install [RabbitMQ](https://www.rabbitmq.com/download.html) and run it (tested with `v3.6.1`). - Install the [management](https://www.rabbitmq.com/management.html) plugin which is very useful by running `rabbitmq-plugins enable rabbitmq_management` - Head to `http://localhost:15672` and login with `guest/guest` and see if everything is ok. ## Elasticsearch **NOTE**: You may put the `Elasticsearch` app into the gitignored `dev` folder while developing! - Install [Elasticsearch](https://www.elastic.co/downloads/elasticsearch) (tested with `v6.4`) - Install the [head](https://github.com/mobz/elasticsearch-head) to perform various manual operations in a web GUI - Add these configurations to the `elasticsearch.yml`: - `action.auto_create_index: -npms-current,-npms-new,+*` ## Crontab If you plan to run this in production, you should add `$ npms-analyzer tasks enqueue-missing` and `$ npms-analyzer tasks clean-extraneous` to crontab. These tasks ensure that, in case of errors, the `npms` packages are in sync with the packages from the `npm` registry. ================================================ FILE: ecosystem.json5 ================================================ // This is the pm2 configuration file for npms-analyzer { apps: [ { name: 'npms-analyzer-observe', script: './cli.js', args: 'observe', instances: 1, env : { NODE_ENV: 'production' }, max_memory_restart: '2018M', // Restart if it's getting close to the limit node_args: '--max_old_space_size=2048', }, { name: 'npms-analyzer-consume', script: './cli.js', args: 'consume --concurrency 5', instances: 2, env : { NODE_ENV: 'production' }, max_memory_restart: '2018M', // Restart if it's getting close to the limit node_args: '--max_old_space_size=2048', }, { name: 'npms-analyzer-scoring', script: './cli.js', args: 'scoring', instances: 1, env : { NODE_ENV: 'production' }, max_memory_restart: '4066M', // Restart if it's getting close to the limit node_args: '--max_old_space_size=4096', }, ], deploy: { production: { user: 'analyzer', host: '212.47.252.55', ref: 'origin/master', repo: 'https://github.com/npms-io/npms-analyzer.git', path: '/home/analyzer/npms-analyzer', 'post-deploy': '\ cp ../local.json5 ./config/ && \ npm update --loglevel http --production && \ pm2 startOrRestart ecosystem.json5 --env production', }, }, } ================================================ FILE: lib/analyze/collect/bin/david-json ================================================ #!/usr/bin/env node 'use strict'; global.Promise = require('bluebird'); // Some packages have a .npmrc to integrate with CI systems which require NPM_TOKEN env var to be defined // See: https://github.com/alanshaw/david/issues/109 process.env.NPM_TOKEN = ''; process.env.AUTH_TOKEN = ''; process.env.NPM_AUTH_TOKEN = ''; process.env.SOCIALTABLES_NPM_TOKEN = ''; // https://github.com/socialtables/react-table-sorter/blob/master/.npmrc const path = require('path'); const yargs = require('yargs'); const loadJsonFile = require('load-json-file'); const david = Promise.promisifyAll(require('david')); const argv = yargs .strict() .wrap(Math.min(120, yargs.terminalWidth())) .help() .alias('help', 'h') .usage('Usage: $0 --registry [registry-url]') .option('registry', { type: 'string', alias: 'r', describe: 'The registry URL', default: 'https://registry.npmjs.org', }) .argv; // --------------------------------------- const packageJsonPath = path.join(process.cwd(), 'package.json'); loadJsonFile(packageJsonPath) .then((packageJson) => ( david.getUpdatedDependenciesAsync(packageJson, { npm: { 'fetch-retries': 0, // No need for retries, the registry is local registry: argv.registry, }, loose: true, // Enable loose semver, there's some really strange versions that got into the registry somehow stable: true, }) )) .then((deps) => { process.stdout.write(JSON.stringify(deps, null, 2)); process.stdout.write('\n'); }) .done(); ================================================ FILE: lib/analyze/collect/github.js ================================================ 'use strict'; const got = require('got'); const moment = require('moment'); const ghIssuesStats = require('gh-issues-stats'); const tokenDealer = require('token-dealer'); const deepCompact = require('deep-compact'); const promiseRetry = require('promise-retry'); const uniqBy = require('lodash/uniqBy'); const pick = require('lodash/pick'); const promisePropsSettled = require('./util/promisePropsSettled'); const pointsToRanges = require('./util/pointsToRanges'); const hostedGitInfo = require('../util/hostedGitInfo'); const gotRetry = require('../util/gotRetry'); const unavailableStatusCodes = [404, 400, 403, 451]; // 404 - not found; 400 - invalid repo name; 403/451 - dmca takedown const log = logger.child({ module: 'collect/github' }); /** * Extract commits frequency based on the /stats/commit_activity response. * * @param {Object} commitActivity - The commit activity response. * * @returns {Array} The commits. */ function extractCommits(commitActivity) { // Aggregate the commit activity into ranges const points = commitActivity.map((entry) => ({ date: moment.unix(entry.week).utc(), count: entry.total })); const ranges = pointsToRanges(points, pointsToRanges.bucketsFromBreakpoints([7, 30, 90, 180, 365])); // Finally map to a prettier array based on the ranges return ranges.map((range) => ({ from: range.from, to: range.to, count: range.points.reduce((sum, point) => sum + point.count, 0), })); } /** * Utility function to do a request to the GitHub API. * * @param {String} resource - The resource path. * @param {Object} options - The options inferred from github() options. * * @returns {Promise} The promise for GitHub response. */ function githubRequest(resource, options) { const url = `https://api.github.com${resource}`; return promiseRetry((retry) => ( // Use token dealer to circumvent rate limit issues tokenDealer(options.tokens, (token, exhaust) => { const handleRateLimit = (response, err) => { if (response.headers['x-ratelimit-remaining'] === '0') { const isRateLimitError = err && err.statusCode === 403 && /rate limit/i.test(response.body.message); exhaust(Number(response.headers['x-ratelimit-reset']) * 1000, isRateLimitError); } }; return got(url, { json: true, timeout: 30000, headers: Object.assign({ accept: 'application/vnd.github.v3+json' }, token ? { authorization: `token ${token}` } : null), retry: gotRetry, }) .then((response) => { handleRateLimit(response); return response; }, (err) => { err.response && handleRateLimit(err.response, err); throw err; }); }, { group: 'github', wait: options.waitRateLimit, onExhausted: (token, reset) => log.error(`Token ${token ? token.substr(0, 10) : ''}.. exhausted`, { reset }), }) .then((response) => { // If response is 202, it means that there's no cached result so we must wait a bit and try again if (response.statusCode === 202) { log.debug(`Got 202 response for ${url} (not cached), retrying..`); retry(Object.assign(new Error(`Empty response for ${url}`), { code: 'NO_CACHED_RESPONSE' })); } // If response is 204, it means that there's no content.. e.g.: there's no commits yet if (response.statusCode === 204) { return null; } return response.body; }) ), { minTimeout: 2500, retries: 5 }) // If after all the retries there's still no content, return an empty array .catch({ code: 'NO_CACHED_RESPONSE' }, (err) => { log.warn({ err }, err.message); return []; }) // Check if the repository is unavailable .catch((err) => unavailableStatusCodes.indexOf(err.statusCode) !== -1, (err) => { log.info({ err }, `GitHub request to ${url} failed with ${err.statusCode}`); return null; }) .catch((err) => { /* istanbul ignore next */ log.error({ err }, `GitHub request to ${url} failed`); /* istanbul ignore next */ throw err; }); } /** * Fetches statistical information for a repository. * * @param {String} repository - The {user}/{project}. * @param {Object} options - The options inferred from github() options. * * @returns {Promise} The promise for the stats. */ function fetchIssuesStats(repository, options) { return ghIssuesStats(repository, { tokens: options.tokens, concurrency: 5, got: { retry: gotRetry }, tokenDealer: { wait: options.waitRateLimit, lru: tokenDealer.defaultLru, onExhausted: (token, reset) => log.error(`Token ${token ? token.substr(0, 10) : ''}.. exhausted`, { reset }), }, }) // Sum up the issues with the pull requests .then((stats) => ({ count: stats.issues.count + stats.pullRequests.count, openCount: stats.issues.openCount + stats.pullRequests.openCount, distribution: Object.keys(stats.issues.distribution).reduce((accumulated, range) => { accumulated[range] = stats.issues.distribution[range] + stats.pullRequests.distribution[range]; return accumulated; }, {}), })) // Check if the repository is unavailable .catch((err) => unavailableStatusCodes.indexOf(err.statusCode) !== -1, (err) => { log.warn({ err }, `Fetch of issues stats for ${repository} failed with ${err.statusCode}`); return null; }) .catch((err) => { /* istanbul ignore next */ log.error({ err }, `Fetch of issues stats for ${repository} failed`); /* istanbul ignore next */ throw err; }); } // ---------------------------------------------------------------------------- /** * Runs the github analyzer. * If the repository is not hosted in GitHub, the promise resolves to `null`. * * @param {Object} packageJson - The latest package.json data (normalized). * @param {Object} downloaded - The downloaded info (`dir`, `packageJson`, ...). * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Promise} The promise that fulfills when done. */ function github(packageJson, downloaded, options) { let repository = packageJson.repository; if (!repository) { log.debug(`No repository field present for ${packageJson.name}, ignoring..`); return Promise.resolve(null); } const gitInfo = hostedGitInfo(repository.url); if (!gitInfo || gitInfo.type !== 'github') { log.debug({ repository }, `Repository for ${packageJson.name} is not hosted on GitHub, ignoring..`); return Promise.resolve(null); } options = Object.assign({ tokens: null, // The GitHub API tokens to use waitRateLimit: false, // True to wait if rate limit for all tokens were exceeded, }, options); repository = `${gitInfo.user}/${gitInfo.project}`; return promisePropsSettled({ info: githubRequest(`/repos/${repository}`, options), contributors: githubRequest(`/repos/${repository}/stats/contributors`, options), commitActivity: githubRequest(`/repos/${repository}/stats/commit_activity`, options), issuesStats: fetchIssuesStats(repository, options), statuses: githubRequest(`/repos/${repository}/commits/${downloaded.gitRef || 'master'}/statuses`, options), }) .then((props) => { if (!props.info) { log.info(`The GitHub repository ${repository} is unavailable`); return null; } if (!props.contributors || !props.commitActivity || !props.issuesStats) { log.info(`It seems that the GitHub repository ${repository} is empty`); return null; } return deepCompact({ homepage: props.info.homepage, forkOf: (props.info.fork && props.info.parent && props.info.parent.full_name) || null, starsCount: props.info.stargazers_count, forksCount: props.info.forks_count, subscribersCount: props.info.subscribers_count, issues: Object.assign(props.issuesStats, { isDisabled: !props.info.has_issues }), // Contributors (top 100) contributors: props.contributors .map((contributor) => { const author = contributor.author; // Empty entries will be stripped by deepCompact return author && { username: contributor.author.login, commitsCount: contributor.total }; }) .reverse(), // Commit activity commits: extractCommits(props.commitActivity), // Statuses statuses: uniqBy(props.statuses, (status) => status.context) .map((status) => pick(status, 'context', 'state')), }); }) .tap(() => log.debug(`The github collector for ${packageJson.name} completed successfully`)); } module.exports = github; ================================================ FILE: lib/analyze/collect/index.js ================================================ 'use strict'; const pickBy = require('lodash/pickBy'); const intersectionWith = require('lodash/intersectionWith'); const isEmpty = require('lodash/isEmpty'); const collectors = require('require-directory')(module, './', { recurse: false }); const promisePropsSettled = require('./util/promisePropsSettled'); const log = logger.child({ module: 'collect' }); /** * Checks if a package matches the downloaded repository. * * Unfortunately many people try to trick the system by pointing their repositories to popular repositories, * such as `jQuery`. * * @param {String} data - The package data. * @param {Object} packageJson - The latest package.json data (normalized). * @param {Object} downloaded - The downloaded info (`dir`, `packageJson`, ...). * @param {Nano} npmNano - The npm nano client instance. * * @returns {Promise} A promise that resolves to true if publisher is the owner, false if in doubt. */ function checkRepositoryOwnership(data, packageJson, downloaded, npmNano) { // If name is equal, then the publisher is the owner.. no further checks required if (packageJson.name === downloaded.packageJson.name) { return Promise.resolve(true); } const repositoryUrl = packageJson.repository && packageJson.repository.url; const downloadedRepositoryUrl = downloaded.packageJson.repository && downloaded.packageJson.repository.url; // Check if both have no repository if (!repositoryUrl && !downloadedRepositoryUrl) { return Promise.resolve(true); } // Check if download actually failed (e.g.: does not exist) if (isEmpty(downloaded.packageJson)) { return Promise.resolve(false); } // Do a final check against the maintainers of the downloaded package return npmNano.getAsync(downloaded.packageJson.name) .then((downloadedData) => ( intersectionWith(data.maintainers, downloadedData.maintainers, (maintainer, downloadedMaintainer) => maintainer.name === downloadedMaintainer.name || maintainer.email === downloadedMaintainer.email).length > 0) ) .tap((isMaintainer) => { !isMaintainer && log.warn({ packageJson, downloaded }, `Publisher of package ${packageJson.name} does not own the repository`); }) .catch({ error: 'not_found' }, () => false); } // ---------------------------------------------------------------------------- /** * Generates an empty collected data. * * @param {name} name - The package name. * * @returns {Object} The empty collected data. */ function empty(name) { return { metadata: collectors.metadata.empty(name), }; } /** * Runs all the collectors. * * @param {String} data - The package data. * @param {Object} packageJson - The latest package.json data (normalized). * @param {Object} downloaded - The downloaded info (`dir`, `packageJson`). * @param {Nano} npmNano - The npm nano client instance. * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Promise} The promise that fulfills when done. */ function collect(data, packageJson, downloaded, npmNano, options) { options = Object.assign({ githubTokens: null, // The GitHub API tokens to use waitRateLimit: false, // True to wait if rate limit for all tokens were exceeded }, options); return checkRepositoryOwnership(data, packageJson, downloaded, npmNano) .then((isRepositoryOwner) => { const isSourceOwner = downloaded.downloader === 'npm' || isRepositoryOwner; return promisePropsSettled({ metadata: collectors.metadata(data, packageJson), npm: collectors.npm(data, packageJson, npmNano), github: isRepositoryOwner && collectors.github(packageJson, downloaded, { tokens: options.githubTokens, waitRateLimit: options.waitRateLimit, }), source: isSourceOwner && collectors.source(data, packageJson, downloaded, { npmRegistry: `${npmNano.config.url}/${npmNano.config.db}`, }), }) .then((collected) => pickBy(collected)); }); } module.exports = collect; module.exports.empty = empty; module.exports.collectors = collectors; ================================================ FILE: lib/analyze/collect/metadata.js ================================================ 'use strict'; const moment = require('moment'); const spdx = require('spdx'); const spdxCorrect = require('spdx-correct'); const deepCompact = require('deep-compact'); const isLinkWorking = require('is-link-working'); const get = require('lodash/get'); const find = require('lodash/find'); const pickBy = require('lodash/pickBy'); const mapValues = require('lodash/mapValues'); const size = require('lodash/size'); const hostedGitInfo = require('../util/hostedGitInfo'); const pointsToRanges = require('./util/pointsToRanges'); const promisePropsSettled = require('./util/promisePropsSettled'); const log = logger.child({ module: 'collect/metadata' }); /** * Extracts the releases frequency. * * @param {Object} data - The package data. * * @returns {Array} An array of ranges with the release count for each entry. */ function extractReleases(data) { // Aggregate the releases into ranges const time = data.time || {}; const points = Object.keys(time).map((version) => ({ date: moment.utc(time[version]), version })); const ranges = pointsToRanges(points, pointsToRanges.bucketsFromBreakpoints([30, 90, 180, 365, 730])); // Build the releases frequency array based on the releases ranges return ranges.map((range) => ({ from: range.from, to: range.to, count: range.points.length, })); } /** * Normalizes a single license value to a SPDX identifier. * * @param {String} name - The package name. * @param {String|Object} license - The license value, which can be a string or an object (deprecated). * * @returns {String} The normalized license, which is a SPDX identifier. */ function normalizeLicense(name, license) { // Handle { type: 'MIT', url: 'http://..' } if (license && license.type) { license = license.type; } // Ensure that the license is a non-empty string // Note that `spdx-correct` throws on strings with empty chars, so we must use trim() // e.g.: webjs-cli if (typeof license !== 'string' || !license.trim()) { log.warn({ license }, `Invalid license for package ${name} was found`); return null; } // Try to correct licenses that are not valid SPDX identifiers if (!spdx.valid(license)) { const correctedLicense = spdxCorrect(license); if (correctedLicense) { log.debug(`Package ${name} license was corrected from ${license} to ${correctedLicense}`); license = correctedLicense; } else { log.warn({ license }, `License for package ${name} is not a valid SPDX indentifier`); license = null; } } return license; } /** * Extracts the license from the package data. * Attempts to normalize any license to valid SPDX identifiers. * * @param {Object} packageJson - The latest package.json object (normalized). * * @returns {String} The license or null if unable to extract it. */ function extractLicense(packageJson) { const originalLicense = packageJson.license || packageJson.licenses; let license = originalLicense; // Short-circuit for packages without a license if (license == null) { log.trace(`No license for package ${packageJson.name} is set`); return null; } // Some old packages used objects or an array of objects to specify licenses // We do some effort to normalize them into SPDX license expressions if (Array.isArray(license)) { license = license .map((license) => normalizeLicense(packageJson.name, license)) .reduce((str, license) => str + (str ? ' OR ' : '') + license, ''); } else { license = normalizeLicense(packageJson.name, license); } return license; } /** * Extracts useful links of the package (homepage, repository, etc). * * @param {Object} packageJson - The latest package.json object (normalized). * * @returns {Object} The links. */ function extractLinks(packageJson) { const gitInfo = hostedGitInfo(packageJson.repository && packageJson.repository.url); const links = pickBy({ npm: `https://www.npmjs.com/package/${encodeURIComponent(packageJson.name)}`, homepage: packageJson.homepage, repository: gitInfo && gitInfo.browse(), bugs: (packageJson.bugs && packageJson.bugs.url) || (gitInfo && gitInfo.bugs()), }); // Filter only good links, removing broken ones // Avoid checking the npm link because we are sure it works.. const linksBeingChecked = []; const isLinkWorkingCache = { [links.npm]: true }; const areLinksWorking = mapValues(links, (link) => { const normalizedLink = link.split('#')[0]; // Remove trailing # (e.g.: #readme) if (!isLinkWorkingCache[normalizedLink]) { isLinkWorkingCache[normalizedLink] = isLinkWorking(normalizedLink); linksBeingChecked.push(normalizedLink); } return isLinkWorkingCache[normalizedLink]; }); log.debug({ linksBeingChecked }, 'Checking for broken links'); return Promise.props(areLinksWorking) .then((result) => { let finalLinks = mapValues(links, (link, name) => result[name] ? link : null); // If the homepage is broken, fallback to the repository docs if (!finalLinks.homepage && finalLinks.repository) { finalLinks.homepage = gitInfo.docs(); } finalLinks = pickBy(finalLinks); // Log the broken links const brokenLinks = pickBy(links, (link, name) => !result[name]); const brokenLinksCount = size(brokenLinks); brokenLinksCount && log.info({ links, brokenLinks, finalLinks }, `Detected ${brokenLinksCount} broken links on ${packageJson.name}`); return finalLinks; }); } /** * Extracts the author of the the package. * Tries to match against the maintainers to guess its `npm` username. * * @param {Object} packageJson - The latest package.json object (normalized). * @param {Array} maintainers - The package maintainers. * * @returns {Object} The author (name + [username] + [email] + [url]) or null if unable to extract it. */ function extractAuthor(packageJson, maintainers) { if (!packageJson.author) { return null; } const author = Object.assign({}, packageJson.author); const maintainer = maintainers && find(maintainers, (maintainer) => maintainer.email === packageJson.author.email); if (maintainer) { author.username = maintainer.name; } return author; } /** * Extracts the person who published the package. * For older packages, it might be unavailable so a best-effort to guess it is made. * * @param {Object} packageJson - The latest package.json object (normalized). * @param {Array} maintainers - The package maintainers. * * @returns {Object} The publisher (username + email) or null if unable to extract it. */ function extractPublisher(packageJson, maintainers) { let npmUser; // Assume the _npmUser if exists npmUser = packageJson._npmUser; // Fallback to find the author within the maintainers // If it doesn't exist, fallback to the first maintainer if (!npmUser && maintainers) { npmUser = packageJson.author && find(maintainers, (maintainer) => maintainer.email === packageJson.author.email); npmUser = npmUser || maintainers[0]; } return npmUser ? { username: npmUser.name, email: npmUser.email } : null; } /** * Extract the scope from the package name. * * @param {Object} packageJson - The latest package.json data (normalized). * * @returns {String} The scope, or "unscoped" if no scope is found. */ function extractScope(packageJson) { const match = packageJson.name.match(/^@([^/]+)\/.+$/); return match ? match[1] : 'unscoped'; } /** * Extracts the package maintainers. * * This solves various issues with data consistency: * - Some packages have the maintainers in the data, others in the package.json. * - The top-level maintainers were empty but the package.json ones were correct, e.g.: `graphql-shorthand-parser`. * - The maintainers was not an array but a string e.g.: `connect-composer-stats.`. * * @param {Object} data - The package data. * @param {Object} packageJson - The latest package.json data (normalized). * * @returns {Array} The maintainers or null if unable to extract them. */ function extractMaintainers(data, packageJson) { if (Array.isArray(data.maintainers) && data.maintainers.length) { return data.maintainers; } if (Array.isArray(packageJson.maintainers) && packageJson.maintainers.length) { return packageJson.maintainers; } log.warn({ packageJsonMaintainers: packageJson.maintainers, dataMaintainers: data.maintainers }, `Failed to extract maintainers of ${packageJson.name}`); return null; } // ---------------------------------------------------------------------------- /** * Generates an empty metadata objet. * * @param {name} name - The package name. * * @returns {Object} The empty collected data. */ function empty(name) { return { name, version: '0.0.0', links: { npm: `https://www.npmjs.com/package/${encodeURIComponent(name)}`, }, }; } /** * Runs the metadata analyzer. * * @param {Object} data - The package data. * @param {Object} packageJson - The latest package.json data (normalized). * * @returns {Promise} The promise that fulfills when done. */ function metadata(data, packageJson) { return promisePropsSettled({ links: extractLinks(packageJson), }) .then((props) => { const maintainers = extractMaintainers(data, packageJson); return deepCompact({ name: packageJson.name, scope: extractScope(packageJson), version: packageJson.version, description: packageJson.description, keywords: packageJson.keywords, date: data.time && (data.time[packageJson.version] || data.time.modified), author: extractAuthor(packageJson, maintainers), publisher: extractPublisher(packageJson, maintainers), maintainers: maintainers && maintainers.map((maintainer) => ({ username: maintainer.name, email: maintainer.email }) ), contributors: packageJson.contributors, repository: packageJson.repository, links: props.links, license: extractLicense(packageJson), dependencies: packageJson.dependencies, devDependencies: packageJson.devDependencies, peerDependencies: packageJson.peerDependencies, bundledDependencies: packageJson.bundledDependencies || packageJson.bundleDependencies, optionalDependencies: packageJson.optionalDependencies, releases: extractReleases(data), // There's some packages such as oh-flex that have an invalid deprecated field // that was manually written in the package.json... deprecated: typeof packageJson.deprecated === 'string' ? packageJson.deprecated : null, hasTestScript: get(packageJson, 'scripts.test', 'no test specified').indexOf('no test specified') === -1 ? true : null, hasSelectiveFiles: Array.isArray(packageJson.files) && packageJson.files.length > 0 ? true : null, // Need to use typeof because there's some old packages in which the README is an object, e.g.: `flatsite` readme: (typeof data.readme === 'string' && data.readme) ? data.readme : null, }); }) .tap(() => log.debug(`The metadata collector for ${packageJson.name} completed successfully`)); } module.exports = metadata; module.exports.empty = empty; ================================================ FILE: lib/analyze/collect/npm.js ================================================ 'use strict'; const got = require('got'); const moment = require('moment'); const size = require('lodash/size'); const pointsToRanges = require('./util/pointsToRanges'); const promisePropsSettled = require('./util/promisePropsSettled'); const gotRetry = require('../util/gotRetry'); const log = logger.child({ module: 'collect/npm' }); /** * Fetches the download count from https://api.npmsjs.org/downloads. * * @see https://github.com/npm/download-counts * * @param {String} name - The package name. * * @returns {Promise} The promise for the downloads object. */ function fetchDownloads(name) { const requestRange = { from: moment.utc() .subtract(1, 'd') .startOf('day') .subtract(365, 'd') .format('YYYY-MM-DD'), to: moment.utc() .subtract(1, 'd') .startOf('day') .format('YYYY-MM-DD'), }; const url = `https://api.npmjs.org/downloads/range/${requestRange.from}:${requestRange.to}/${encodeURIComponent(name)}`; return got(url, { json: true, timeout: 30000, retry: gotRetry, }) .then((res) => res.body.downloads) // Check if there is no stats yet .catch({ statusCode: 404 }, () => []) .then((downloads) => { // Aggregate the data into ranges const points = downloads.map((entry) => ({ date: moment.utc(entry.day), count: entry.downloads })); const ranges = pointsToRanges(points, pointsToRanges.bucketsFromBreakpoints([1, 7, 30, 90, 180, 365])); // Finally map to a prettier array based on the ranges, calculating the mean and count for each range return ranges.map((range) => { const downloadsCount = range.points.reduce((sum, point) => sum + point.count, 0); return { from: range.from, to: range.to, count: downloadsCount, }; }); }) .catch((err) => { log.error({ err, url }, `Failed to fetch ${name} downloads`); throw err; }); } /** * Fetches the dependents count. * * @param {String} name - The package name. * @param {Nano} npmNano - The client nano instance for npm. * * @returns {Promise} The promise for the dependents count. */ // function fetchDependentsCount(name, npmNano) { // return npmNano.viewAsync('app', 'dependedUpon', { // startkey: [name], // endkey: [name, '\ufff0'], // limit: 1, // reduce: true, // stale: 'update_after', // }) // .then((response) => !response.rows.length ? 0 : response.rows[0].value) // .catch((err) => { // /* istanbul ignore next */ // log.error({ err }, `Failed to fetch ${name} dependents count from CouchDB`); // /* istanbul ignore next */ // throw err; // }); // } /** * Extract the stars count. * * @param {Object} data - The package data. * * @returns {Number} The number of stars. */ function extractStarsCount(data) { // The users that starred are stored in the package data itself under the `users` property return size(data.users); } // ---------------------------------------------------------------------------- /** * Runs the npm analyzer. * * @param {Object} data - The package data. * @param {Object} packageJson - The latest package.json data (normalized). * * @returns {Promise} The promise that fulfills when done. */ function npm(data, packageJson) { return promisePropsSettled({ downloads: fetchDownloads(packageJson.name, { timeout: 30000 }), // TODO: The couchdb view was deprecated, find an alternative // dependentsCount: fetchDependentsCount(packageJson.name, npmNano), starsCount: extractStarsCount(data), }) .tap(() => log.debug(`The npm collector for ${packageJson.name} completed successfully`)); } module.exports = npm; ================================================ FILE: lib/analyze/collect/source.js ================================================ 'use strict'; const path = require('path'); const detectRepoLinters = require('detect-repo-linters'); const detectRepoTestFiles = require('detect-repo-test-files'); const detectReadmeBadges = require('detect-readme-badges'); const detectRepoChangelog = require('detect-repo-changelog'); const fetchCoverage = require('fetch-coverage'); const loadJsonFile = require('load-json-file'); const deepCompact = require('deep-compact'); const isRegularFile = require('is-regular-file'); const got = require('got'); const fileSize = require('./util/fileSize'); const promisePropsSettled = require('./util/promisePropsSettled'); const exec = require('../util/exec'); const gotRetry = require('../util/gotRetry'); const fileContents = require('./util/fileContents'); const uniqWith = require('lodash/uniqWith'); const isEqual = require('lodash/isEqual'); const { uniq } = require('lodash'); const davidBin = path.normalize(`${__dirname}/bin/david-json`); const log = logger.child({ module: 'collect/source' }); /** * Inspects important files, such as the tests and README file sizes. * * @param {Object} data - The package data. * @param {Object} downloaded - The downloaded info (`dir`, `packageDir`, ...). * * @returns {Promise} The promise for the inspection result. */ function inspectFiles(data, downloaded) { // Sum readme file sizes of the one in the package dir with the root const readmeSize = fileSize([ `${downloaded.packageDir}/${data.readmeFilename || 'README.md'}`, downloaded.dir !== downloaded.packageDir ? `${downloaded.DIR}/${data.readmeFilename || 'README.md'}` : '', ].filter((path) => path)); // Prefer tests located in the package dir and fallback to the root const testsSize = ( detectRepoTestFiles(downloaded.packageDir) .then((files) => !files.length && downloaded.dir !== downloaded.packageDir ? detectRepoTestFiles(downloaded.dir) : files) .then((files) => fileSize(files)) ); // .npmignore must be located inside the package dir // TODO: Improve npmignore detection because it can be in sub-directories too const hasNpmIgnore = isRegularFile(`${downloaded.packageDir}/.npmignore`).then((is) => is || null); // npm-shrinkwrap must be located inside the package dir const hasShrinkwrap = isRegularFile(`${downloaded.packageDir}/npm-shrinkwrap.json`).then((is) => is || null); // Usually changelogs are at the root directory, still we prefer the package dir one if it exists const hasChangelog = detectRepoChangelog(downloaded.packageDir) .then((file) => !file && downloaded.dir !== downloaded.packageDir ? detectRepoChangelog(downloaded.dir) : file) .then((file) => file ? true : null); return Promise.props({ readmeSize, testsSize, hasNpmIgnore, hasShrinkwrap, hasChangelog, }); } /** * Gets the readme badges. * @param {Object} data - The package data. * @param {Object} downloaded - The downloaded info (`dir`, `packageDir`, ...). * * @returns {Promise} The promise for the badges result. */ function getReadmeBadges(data, downloaded) { // Use badges from both the package dir and root README return Promise.props({ onPackageDir: typeof data.readme === 'string' && data.readme ? data.readme : fileContents(`${downloaded.packageDir}/${data.readmeFilename || 'README.md'}`), onRoot: downloaded.dir !== downloaded.packageDir ? fileContents(`${downloaded.dir}/${data.readmeFilename || 'README.md'}`) : '', }) .then((readmes) => Promise.props({ onRoot: detectReadmeBadges(readmes.onRoot || ''), onPackageDir: detectReadmeBadges(readmes.onPackageDir || ''), })) // Cleanup duplicates .then((badges) => uniqWith([...badges.onPackageDir, ...badges.onRoot], isEqual)); } /** * Gets the repository linters. * * @param {Object} downloaded - The downloaded info (`dir`, `packageDir`, ...). * * @returns {Promise} The promise for the linters result. */ function getRepoLinters(downloaded) { // Linters usually are at the root but we consider both just in case.. return Promise.props({ onPackageDir: detectRepoLinters(downloaded.packageDir), onRootDir: downloaded.dir !== downloaded.packageDir ? detectRepoLinters(downloaded.dir) // A JSON error might occur if `detect-repo-linters`fails to parse `package.json` as JSON // Since the `package.json` at the root was not validated, it can have errors // If that's the case, we want to skip them here .catch({ name: 'JSONError' }, () => { log.warn({ dir: downloaded.dir }, 'Error reading downloaded package.json when scanning for linters'); return []; }) : [], }) .then((linters) => uniq([...linters.onPackageDir, ...linters.onRootDir])); } /** * Fetches the code coverage. * * @param {Object} packageJson - The latest package.json data (normalized). * @param {Array} badges - The badges detected by the detect-readme-badges package to speed up the process. * * @returns {Promise} The promise for the code coverage, a number from 0 to 1. */ function fetchCodeCoverage(packageJson, badges) { const repository = packageJson.repository; if (!repository) { return Promise.resolve(); } return fetchCoverage(repository.url, { badges, got: { retry: gotRetry }, }) .catch((err) => { const name = packageJson.name; /* istanbul ignore next */ if (err.errors) { err.errors.forEach((err, index) => log.warn({ err }, `Error #${index} while fetching ${name} code coverage of`)); } /* istanbul ignore next */ log.error({ err }, `Failed to fetch ${name} code coverage`); /* istanbul ignore next */ throw err; }); } /** * Checks the package looking for known vulnerabilities. * Uses https://github.com/nodesecurity/nsp under the hood. * * @param {Object} packageJson - The latest package.json data (normalized). * * @returns {Promise} The promise for the vulnerabilities or false if package is totally broken. */ function checkVulnerabilities(packageJson) { const url = 'https://registry.npmjs.org/-/npm/v1/security/advisories/search'; return got(url, { json: true, retry: gotRetry, query: { module: packageJson.name, version: packageJson.version, }, }) .then((res) => res.body.objects) .map((vulnerability) => ({ id: vulnerability.id, title: vulnerability.title, overview: vulnerability.overview, recommendation: vulnerability.recommendation, createdAt: vulnerability.created, updatedAt: vulnerability.updated, severity: vulnerability.severity, module: vulnerability.module_name, vulnerableVersions: vulnerability.vulnerable_versions, patchedVersions: vulnerability.patched_versions, advisory: vulnerability.url, })) .catch({ statusCode: 404 }, () => { log.warn({ url }, `The npm security API returned 404 when fetching ${packageJson.name}@${packageJson.version} vulnerabilities`); return []; }) .catch((err) => { /* istanbul ignore next */ log.error({ err }, `Failed to scan ${packageJson.name}@${packageJson.version} vulnerabilities`); /* istanbul ignore next */ throw err; }); } /** * Checks the package dependencies looking for outdated versions. * Uses https://github.com/alanshaw/david under the hood, the package that powers https://david-dm.org/. * * @param {String} name - The package name. * @param {String} dir - The package directory. * @param {Object} options - The options inferred from source() options. * * @returns {Promise} The promise for the outdated dependencies, indexed by name or false if deps are totally broken. */ function checkOutdatedDeps(name, dir, options) { const jsonFile = `${dir}/.npms-david.json`; // Need to pipe stdout to a file due to a NodeJS bug where the output was being truncated // See: https://github.com/nodejs/node/issues/784 // We also run a binary wrapper around the david package because it had memory leaks, causing the memory of this // process to grow over time return exec(exec.escape`${davidBin} --registry ${options.npmRegistry} > ${jsonFile}`, { cwd: dir, timeout: 60 * 1000, }) .then(() => loadJsonFile(jsonFile)) // Ignore broken deps (e.g.: ccbuild@1.8.1) .catch((err) => /failed to get versions/i.test(err.stderr), (err) => { log.warn({ err }, `Some of ${name} dependencies are broken, skipping check outdated..`); return false; }) // Ignore broken package data (e.g.: gqformemail) .catch((err) => /versions.sort is not a function/i.test(err.stderr), (err) => { log.warn({ err }, `The package data of ${name} is broken, skipping check outdated..`); return false; }) // Ignore broken package name (e.g.: @~lisfan/vue-image-placeholder) .catch((err) => /\[ERR_ASSERTION\]/i.test(err.stderr), (err) => { log.warn({ err }, `The package data of ${name} is broken (probably the name), skipping check outdated..`); return false; }) // Many packages have a `.npmrc` with a custom registry that require authentication // Those packages are broken, in the sense that they can't be installed by the outside world (e.g.: webhint-hint-chisel) .catch((err) => /requires auth credentials/i.test(err.message), (err) => { err.unrecoverable = true; throw err; }) .catch((err) => { /* istanbul ignore next */ log.error({ err }, `Failed to check outdated dependencies of ${name}`); /* istanbul ignore next */ throw err; }); } // ---------------------------------------------------------------------------- // TODO: code complexity? https://www.npmjs.com/package/escomplex // TODO: technical debts, such as TODO's and FIXME's? /** * Runs the source analyzer. * * @param {String} data - The package data. * @param {Object} packageJson - The latest package.json data (normalized). * @param {Object} downloaded - The downloaded info (`dir`, `packageJson`, ...). * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Promise} The promise that fulfills when done. */ function source(data, packageJson, downloaded, options) { options = Object.assign({ npmRegistry: 'https://registry.npmjs.org', // The registry url to be used }, options); // Analyze source first because the external cli tools add files to the directory return Promise.try(() => ( promisePropsSettled({ files: inspectFiles(data, downloaded), badges: getReadmeBadges(data, downloaded), linters: getRepoLinters(downloaded), }) .tap((props) => // Only now we got badges.. fetchCodeCoverage(packageJson, props.badges) .then((coverage) => { props.coverage = coverage; }) ) )) // Finally use external cli tools .then((props) => ( promisePropsSettled({ outdatedDependencies: checkOutdatedDeps(packageJson.name, downloaded.packageDir, options), vulnerabilities: checkVulnerabilities(packageJson), }) .then((props_) => Object.assign(props, props_)) )) .then((result) => deepCompact(result)) .tap(() => log.debug(`The source collector for ${packageJson.name} completed successfully`)); } module.exports = source; ================================================ FILE: lib/analyze/collect/util/fileContents.js ================================================ 'use strict'; const readFile = Promise.promisify(require('fs').readFile); const log = logger.child({ module: 'util/file-contents' }); /** * Gets the file contents of a file. * * @param {String} path - The path. * * @returns {Promise} A promise that fulfills when done. */ function fileContents(path) { return readFile(path) .then((buffer) => buffer.toString()) // Return 0 if path does not exist .catch({ code: 'ENOENT' }, () => null) // Return 0 if path is directory .catch({ code: 'EISDIR' }, () => null) // Return 0 if too many symlinks are being followed, e.g.: `condensation` .catch({ code: 'ELOOP' }, (err) => { log.warn({ err }, `ELOOP while getting file size of ${path}, returning 0..`); return null; }) // Ignore errors of packages that have large nested paths.. e.g.: `cordova-plugin-forcetouch` .catch({ code: 'ENAMETOOLONG' }, (err) => { /* istanbul ignore next */ log.warn({ err }, `ENAMETOOLONG while getting file size of ${path}, returning 0..`); /* istanbul ignore next */ return null; }); } module.exports = fileContents; ================================================ FILE: lib/analyze/collect/util/fileSize.js ================================================ 'use strict'; const stat = Promise.promisify(require('fs').stat); const globby = require('globby'); const log = logger.child({ module: 'util/file-size' }); /** * Gets the size of a regular file(s). * * @param {String|Array} path - The path(s). * * @returns {Promise} A promise that fulfills when done. */ function fileSize(path) { const paths = Array.isArray(path) ? path : [path]; return Promise.map(paths, (path) => ( stat(path) .then((stat) => stat.isFile() ? stat.size : 0) // Return 0 if path does not exist .catch({ code: 'ENOENT' }, () => 0) // Return 0 if too many symlinks are being followed, e.g.: `condensation` .catch({ code: 'ELOOP' }, (err) => { log.warn({ err }, `ELOOP while getting file size of ${path}, returning 0..`); return 0; }) // Ignore errors of packages that have large nested paths.. e.g.: `cordova-plugin-forcetouch` .catch({ code: 'ENAMETOOLONG' }, (err) => { /* istanbul ignore next */ log.warn({ err }, `ENAMETOOLONG while getting file size of ${path}, returning 0..`); /* istanbul ignore next */ return 0; }) ), { concurrency: 50 }) .then((sizes) => sizes.reduce((sum, size) => sum + size, 0)); } /** * Gets the size of a directory. * * @param {String} dir - The directory path. * * @returns {Promise} A promise that fulfills when done. */ function fileSizeDir(dir) { return globby('**/*', { cwd: dir, // Only return files onlyFiles: true, // Include files starting with a dot dot: true, // Ignore symlinks to avoid loops followSymlinkedDirectories: false, // Return absolute paths absolute: true, }) .then((paths) => fileSize(paths)); } module.exports = fileSize; module.exports.dir = fileSizeDir; ================================================ FILE: lib/analyze/collect/util/pointsToRanges.js ================================================ 'use strict'; const moment = require('moment'); /** * Aggregates an array of points into buckets of date ranges. * * The array of points must have a `date` property with a moment's date. * * @param {Array} points - The array of points. * @param {Array} buckets - An array of buckets, see bucketsFromBreakpoints(). * * @returns {Array} An array of ranges, which are objects with `from`, `to` and `points` properties. */ function pointsToRanges(points, buckets) { return buckets.map((bucket) => { const filteredPoints = points.filter((point) => moment.utc(point.date).isBetween(bucket.start, bucket.end, null, '[)')); return { from: moment.utc(bucket.start).toISOString(), to: moment.utc(bucket.end).toISOString(), points: filteredPoints, }; }); } /** * Utility function that builds a buckets array from breakpoints expressed in days. * Useful to use in conjunction with `pointsToRanges()`. * * @param {Array} breakpoints - The breakpoints (order must be ASC). * * @returns {Array} An array of objects containaing `start` and `end` moment dates to be used in pointsToRanges. */ function bucketsFromBreakpoints(breakpoints) { const referenceDate = moment.utc().startOf('day'); return breakpoints .map((breakpoint) => ({ start: referenceDate.clone().subtract(breakpoint, 'd'), end: referenceDate, })); } module.exports = pointsToRanges; module.exports.bucketsFromBreakpoints = bucketsFromBreakpoints; ================================================ FILE: lib/analyze/collect/util/promisePropsSettled.js ================================================ 'use strict'; const mapValues = require('lodash/mapValues'); /** * Promise utility similar to bluebird's .props() but only fulfills when all promises are fulfilled, * even rejections. * * @param {Object} object - The object that contain the promises. * * @returns {Promise} A promise that only fulfills after all the promises have fulfilled. */ function promisePropsSettled(object) { object = mapValues(object, (promise) => Promise.resolve(promise).reflect()); return Promise.props(object) .then((results) => ( mapValues(results, (inspection) => { if (inspection.isRejected()) { throw inspection.reason(); } return inspection.value(); }) )); } module.exports = promisePropsSettled; ================================================ FILE: lib/analyze/download/git.js ================================================ 'use strict'; const urlLib = require('url'); const exec = require('../util/exec'); const hostedGitInfo = require('../util/hostedGitInfo'); const findPackageDir = require('./util/findPackageDir'); const mergePackageJson = require('./util/mergePackageJson'); const assertFilesCount = require('./util/assertFilesCount'); const log = logger.child({ module: 'download/git' }); /** * Downloads the package using git. * * @param {String} url - The repository clone URL. * @param {String} ref - The ref to download (null to download the default branch). * @param {String} tmpDir - The temporary dir path to download to. * @param {Object} options - The options inferred from github() options. * * @returns {Promise} The promise that resolves with the downloaded ref. */ function download(url, ref, tmpDir, options) { let downloadedRef = ref; log.debug(`Will now clone ${url}`); // Clone repository return exec(exec.escape`git clone -q ${url} .`, { cwd: tmpDir }) // Checkout the ref if any .then(() => ref && exec(exec.escape`git checkout -q ${ref}`, { cwd: tmpDir })) // Wait a maximum of X time .timeout(options.maxTime) // Clear out the ref if any error occurred .catch((err) => { downloadedRef = null; throw err; }) // Finally remove the .git folder if it exists .finally(() => exec(exec.escape`rm -rf ${tmpDir}/.git`)) // Repository does not exist, is invalid, or we have no permission? // https://foo:bar@github.com/something/thatwillneverexist.git -> authentication failed // https://foo:bar@github.com/some/privaterepo.git -> authentication failed // https://foo:bar@github.com/org/foo+foo.git -> not found // https://foo:bar@github.com/org/foo%foo.git -> unable to access (400) // https://foo:bar@bitbucket.org/something/thatwillneverexist.git -> not found // https://foo:bar@bitbucket.org/some/privaterepo.git -> authentication failed // https://foo:bar@bitbucket.org/org/foo+foo.git -> not found // https://foo:bar@bitbucket.org/org/foo%foo.git -> unable to access (400) // https://foo:bar@gitlab.com/something/thatwillneverexist.git -> authenticated failed // https://foo:bar@gitlab.com/some/privaterepo.git -> authentication failed // https://foo:bar@gitlab.com/org/foo+foo.git -> unable to access (500) // https://foo:bar@gitlab.com/org/foo%foo.git -> unable to access (400) // https://foo:bar@gitlab.com/upe-consulting/npm%2Flogger.git/info/refs -> not valid: is this a git repository? .catch((err) => /not found|authentication failed/i.test(err.stderr), (err) => { log.warn({ err }, `Repository ${url} does not exist or is private`); }) .catch((err) => /unable to access|is this a git repository/i.test(err.stderr), (err) => { log.warn({ err }, `Repository ${url} seems to be invalid`); }) // Check if ref no longer exists // did not match any file -> if branch or tag does not exist // reference is not a tree -> if sha does not exist .catch((err) => /did not match any file|reference is not a tree/i.test(err.stderr), (err) => { log.warn({ err }, `Failed to checkout ref ${ref} for ${url}, using default branch..`); }) // Finally return the ref .then(() => downloadedRef); } /** * Gets the clone URL from `gitInfo` (https). * * @param {Object} gitInfo - The git info object. * * @returns {String} The https clone URL. */ function getCloneUrl(gitInfo) { let url; // Use https:// protocol to avoid having to setup ssh keys in GitHub, Bitbucket and GitLab // Also, foo@bar is added as username & password to prevent git clone from prompting for credentials // Even if foo@bar does not exist or is invalid, public repositories are still cloned correctly url = gitInfo.https().substr(4); url = Object.assign(urlLib.parse(url), { auth: 'foo:bar' }); url = urlLib.format(url); return url; } // ------------------------------------------------------------------ /** * Checks if this package should be downloaded using git. * * If it does, the promise results with a function that will download the package. * If it does not, the promise will resolve to null. * * @param {Object} packageJson - The latest package.json data (normalized). * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Function} The download function or null. */ function git(packageJson, options) { const repository = packageJson.repository; if (!repository) { return null; } const gitInfo = hostedGitInfo(repository.url); if (!gitInfo) { return null; } options = Object.assign({ maxTime: 600000, // Max allowed download time (10m) maxFiles: 32000, // Max allowed files to download }, options); return (tmpDir) => { const url = getCloneUrl(gitInfo); const ref = packageJson.gitHead || null; return download(url, ref, tmpDir, options) .then((gitRef) => ({ downloader: 'git', dir: tmpDir, gitRef, })) // Assert that the number of downloaded files is not too big to be processed .tap(() => assertFilesCount(tmpDir, options.maxFiles)) // Find package dir within the repository // The package is usually in the root for regular repositories, but not for mono-repositories .tap((downloaded) => ( findPackageDir(packageJson, tmpDir) .then((packageDir) => { downloaded.packageDir = packageDir; }) )) // Merge the downloaded repository package.json with the one from the registry // See mergePackageJson() to know why we do this .tap((downloaded) => ( mergePackageJson(packageJson, downloaded.packageDir) .then((downloadedPackageJson) => { downloaded.packageJson = downloadedPackageJson; }) )) // Remove package-lock.json file if any. // People often forgot to update the package-lock, which is not published, and messes up // with collectors, such as `nodesecurity`. .tap((downloaded) => exec(exec.escape`rm -rf ${downloaded.packageDir}/package-lock.json`)); }; } module.exports = git; ================================================ FILE: lib/analyze/download/github.js ================================================ 'use strict'; const fs = require('fs'); const tokenDealer = require('token-dealer'); const got = require('got'); const untar = require('./util/untar'); const hostedGitInfo = require('../util/hostedGitInfo'); const findPackageDir = require('./util/findPackageDir'); const gotRetry = require('../util/gotRetry'); const exec = require('../util/exec'); const mergePackageJson = require('./util/mergePackageJson'); const log = logger.child({ module: 'download/github' }); const unavailableStatusCodes = [404, 400, 403, 451]; // 404 - not found; 400 - invalid repo name; 403/451 - dmca takedown /** * Downloads the package from GitHub. * * @param {String} shorthand - The /. * @param {String} ref - The ref to download (null to download the default branch). * @param {String} tmpDir - The temporary dir path to download to. * @param {Object} options - The options inferred from github() options. * * @returns {Promise} The promise that resolves with the downloaded ref. */ function download(shorthand, ref, tmpDir, options) { const url = `https://api.github.com/repos/${shorthand}/tarball/${ref || ''}`; const tarballFile = `${tmpDir}/tarball.tar.gz`; let downloadedRef = ref; log.trace(`Will download tarball of ${shorthand}@${ref || 'default'}..`); // Download tarball // Use token dealer to circumvent rate limit issues return tokenDealer(options.tokens, (token, exhaust) => ( new Promise((resolve, reject) => { let request; const handleRateLimit = (response, err) => { if (response.headers['x-ratelimit-remaining'] === '0') { const isRateLimitError = err && err.statusCode === 403; exhaust(Number(response.headers['x-ratelimit-reset']) * 1000, isRateLimitError); } }; got.stream(url, { timeout: 30000, headers: Object.assign({ accept: 'application/vnd.github.v3+json' }, token ? { authorization: `token ${token}` } : null), retry: gotRetry, }) .on('request', (request_) => { request = request_; }) .on('response', (response) => { // Handle rate limit stuff handleRateLimit(response); // Check if the file is too big.. const contentLength = Number(response.headers['content-length']); if (contentLength > options.maxSize) { request.abort(); reject(Object.assign(new Error(`${shorthand} tarball is too large (~${Math.round(contentLength / 1024 / 1024)}MB)`), { unrecoverable: true, })); } }) .on('error', (err, details, response) => { // Handle rate limit stuff try { response && handleRateLimit(response, err); } catch (exhaustedErr) { err = exhaustedErr || err; } reject(err); }) .pipe(fs.createWriteStream(tarballFile)) .on('error', reject) .on('finish', resolve); }) ), { group: 'github', wait: options.waitRateLimit, onExhausted: (token, reset) => log.error(`Token ${token ? token.substr(0, 10) : ''}.. exhausted`, { reset }), }) // Extract tarball .then(() => { log.debug({ tarballFile }, `Successfully downloaded ${shorthand} tarball, will now extract ..`); return untar(tarballFile, { maxFiles: options.maxFiles }); }) // Clear out the ref if any error occurred; also delete downloaded archive if any .catch((err) => { downloadedRef = null; return exec(exec.escape`rm -rf ${tarballFile}`) .finally(() => { throw err; }); }) // If we got a 404 either the repository or the specified ref does not exist (devs usually forget to push or do push -f) // If a specific ref was requested, attempt to download the default branch .catch((err) => err.statusCode === 404 && ref, () => { log.warn(`Download of ${shorthand}@${ref} tarball failed with 404, trying default branch..`); return download(shorthand, null, tmpDir, options); }) // Check if the repository is unavailable .catch((err) => unavailableStatusCodes.indexOf(err.statusCode) !== -1, (err) => { log.warn({ err }, `Download of ${shorthand} tarball failed with ${err.statusCode}`); }) // Check if the ref is malformed to mark this error as unrecoverable // e.g.: generator-hold .catch((err) => /request path contains unescaped characters/i.test(err.message), (err) => { err.unrecoverable = true; throw err; }) .catch((err) => { log.error({ err }, `Download of ${shorthand} tarball failed`); throw err; }) // Finally return the ref .then(() => downloadedRef); } // ------------------------------------------------------------------ /** * Checks if this package should be downloaded from GitHub. * * If it does, the promise results with a function that will download the package. * If it does not, the promise will resolve to null. * * @param {Object} packageJson - The latest package.json data (normalized). * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Function} The download function or null. */ function github(packageJson, options) { const repository = packageJson.repository; if (!repository) { return null; } const gitInfo = hostedGitInfo(repository.url); if (!gitInfo || gitInfo.type !== 'github') { return null; } options = Object.assign({ tokens: null, // The GitHub API tokens to use waitRateLimit: false, // True to wait if rate limit for all tokens were exceeded maxSize: 262144000, // Max allowed download size (250MB) maxFiles: 32000, // Max allowed files to download (extract) }, options); return (tmpDir) => { const shorthand = `${gitInfo.user}/${gitInfo.project}`; const ref = packageJson.gitHead || null; return download(shorthand, ref, tmpDir, options) .then((gitRef) => ({ downloader: 'github', dir: tmpDir, gitRef, })) // Find package dir within the repository // The package is usually in the root for regular repositories, but not for mono-repositories .tap((downloaded) => ( findPackageDir(packageJson, tmpDir) .then((packageDir) => { downloaded.packageDir = packageDir; }) )) // Merge the downloaded repository package.json with the one from the registry // See mergePackageJson() to know why we do this .tap((downloaded) => ( mergePackageJson(packageJson, downloaded.packageDir) .then((downloadedPackageJson) => { downloaded.packageJson = downloadedPackageJson; }) )) // Remove package-lock.json file if any. // People often forgot to update the package-lock, which is not published, and messes up // with collectors, such as `nodesecurity`. .tap((downloaded) => exec(exec.escape`rm -rf ${downloaded.packageDir}/package-lock.json`)); }; } module.exports = github; ================================================ FILE: lib/analyze/download/index.js ================================================ 'use strict'; const os = require('os'); const stat = Promise.promisify(require('fs').stat); const downloaders = require('require-directory')(module, './', { recurse: false }); const kebabCase = require('lodash/kebabCase'); const exec = require('../util/exec'); const downloadersOrder = [ (packageJson, options) => downloaders.github(packageJson, { tokens: options.githubTokens, waitRateLimit: options.waitRateLimit }), (packageJson) => downloaders.git(packageJson), (packageJson) => downloaders.npm(packageJson), ]; /** * Generates a random string. * This is a very fast but naive algorithm. * * @returns {String} The random string. */ function getRandomStr() { return Math.random() .toString(36) .slice(2); } /** * Creates a temporary folder for a package to be downloaded to. * * @param {String} name - The package name. * * @returns {Promise} The promise that resolves with the temporary folder path. */ function createTmpDir(name) { // Suffix the folder with a random string to make it more unique // Additionally, transform any special chars such as `/` to avoid having recursive directories const dir = `${os.tmpdir()}/npms-analyzer/${kebabCase(name)}-${getRandomStr()}`; return exec(exec.escape`rm -rf ${dir}`) .then(() => exec(exec.escape`mkdir -p ${dir}`)) .then(() => dir); } /** * Cleans old packages from the temporary folder. * * @returns {Promise} The promise that resolves when odne. */ function cleanTmpDir() { const dir = `${os.tmpdir()}/npms-analyzer`; return stat(dir) .catch({ code: 'ENOENT' }, () => false) .return(true) .then((exists) => exists && exec(exec.escape`find ${dir} -mindepth 1 -maxdepth 1 -type d -mtime +1 -print0 | xargs -0 rm -rf`)); } // ------------------------------------------------------------- /** * Downloads a package into a temporary folder. * * @param {Object} packageJson - The latest package.json data (normalized). * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Promise} A promise that resolves with the downloaded info (`dir`, `packageJson`, ...). */ function download(packageJson, options) { let downloadFn; options = Object.assign({ githubTokens: null, // The GitHub API tokens to use waitRateLimit: false, // True to wait if rate limit for all tokens were exceeded }, options); downloadersOrder.some((downloader) => { downloadFn = downloader(packageJson, options); return !!downloadFn; }); /* istanbul ignore if */ if (!downloadFn) { return Promise.reject(Object.assign(new Error(`Could not find suitable downloader for ${packageJson.name}`), { unrecoverable: false })); } // Create temporary directory return createTmpDir(packageJson.name) // Download the package into the temporary directory .then((tmpDir) => ( downloadFn(tmpDir) // Cleanup the directory if download failed .catch((err) => ( exec(exec.escape`rm -rf ${tmpDir}`) .finally(() => { throw err; }) )) )); } module.exports = download; module.exports.downloaders = downloaders; module.exports.cleanTmpDir = cleanTmpDir; ================================================ FILE: lib/analyze/download/npm.js ================================================ 'use strict'; const fs = require('fs'); const got = require('got'); const untar = require('./util/untar'); const gotRetry = require('../util/gotRetry'); const exec = require('../util/exec'); const mergePackageJson = require('./util/mergePackageJson'); const log = logger.child({ module: 'download/npm' }); /** * Downloads the package from the npm registry. * * @param {String} target - The @ to download. * @param {String} url - The tarball URL. * @param {String} tmpDir - The temporary dir path to download to. * @param {Object} options - The options inferred from npm() options. * * @returns {Promise} The promise that fulfills when done. */ function download(target, url, tmpDir, options) { const tarballFile = `${tmpDir}/tarball.tar.gz`; log.debug({ url }, `Will download tarball of ${target}..`); // Download tarball return new Promise((resolve, reject) => { let request; got.stream(url, { timeout: 30000, retry: gotRetry }) .on('error', reject) .on('request', (request_) => { request = request_; }) .on('response', (response) => { // Check if the file is too big.. const contentLength = Number(response.headers['content-length']); if (contentLength > options.maxSize) { request.abort(); reject(Object.assign(new Error(`Tarball is too large (~${Math.round(contentLength / 1024 / 1024)}MB)`), { unrecoverable: true, })); } }) .pipe(fs.createWriteStream(tarballFile)) .on('error', reject) .on('finish', resolve); }) // Extract tarball .then(() => { log.debug({ tarballFile }, `Successfully downloaded ${target} tarball, will now extract ..`); return untar(tarballFile, { maxFiles: options.maxFiles }); }) // Check if the repository does not exist .catch({ statusCode: 404 }, (err) => { log.warn({ err }, `Download of ${target} tarball failed with ${err.statusCode}`); return exec(exec.escape`rm -rf ${tarballFile}`); }) .catch((err) => { log.error({ err }, `Download of ${target} tarball failed`); throw err; }); } // ------------------------------------------------------------------ /** * Checks if this package should be downloaded from the npm registry. * * If it does, the promise results with a function that will download the package. * If it does not, the promise will resolve to null. * * @param {Object} packageJson - The latest package.json data (normalized). * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Function} The download function or null. */ function npm(packageJson, options) { options = Object.assign({ maxSize: 262144000, // Max allowed download size (250MB) maxFiles: 32000, // Max allowed files to download (extract) }, options); return (tmpDir) => { const url = packageJson.dist && packageJson.dist.tarball; const target = `${packageJson.name}@${packageJson.version}`; return Promise.try(() => { // Protect against packages that don't have tarballs, e.g.: `roost-mongo@0.1.0` if (url) { return download(target, url, tmpDir, options); } log.warn(`No tarball url for ${target}`); }) .then(() => ({ downloader: 'npm', dir: tmpDir, packageDir: tmpDir, })) // Merge the downloaded repository package.json with the one from the registry // See mergePackageJson() to know why we do this .tap((downloaded) => ( mergePackageJson(packageJson, downloaded.packageDir) .then((downloadedPackageJson) => { downloaded.packageJson = downloadedPackageJson; }) )); }; } module.exports = npm; ================================================ FILE: lib/analyze/download/util/assertFilesCount.js ================================================ 'use strict'; const exec = require('../../util/exec'); /** * Asserts that the number of files in a directory is within a certain threshold. * * This should be used by downloaders if they can't pre-calculate the number of files * without actually starting populating a directory with files. * * @param {String} dir - The dir. * @param {Number} maxFiles - The total number of files. * * @returns {Promise} A promise that fulfills when done. */ function assertFilesCount(dir, maxFiles) { return exec(exec.escape`find ${dir} | wc -l`) .spread((stdout) => parseInt(stdout, 10)) .tap((filesCount) => { if (isNaN(filesCount)) { throw Object.assign(new Error('Unable to retrieve the number of files within the directory'), { unrecoverable: true, dir }); } if (filesCount > maxFiles) { throw Object.assign(new Error('Directory has too many files'), { unrecoverable: true, dir }); } }); } module.exports = assertFilesCount; ================================================ FILE: lib/analyze/download/util/findPackageDir.js ================================================ 'use strict'; const path = require('path'); const loadJsonFile = require('load-json-file'); const globby = require('globby'); const log = logger.child({ module: 'util/find-package-dir' }); /** * Searches for the real package dir after testing against the root one fails. * * @param {Object} packageJson - The package.json from the registry. * @param {String} dir - The folder in which the package was downloaded. * * @returns {Promise} A promise that resolves with the package dir or null. */ function lookForPackageDir(packageJson, dir) { // Gather all package json files return globby('**/package.json', { cwd: dir, // Only return files onlyFiles: true, // Ignore symlinks to avoid loops followSymlinkedDirectories: false, }) // Transform them into directories, removing the root one .then((files) => ( files // Filter root one .filter((file) => file !== 'package.json') // Build dir arrays from matched files .map((file) => path.join(dir, path.dirname(file))) )) // Find the one that matches the package .reduce((packageDir, possiblePackageDir) => { if (packageDir) { return packageDir; } return isSamePackage(packageJson, possiblePackageDir) .then((isSame) => isSame ? possiblePackageDir : null); }, null); } /** * Tests if a directory matches the package we are looking for. * * @param {Object} packageJson - The package.json from the registry. * @param {String} dir - The folder we are testing against. * * @returns {Promise} A promise that resolves with true if it matched, false otherwise. */ function isSamePackage(packageJson, dir) { const file = `${dir}/package.json`; return loadJsonFile(file) // Ignore if the file doesn't exist .catch({ code: 'ENOENT' }, () => ({})) // Ignore any errors but log them .catch((err) => { log.debug({ err, file }, 'Error reading package.json'); return {}; }) .then((downloadedPackageJson) => packageJson.name === downloadedPackageJson.name); } // ----------------------------------------------------- /** * Finds the real package directory. * * If the package.json file at the root matches, the `packageDir` will be the same as `dir`. * If not, this function will do a deep search for a package.json that matches. * * For standard repositories, `packageDir` will be equal to the `dir`. * For mono repositories, `packageDir` will be a sub-directory of `dir` pointing to where the package actually is. * If we couldn't find the `packageDir`, `dir` will be returned. * * @param {Object} packageJson - The package.json from the registry. * @param {String} dir - The folder in which the package was downloaded. * * @returns {Promise} A promise that resolves with the package directory. */ function findPackageDir(packageJson, dir) { // Short-circuit to check against the root return isSamePackage(packageJson, dir) // Find using glob .then((isSame) => isSame ? dir : lookForPackageDir(packageJson, dir)) // Fallback to using the root dir .then((packageDir) => packageDir || dir); } module.exports = findPackageDir; ================================================ FILE: lib/analyze/download/util/mergePackageJson.js ================================================ 'use strict'; const writeFile = Promise.promisify(require('fs').writeFile); const loadJsonFile = require('load-json-file'); const assignWith = require('lodash/assignWith'); const notEmpty = require('deep-compact').notEmpty; const normalizePackageJson = require('../../util/normalizePackageJson'); const log = logger.child({ module: 'util/merge-package-json' }); /** * Merges the package json with the downloaded one. * * The published package.json has higher priority than the one downloaded from the source code since it's more exact. * Though, some packages have pre-publish scripts that mutate the package.json hiding important stuff: One good example is * `bower`, which bundles dependencies in the package itself to speed up installation. * * The passed in `packageJson` will be mutated and it will be written out to the downloaded folder, overwriting the downloaded one. * The promise will be resolved with the original downloaded package json. * * @param {Object} packageJson - The package.json from the registry. * @param {String} packageDir - The temporary folder in which the package was downloaded. * * @returns {Promise} A promise that resolves with the downloaded package json. */ function mergePackageJson(packageJson, packageDir) { const file = `${packageDir}/package.json`; // Read json file & normalize it return loadJsonFile(file) .then((downloadedPackageJson) => normalizePackageJson(downloadedPackageJson)) // Ignore if the file doesn't exist .catch({ code: 'ENOENT' }, () => ({})) // Ignore any errors but log them .catch((err) => { log.warn({ err, file }, 'Error reading downloaded package.json'); return {}; }) // Merge .tap((downloadedPackageJson) => { assignWith(packageJson, downloadedPackageJson, (objValue, srcValue, key, obj) => notEmpty(objValue, key, obj) ? objValue : srcValue); }) // Write to disk .tap(() => writeFile(file, JSON.stringify(packageJson, null, 2))); } module.exports = mergePackageJson; ================================================ FILE: lib/analyze/download/util/untar.js ================================================ 'use strict'; const path = require('path'); const which = require('which'); const unlink = Promise.promisify(require('fs').unlink); const exec = require('../../util/exec'); // Prefer bsdtar over the installed tar.. bsdtar is more benevolent when dealing with certain errors // See: http://comments.gmane.org/gmane.comp.gnu.mingw.msys/4816 /* eslint-disable max-statements-per-line, max-len */ const tarExec = (() => { try { return which.sync('bsdtar'); } catch (err) { return 'tar'; } })(); const malformedRegExp = /unrecognized archive format|does not look like a tar archive|not in gzip format|unknown compression format|remove already-existing dir/i; /* eslint-enable max-statements-per-line, max-len */ /** * Asserts that the number of files in the tar archive is below a certain threshold. * * @param {String} file - The file path. * @param {Number} maxFiles - The total number of files. * * @returns {Promise} A promise that fulfills when done. */ function assertFilesCount(file, maxFiles) { // Ignore "unknown extended header XX" because there might be a lot of them, e.g.: pickles2-contents-editor // This only happens when using gnu tar, see: http://lee.greens.io/blog/2014/05/06/fix-tar-errors-on-os-x/ // e.g.: http://registry.npmjs.org/pickles2-contents-editor/-/pickles2-contents-editor-2.0.0-alpha.1.tgz return exec(exec.escape` listFiles() { ${tarExec} -ztf ${file} } filter() { (grep -v "unknown extended header"; exit 0) } set -o pipefail { listFiles 2>&1 1>&3 | filter 1>&2; } 3>&1 | wc -l `, { shell: '/bin/bash' }) .spread((stdout) => parseInt(stdout, 10)) .tap((filesCount) => { if (isNaN(filesCount)) { throw Object.assign(new Error('Unable to retrieve the number of files within the tarball'), { unrecoverable: true, tarballFile: file }); } if (filesCount > maxFiles) { throw Object.assign(new Error('Tarball has too many files'), { unrecoverable: true, tarballFile: file }); } }); } /** * Decompresses a tar file to a directory. * * @param {String} file - The file path. * @param {String} destDir - The destination directory. * * @returns {Promise} A promise that fulfills when done. */ function decompress(file, destDir) { // Ignore "unknown extended header XX" because there might be a lot of them, e.g.: pickles2-contents-editor // This only happens when using gnu tar, see: http://lee.greens.io/blog/2014/05/06/fix-tar-errors-on-os-x/ // e.g.: http://registry.npmjs.org/pickles2-contents-editor/-/pickles2-contents-editor-2.0.0-alpha.1.tgz return exec(exec.escape` decompress() { ${tarExec} -xf ${file} -C ${destDir} --strip-components=1 } filter() { (grep -v "unknown extended header"; exit 0) } set -o pipefail { decompress 2>&1 1>&3 | filter 1>&2; } 3>&1 `, { shell: '/bin/bash' }) .then(() => exec(exec.escape`chmod -R 0777 ${destDir}`)); } // -------------------------------------------------- /** * Small utility to untar a file. * Malformed tar errors are ignored. * * @param {String} file - The file path. * @param {Object} [options] - He options; read below to get to know each available option. * * @returns {Promise} A promise that fulfills when done. */ function untar(file, options) { options = Object.assign({ maxFiles: 32000 }, options); const destDir = path.dirname(file); // Check the number of files return assertFilesCount(file, options.maxFiles) // Proceed with decompressing .then(() => decompress(file, destDir)) // Delete tar file .then(() => unlink(file)) // Ignore invalid tar files.. sometimes services respond with JSON // e.g.: http://registry.npmjs.org/n-pubsub/-/n-pubsub-1.0.0.tgz // e.g.: testing233 package, that somehow was able to set dist to http://example.com // e.g.: cb-never-called .catch((err) => malformedRegExp.test(err.stderr), (err) => { throw Object.assign(new Error('Tarball is malformed'), { tarballFile: file, stderr: err.stderr }); }) .return(destDir); } module.exports = untar; ================================================ FILE: lib/analyze/evaluate/index.js ================================================ 'use strict'; const evaluators = require('require-directory')(module, './', { recurse: false }); /** * Runs all the evaluators. * * @param {Object} collected - The collected information. * * @returns {Object} The evaluation result. */ function evaluate(collected) { return { quality: evaluators.quality(collected), popularity: evaluators.popularity(collected), maintenance: evaluators.maintenance(collected), }; } module.exports = evaluate; ================================================ FILE: lib/analyze/evaluate/maintenance.js ================================================ 'use strict'; const moment = require('moment'); const find = require('lodash/find'); const get = require('lodash/get'); const mapValues = require('lodash/mapValues'); const semver = require('semver'); const normalizeValue = require('normalize-value'); const log = logger.child({ module: 'evaluate/maintenance' }); /** * Evaluates the releases frequency. * * @param {Object} collected - The collected information. * * @returns {Number} The releases frequency evaluation (from 0 to 1). */ function evaluateReleasesFrequency(collected) { const releases = collected.metadata.releases; if (!releases) { return 0; } const range30 = find(releases, (range) => moment.utc(range.to).diff(range.from, 'd') === 30); const range180 = find(releases, (range) => moment.utc(range.to).diff(range.from, 'd') === 180); const range365 = find(releases, (range) => moment.utc(range.to).diff(range.from, 'd') === 365); const range730 = find(releases, (range) => moment.utc(range.to).diff(range.from, 'd') === 730); if (!range30 || !range180 || !range365 || !range730) { throw new Error('Could not find entry in releases'); } const mean30 = range30.count / (30 / 90); const mean180 = range180.count / (180 / 90); const mean365 = range365.count / (365 / 90); const mean730 = range730.count / (730 / 90); const quarterMean = (mean30 * 0.25) + (mean180 * 0.45) + (mean365 * 0.2) + (mean730 * 0.1); return normalizeValue(quarterMean, [ { value: 0, norm: 0 }, { value: 0.5, norm: 0.5 }, { value: 1, norm: 0.75 }, { value: 2, norm: 1 }, ]); } /** * Evaluates the commits frequency. * * @param {Object} collected - The collected information. * * @returns {Number} The commits frequency evaluation (from 0 to 1). */ function evaluateCommitsFrequency(collected) { const commits = collected.github && collected.github.commits; if (!commits) { return 0; } const range30 = find(commits, (range) => moment.utc(range.to).diff(range.from, 'd') === 30); const range180 = find(commits, (range) => moment.utc(range.to).diff(range.from, 'd') === 180); const range365 = find(commits, (range) => moment.utc(range.to).diff(range.from, 'd') === 365); if (!range30 || !range180 || !range365) { throw new Error('Could not find entry in commits'); } const mean30 = range30.count / (30 / 30); const mean180 = range180.count / (180 / 30); const mean365 = range365.count / (365 / 30); const monthlyMean = (mean30 * 0.35) + (mean180 * 0.45) + (mean365 * 0.2); return normalizeValue(monthlyMean, [ { value: 0, norm: 0 }, { value: 1, norm: 0.7 }, { value: 5, norm: 0.9 }, { value: 10, norm: 1 }, ]); } /** * Evaluates the open issues health. * * @param {Object} collected - The collected information. * * @returns {Number} The open issues health evaluation (from 0 to 1). */ function evaluateOpenIssues(collected) { const issues = collected.github && collected.github.issues; // If unable to get issues, evaluation is 0 if (!issues) { return 0; } // If issues are disabled, return 0.5.. // We can't really evaluate something we don't know; if this value causes troubles find a better strategy if (issues.isDisabled) { return collected.github.forkOf ? 0.7 : 0.5; // Forks have issues disabled by default, don't be so harsh } // If the repository has 0 issues, evaluation is 0.7 if (!issues.count) { return 0.7; } const openIssuesRatio = issues.openCount / issues.count; return normalizeValue(openIssuesRatio, [ { value: 0.2, norm: 1 }, { value: 0.5, norm: 0.5 }, { value: 1, norm: 0 }, ]); } /** * Evaluates the issues distribution evaluation. * * @param {Object} collected - The collected information. * * @returns {Number} The issues distribution evaluation (from 0 to 1). */ function evaluateIssuesDistribution(collected) { const issues = collected.github && collected.github.issues; // If unable to get issues, evaluation is 0 if (!issues) { return 0; } // If issues are disabled, return 0.5.. // We can't really evaluate something we don't know; if this value causes troubles find a better strategy if (issues.isDisabled) { return collected.github.forkOf ? 0.7 : 0.5; // Forks have issues disabled by default, don't be so harsh } const ranges = Object.keys(issues.distribution).map(Number); const totalCount = ranges.reduce((sum, range) => sum + issues.distribution[range], 0); // If the repository has 0 issues, evaluation is 0.7 if (!totalCount) { return 0.7; } const weights = ranges.map((range) => { const weight = issues.distribution[range] / totalCount; const conditioning = normalizeValue(range / 24 / 60 / 60, [ { value: 29, norm: 1 }, { value: 365, norm: 5 }, // An issue open for more than 1 year, weights 5x more than a normal one ]); return weight * conditioning; }); const mean = ranges.reduce((sum, range, index) => sum + (range * weights[index])) / (ranges.length || 1); const issuesOpenMeanDays = mean / 60 / 60 / 24; return normalizeValue(issuesOpenMeanDays, [ { value: 5, norm: 1 }, { value: 30, norm: 0.7 }, { value: 90, norm: 0 }, ]); } /** * Checks if a package is finished, that is, it's stable enough that doesn't require a lot of maintenance. * * @param {Object} collected - The collected information. * * @returns {Boolean} True if finished, false otherwise. */ function isPackageFinished(collected) { const isStable = semver.gte(collected.metadata.version, '1.0.0', true); // `true` = loose semver const isNotDeprecated = !collected.metadata.deprecated; const hasFewIssues = get(collected, 'github.issues.openCount', Infinity) < 15; const hasREADME = !!collected.metadata.readme || get(collected, 'source.files.readmeSize', 0) > 0; const hasTests = !!collected.metadata.hasTestScript; const isFinished = isStable && isNotDeprecated && hasFewIssues && hasREADME && hasTests; log.debug({ isStable, isNotDeprecated, hasFewIssues, hasREADME, hasTests }, `Package is considered ${isFinished ? 'finished' : 'unfinished'}`); return isFinished; } // ---------------------------------------------------------------------------- /** * Evaluates the package maintenance. * * @param {Object} collected - The collected information. * * @returns {Object} The evaluation result. */ function maintenance(collected) { let evaluation = { releasesFrequency: evaluateReleasesFrequency(collected), commitsFrequency: evaluateCommitsFrequency(collected), openIssues: evaluateOpenIssues(collected), issuesDistribution: evaluateIssuesDistribution(collected), }; // If the package is finished, it doesn't require a lot of maintenance if (isPackageFinished(collected)) { evaluation = mapValues(evaluation, (evaluation) => Math.max(evaluation, 0.9)); } return evaluation; } module.exports = maintenance; ================================================ FILE: lib/analyze/evaluate/popularity.js ================================================ 'use strict'; const moment = require('moment'); const find = require('lodash/find'); /** * Evaluates the downloads count. * * @param {Object} collected - The collected information. * * @returns {Number} The monthly downloads mean (from 0 to Infinity). */ function evaluateDownloadsCount(collected) { const downloads = collected.npm && collected.npm.downloads; if (!downloads) { return 0; } const index = downloads.findIndex((range) => moment.utc(range.to).diff(range.from, 'd') === 90); if (index === -1) { throw new Error('Could not find entry in downloads'); } const count90 = downloads[index].count; const count30 = count90 / 3; return count30; } /** * Evaluates the downloads acceleration. * * @param {Object} collected - The collected information. * * @returns {Number} The downloads acceleration (from -Infinity to Infinity). */ function evaluateDownloadsAcceleration(collected) { const downloads = collected.npm && collected.npm.downloads; if (!downloads) { return 0; } const range30 = find(downloads, (range) => moment.utc(range.to).diff(range.from, 'd') === 30); const range90 = find(downloads, (range) => moment.utc(range.to).diff(range.from, 'd') === 90); const range180 = find(downloads, (range) => moment.utc(range.to).diff(range.from, 'd') === 180); const range365 = find(downloads, (range) => moment.utc(range.to).diff(range.from, 'd') === 365); if (!range30 || !range90 || !range180 || !range365) { throw new Error('Could not find entry in downloads'); } const mean30 = range30.count / 30; const mean90 = range90.count / 90; const mean180 = range180.count / 180; const mean365 = range365.count / 365; return ((mean30 - mean90) * 0.25) + ((mean90 - mean180) * 0.25) + ((mean180 - mean365) * 0.5); } /** * Evaluates the community interest on the package, using its stars, forks, subscribers and contributors count. * * @param {Object} collected - The collected information. * * @returns {Number} The community interest (from 0 to Infinity). */ function evaluateCommunityInterest(collected) { const starsCount = (collected.github ? collected.github.starsCount : 0) + (collected.npm ? collected.npm.starsCount : 0); const forksCount = collected.github ? collected.github.forksCount : 0; const subscribersCount = collected.github ? collected.github.subscribersCount : 0; const contributorsCount = collected.github ? (collected.github.contributors || []).length : 0; return starsCount + forksCount + subscribersCount + contributorsCount; } // ---------------------------------------------------------------------------- /** * Evaluates the package popularity. * * @param {Object} collected - The collected information. * * @returns {Object} The evaluation result. */ function popularity(collected) { return { communityInterest: evaluateCommunityInterest(collected), downloadsCount: evaluateDownloadsCount(collected), downloadsAcceleration: evaluateDownloadsAcceleration(collected), dependentsCount: collected.npm ? collected.npm.dependentsCount || 0 : 0, }; } module.exports = popularity; ================================================ FILE: lib/analyze/evaluate/quality.js ================================================ /* eslint no-nested-ternary: 0 */ 'use strict'; const url = require('url'); const semver = require('semver'); const get = require('lodash/get'); const normalizeValue = require('normalize-value'); const log = logger.child({ module: 'evaluate/quality' }); /** * Evaluates the author's carefulness with the package. * It evaluates the basics of a package, such as the README, license, stability, etc. * * @param {Object} collected - The collected information. * * @returns {Number} The carefulness evaluation (from 0 to 1). */ function evaluateCarefulness(collected) { const licenseEvaluation = Number(!!collected.metadata.license); const readmeEvaluation = normalizeValue(get(collected, 'source.files.readmeSize', 0), [ { value: 0, norm: 0 }, { value: 400, norm: 1 }, ]); const lintersEvaluation = Number(!!get(collected, 'source.linters', null)); const ignoreEvaluation = Number(get(collected, 'source.files.hasNpmIgnore') || collected.metadata.hasSelectiveFiles || false); const changelogEvaluation = Number(get(collected, 'source.files.hasChangelog', false)); const isDeprecated = !!collected.metadata.deprecated; const isStable = semver.gte(collected.metadata.version, '1.0.0', true); // `true` = loose semver const finalWeightConditioning = isDeprecated ? 0 : (!isStable ? 0.5 : 1); return ( (licenseEvaluation * 0.33) + (readmeEvaluation * 0.38) + (lintersEvaluation * 0.13) + (ignoreEvaluation * 0.08) + (changelogEvaluation * 0.08) ) * finalWeightConditioning; } /** * Evaluates the package tests. * Takes into the consideration the tests size, coverage % and build status. * * @param {Object} collected - The collected information. * * @returns {Number} The tests evaluation (from 0 to 1). */ function evaluateTests(collected) { if (!collected.source) { return 0; } const testsEvaluation = normalizeValue(collected.source.files.testsSize, [ { value: 0, norm: 0 }, { value: 400, norm: collected.metadata.hasTestScript ? 1 : 0.5 }, ]); const coverageEvaluation = collected.source.coverage || 0; const statusEvaluation = ((collected.github && collected.github.statuses) || []) .reduce((sum, status, index, arr) => { switch (status.state) { case 'success': return sum + (1 / arr.length); case 'pending': return sum + (0.3 / arr.length); case 'error': case 'failure': return sum; default: log.warn(`Unknown github status state: ${status}`); return sum; } }, 0); return (testsEvaluation * 0.6) + (statusEvaluation * 0.25) + (coverageEvaluation * 0.15); } /** * Evaluates the package health. * Takes into consideration vulnerabilities, outdated dependencies and unlocked dependencies (ones with * or >= 0.0.0). * * @param {Object} collected - The collected information. * * @returns {Number} The dependencies health evaluation (from 0 to 1). */ function evaluateHealth(collected) { if (!collected.source) { return 0; } const dependencies = collected.metadata.dependencies || {}; const dependenciesCount = Object.keys(dependencies).length; if (!dependenciesCount) { return 1; } // Calculate outdated count const outdatedCount = collected.source.outdatedDependencies ? Object.keys(collected.source.outdatedDependencies).length : (collected.source.outdatedDependencies === false ? dependenciesCount : 0); // Calculate vulnerabilities count const vulnerabilitiesCount = collected.source.vulnerabilities ? collected.source.vulnerabilities.length : (collected.source.vulnerabilities === false ? dependenciesCount : 0); // Calculate unlocked count - packages that have loose locking of versions, e.g.: '*' or >= 1.6.0 // Note that if the package has npm-shrinkwrap.json, then it actually has its versions locked down const unlockedCount = collected.source.files.hasShrinkwrap ? 0 : Object.values(dependencies).reduce((count, value) => { const range = semver.validRange(value, true); return range && !semver.gtr('1000000.0.0', range, true) ? count + 1 : count; }, 0); const outdatedEvaluation = normalizeValue(outdatedCount, [ { value: 0, norm: 1 }, { value: Math.max(2, dependenciesCount / 4), norm: 0 }, ]); const vulnerabilitiesEvaluation = normalizeValue(vulnerabilitiesCount, [ { value: 0, norm: 1 }, { value: Math.max(2, dependenciesCount / 4), norm: 0 }, ]); const finalWeightConditioning = !unlockedCount ? 1 : 1 / (unlockedCount + 1); return ( (outdatedEvaluation * 0.5) + (vulnerabilitiesEvaluation * 0.5) ) * finalWeightConditioning; } /** * Evaluates the package branding. * Takes into consideration if the package has badges, custom homepage, etc. * * @param {Object} collected - The collected information. * * @returns {Number} The branding evaluation (from 0 to 1). */ function evaluateBranding(collected) { const parsedRepository = url.parse(get(collected.metadata, 'repository.url', '')); const parsedHomepage = url.parse(get(collected.metadata, 'links.homepage', get(collected, 'github.homepage', ''))); const hasCustomHomepage = !!(parsedRepository.host && parsedHomepage.host && parsedRepository.host !== parsedHomepage.host); const badgesCount = get(collected, 'source.badges.length', 0); const homepageEvaluation = Number(hasCustomHomepage); const badgesEvaluation = normalizeValue(badgesCount, [ { value: 0, norm: 0 }, { value: 4, norm: 1 }, ]); return (homepageEvaluation * 0.4) + (badgesEvaluation * 0.6); } // ---------------------------------------------------------------------------- /** * Evaluates the package quality. * * @param {Object} collected - The collected information. * * @returns {Object} The evaluation result. */ function quality(collected) { return { carefulness: evaluateCarefulness(collected), tests: evaluateTests(collected), health: evaluateHealth(collected), branding: evaluateBranding(collected), }; } module.exports = quality; ================================================ FILE: lib/analyze/index.js ================================================ 'use strict'; const promiseRetry = require('promise-retry'); const serializeError = require('serialize-error'); const omit = require('lodash/omit'); const collect = require('./collect'); const evaluate = require('./evaluate'); const download = require('./download'); const exec = require('./util/exec'); const packageJsonFromData = require('./util/packageJsonFromData'); const log = logger.child({ module: 'analyze' }); /** * Gets a package analysis. * * @param {String} name - The package name. * @param {Nano} npmsNano - The client nano instance for npms. * * @returns {Promise} The promise that fulfills when done. */ function get(name, npmsNano) { return npmsNano.getAsync(`package!${name}`) .catch({ error: 'not_found' }, () => { throw Object.assign(new Error(`Analysis for package ${name} does not exist`), { code: 'ANALYSIS_NOT_FOUND' }); }); } /** * Removes a package analysis. * * @param {String} name - The package name. * @param {Nano} npmsNano - The client nano instance for npms. * * @returns {Promise} The promise that fulfills when done. */ function remove(name, npmsNano) { return promiseRetry((retry) => ( get(name, npmsNano) .then((doc) => ( npmsNano.destroyAsync(doc._id, doc._rev) .catch({ error: 'conflict' }, (err) => { err = new Error(`Conflict while removing ${name} analysis`); log.warn({ err }, err.message); retry(err); }) )) )) .catch({ code: 'ANALYSIS_NOT_FOUND' }, () => {}) .then(() => log.trace(`Removed analysis of ${name}`)); } /** * Saves a package analysis. * Contains the collected info and the evaluation result. * * @param {Object} analysis - The analysis (can be the full doc to avoid having to fetch it). * @param {Nano} npmsNano - The client nano instance for npms. * * @returns {Promise} The promise that fulfills when done. */ function save(analysis, npmsNano) { const name = analysis.collected.metadata.name; return promiseRetry((retry) => // Fetch the doc if necessary to obtain its rev Promise.try(() => { if (analysis._rev) { return; } return get(name, npmsNano) .then((doc) => { analysis._rev = doc._rev; }) .catch({ code: 'ANALYSIS_NOT_FOUND' }, () => {}); }) // Save it .then(() => { analysis._id = `package!${name}`; return npmsNano.insertAsync(analysis) .tap((response) => { analysis._rev = response.rev; }) .catch({ error: 'conflict' }, (err) => { err = new Error(`Conflict while storing ${name} analysis`); log.warn({ err }, err.message); delete analysis._rev; retry(err); }); }) ) .return(analysis) .tap((analysis) => log.trace({ analysis }, `Saved analysis of ${name}`)); } /** * Saves a failed analysis of a package. * * @param {String} name - The package name. * @param {Error} err - The analysis error. * @param {Nano} npmsNano - The npms nano client instance. * * @returns {Promise} The promise for the saved analysis document. */ function saveFailed(name, err, npmsNano) { return get(name, npmsNano) .catch({ code: 'ANALYSIS_NOT_FOUND' }, () => ({})) .tap((analysis) => { analysis.error = omit( serializeError(err), 'gotOptions' // Please note gotOptions might contain sensitive information such as tokens. ); analysis.error.caughtAt = (new Date()).toISOString(); analysis.startedAt = analysis.startedAt || (new Date()).toISOString(); analysis.finishedAt = analysis.finishedAt || (new Date()).toISOString(); analysis.collected = analysis.collected || collect.empty(name); analysis.evaluation = analysis.evaluation || evaluate(analysis.collected); }) .then((analysis) => save(analysis, npmsNano)) .then((analysis) => { log.debug({ analysis }, `Saved failed analysis of ${name}`); return analysis; }, (err) => { log.error({ err }, `Error while saving failed analysis of ${name}`); throw err; }); } /** * Analyses a package, running the collectors & evaluators and then saving the result. * * @param {String} name - The package name. * @param {Nano} npmNano - The npm nano client instance. * @param {Nano} npmsNano - The npms nano client instance. * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Promise} The promise for the saved analysis document. */ function analyze(name, npmNano, npmsNano, options) { options = Object.assign({ githubTokens: null, // The GitHub API tokens to use waitRateLimit: false, // True to wait if rate limit for all tokens were exceeded rev: null, // Pass the previous analysis revision if any }, options); log.trace(`Starting ${name} analysis`); const startedAt = (new Date()).toISOString(); // Fetch package data & grab its package.json return npmNano.getAsync(name) // If it doesn't exist, attempt to delete the analysis and then fail .catch({ error: 'not_found' }, () => ( remove(name, npmsNano) .finally(() => { throw Object.assign(new Error(`Package ${name} does not exist`), { code: 'PACKAGE_NOT_FOUND', unrecoverable: true }); }) )) // Otherwise, analyze it! .then((data) => { const packageJson = packageJsonFromData(name, data); // Download return download(packageJson, options) // Collect + evaluate .then((downloaded) => ( collect(data, packageJson, downloaded, npmNano, options) .then((collected) => { const evaluation = evaluate(collected); return { startedAt, finishedAt: (new Date()).toISOString(), collected, evaluation, _rev: options.rev || undefined, }; }) // Get rid of download folder .then((analysis) => ( exec(exec.escape`rm -rf ${downloaded.dir}`) .return(analysis) ), (err) => ( exec(exec.escape`rm -rf ${downloaded.dir}`) .finally(() => { throw err; }) )) )); }) // Finally, save the analysis .tap((analysis) => save(analysis, npmsNano)) .then((analysis) => { log.debug({ analysis }, `Analysis of ${name} completed`); return analysis; }, (err) => { log[err.unrecoverable ? 'info' : 'error']({ err }, `Analysis of ${name} failed`); throw err; }); } module.exports = analyze; module.exports.get = get; module.exports.save = save; module.exports.saveFailed = saveFailed; module.exports.remove = remove; module.exports.cleanTmpDir = download.cleanTmpDir; ================================================ FILE: lib/analyze/util/exec.js ================================================ 'use strict'; const cp = require('child_process'); const escapeshellarg = require('php-escape-shell').php_escapeshellarg; /** * Es6 tagged template to be used to automatically escape placeholders. * * @param {Array} pieces - The pieces array. * @param {...String} substitutions - The substitutions. * * @returns {String} The interpolated string. */ function escape(pieces, ...substitutions) { let result = pieces[0]; substitutions.forEach((substitution, index) => { result += escapeshellarg(substitution) + pieces[index + 1]; }); return result; } /** * Wrapper around `child_process#exec` that returns a promise. * * @param {String} command - The shell command. * @param {Object} options - The options to pass to `child_process#exec`. * * @returns {Promise} The promise to exec. */ function exec(command, options) { return new Promise((resolve, reject) => { cp.exec(command, options, (err, stdout, stderr) => { if (err) { err.stdout = stdout; err.stderr = stderr; // Change `code` property to `exitCode` to be consistent with our errors (code are strings) err.exitCode = err.code; delete err.code; reject(err); } else { resolve([stdout, stderr]); } }); }); } module.exports = exec; module.exports.escape = escape; ================================================ FILE: lib/analyze/util/gotRetry.js ================================================ /* eslint no-bitwise: 0 */ 'use strict'; const got = require('got'); const normalize = require('got/source/normalize-arguments'); const log = logger.child({ module: 'util/got-retry' }); const normalizedDefaults = normalize('', {}, got.defaults); const defaultRetries = normalizedDefaults.retry.retries; const retries = (iteration, error) => { const delay = defaultRetries(iteration, error); if (delay > 0) { log.warn({ url: error.href, error, iteration }, 'Retrying request..'); } return delay; }; module.exports = { retries }; ================================================ FILE: lib/analyze/util/hostedGitInfo.js ================================================ 'use strict'; const hostedGitInfoFromUrl = require('hosted-git-info').fromUrl; const log = logger.child({ module: 'util/hosted-git-info' }); /** * Wrapper around hostedGitInfo.fromUrl that returns null on exceptions. * See: Https://github.com/npm/hosted-git-info/issues/15. * * @param {String} repositoryUrl - The repository URL. * * @returns {Object} The git info object or undefined. */ function hostedGitInfo(repositoryUrl) { try { return hostedGitInfoFromUrl(repositoryUrl); } catch (err) { log.warn({ err }, `Error while parsing ${repositoryUrl}, returning null..`); } } module.exports = hostedGitInfo; ================================================ FILE: lib/analyze/util/normalizePackageJson.js ================================================ 'use strict'; const normalizePackageData = require('normalize-package-data'); const log = logger.child({ module: 'util/normalize-package-json' }); /** * Remove tree// from the repository URL. * * Some developers assume that repository is a simple URL and not a cloneable URL. * See: Https://github.com/babel/babel/issues/5574. * * @param {String} url - The repository URL. * * @returns {String} The URL with any path removed. */ function removePathFromRepositoryUrl(url) { const newUrl = url.replace(/(\/[^/.]+\/[^/.]+)\/tree\/.+$/, '$1'); newUrl !== url && logger.info({ url, newUrl }, 'Removed path from repository URL'); return newUrl; } /** * Normalizes a package.json. * * Wrapper around normalize-package-data module that handles extra stuff, see code below. * * @param {Object} packageJson - The package package.json. * * @returns {Object} The normalized package.json. */ function normalizePackageJson(packageJson) { // Remove tree/ from urls because some devs put branches in the URL // See: https://github.com/babel/babel/issues/5574 if (packageJson.repository) { if (typeof packageJson.repository === 'string') { packageJson.repository = removePathFromRepositoryUrl(packageJson.repository); } else if (typeof packageJson.repository.url === 'string') { packageJson.repository.url = removePathFromRepositoryUrl(packageJson.repository.url); } } // Some packages error out while being normalized, for instance, when they contain malformed // URIs in the repository.url (e.g.: `sails-sparql@0.10.0`) try { normalizePackageData(packageJson); } catch (err) { log.warn({ err, packageJson }, `Error normalizing ${packageJson.name} package.json`); err.unrecoverable = true; throw err; } // The `name` property must be set because it's used to query the npm registry. // This is always set for packageJson inferred from the package data but might be nullish from the // downloaded packageJson if (!packageJson.name) { throw Object.assign(new Error('Missing name from package.json'), { unrecoverable: true }); } // Remove duplicate .git.git until it gets fixed on normalize-package-data // See: https://github.com/npm/normalize-package-data/issues/84 if (packageJson.repository && packageJson.repository.url) { packageJson.repository.url = packageJson.repository.url.replace(/\.git\.git$/i, '.git'); } return packageJson; } module.exports = normalizePackageJson; ================================================ FILE: lib/analyze/util/packageJsonFromData.js ================================================ 'use strict'; const normalizePackageJson = require('./normalizePackageJson'); const log = logger.child({ module: 'util/package-json-from-data' }); /** * Grab the latest package.json from the package data, normalizing it. * * @param {String} name - The package name. * @param {Object} data - The package data. * * @returns {Object} The normalized package.json. */ function packageJsonFromData(name, data) { const version = (data['dist-tags'] && data['dist-tags'].latest) || '0.0.1'; let packageJson = data.versions && data.versions[version]; // Some packages in npm are corrupt and don't have a latest version, e.g.: `node-gr` if (!packageJson) { log.warn(`No latest version information for ${name}, mocking package.json..`); packageJson = { name: data.name, version }; } // Fail if the names mismatch if (data.name !== name || packageJson.name !== name) { throw Object.assign(new Error(`Package name mismatch detected in ${name}`), { name, dataName: data.name, packageJsonName: packageJson.name, unrecoverable: true }); } // Check if the version is correct if (packageJson.version !== version) { log.warn(`Version mismatch for ${name}, fixing it..`); packageJson.version = version; } return normalizePackageJson(packageJson); } module.exports = packageJsonFromData; ================================================ FILE: lib/configure.js ================================================ 'use strict'; const Promise = require('bluebird'); const pino = require('pino'); const forIn = require('lodash/forIn'); const wrap = require('lodash/wrap'); // Configure bluebird // ---------------------------------------------------- // Make bluebird global global.Promise = Promise; // Improve debugging by enabling long stack traces.. it has minimal impact in production Promise.config({ longStackTraces: true, warnings: false }); // Configure global logger (pino) // ---------------------------------------------------- const logger = global.logger = pino({ name: 'npms-analyzer' }, process.stdout); logger.children = {}; // Make sure that changing the level, affects all children /* eslint-disable no-invalid-this */ logger[pino.symbols.setLevelSym] = wrap(logger[pino.symbols.setLevelSym], function (setLevel, level) { setLevel.call(this, level); if (this === logger) { forIn(logger.children, (child) => { child.level = level; }); } }); /* eslint-enable no-invalid-this */ // Make some restrictions on the usage of .child() logger.child = wrap(logger.child, (createChild, bindings) => { if (!bindings || !bindings.module) { throw new Error('Expected logger.child to have a module property'); } if (logger.children[bindings.module]) { throw new Error(`A logger named ${bindings.module} already exists`); } const child = createChild.call(logger, bindings); logger.children[bindings.module] = child; child.child = () => { throw new Error('Unable to use child() on a non-root logger'); }; return child; }); // Ensure logs are flushed when the process terminates process.on('exit', () => logger[pino.symbols.streamSym].flushSync()); process.on('uncaughtException', (err) => { logger[pino.symbols.streamSym].flushSync(); throw err; }); ================================================ FILE: lib/observers/realtime.js ================================================ 'use strict'; const couchdbForce = require('couchdb-force'); const get = require('lodash/get'); const uniq = require('lodash/uniq'); const log = logger.child({ module: 'observer/realtime' }); class RealtimeObserver { /** * Constructor. * * Note that the `onPackage` function may return a promise that will be waited before resuming the observe process. * If the `onPackage` function fails, the observing process will be restarted and resumed at the same package. * * @param {Nano} npmNano - The npm nano client instance. * @param {Nano} npmsNano - The npms nano client instance. * @param {function} onPackage - The function to be called to notify packages. * @param {Object} [options] - The options; read below to get to know each available option. */ constructor(npmNano, npmsNano, onPackage, options) { if (typeof options === 'function') { onPackage = options; options = null; } this._npmNano = npmNano; this._npmsNano = npmsNano; this._onPackage = onPackage; this._options = Object.assign({ concurrency: 25, // The maximum concurrency in which to call `onPackage` defaultSeq: null, // Default seq to be used in the first run (null means from now on) restartDelay: 5000, // Time to wait before restarting on CouchDB errors }, options); // Start the thingy! this._start(); } /** * Destroys the instance. */ destroy() { this._stop(); } // ----------------------------------------------------- /** * Little utility to halt the flow of promises if `_stop() was called in the middle * of a complex promise flow. * * @param {function} fn - A function that returns a promise. * * @returns {function} A function that returns a wrapped promise that never fulfills if stopped. */ _ignoreIfStopped(fn) { return function (...args) { if (!this._started) { return new Promise(() => {}); } return fn(...args); }.bind(this); } /** * Starts observing. * * This process is infinite until `destroy()` is called. * Errors will be automatically retried. */ _start() { this._started = true; log.info('Starting realtime observer..'); // Fetch the last followed sequence this._fetchLastSeq() // Follow changes since the last sequence .then(this._ignoreIfStopped(() => this._followChanges())) // If anything goes wrong, retry! .catch(this._ignoreIfStopped((err) => { log.error({ err }, 'Realtime observer failed, restarting in a few moments..'); this._stop(); this._restartTimeout = setTimeout(() => { this._restartTimeout = null; this._start(); }, this._options.restartDelay); })) .done(); } /** * Stops observing. */ _stop() { this._started = false; if (this._follower) { this._follower.stop(); this._follower = null; } if (this._restartTimeout) { clearTimeout(this._restartTimeout); this._restartTimeout = null; } if (this._flushBufferTimeout) { clearTimeout(this._flushBufferTimeout); this._flushBufferTimeout = null; } } /** * Fetches the last followed CouchDB seq. * * @returns {Promise} A promise that resolves to the seq. */ _fetchLastSeq() { return this._npmsNano.getAsync('observer!realtime!last_followed_seq') .then(this._ignoreIfStopped((doc) => { this._lastSeq = doc; })) .catch({ error: 'not_found' }, this._ignoreIfStopped(() => { this._lastSeq = { _id: 'observer!realtime!last_followed_seq', value: this._options.defaultSeq === 'number' ? this._options.defaultSeq : null, }; })); } /** * Updates the last followed CouchDB seq. * If it fails due to a conflict, the last followed seq is refetched. * * @param {Number} seq - The sequence. * * @returns {Promise} A promise that resolves to the seq. */ _updateLastSeq(seq) { return this._npmsNano.insertAsync({ value: seq, _rev: this._lastSeq._rev, }, 'observer!realtime!last_followed_seq') // Set last seq with the update result .then(this._ignoreIfStopped((inserted) => { log.debug({ seq }, `Last followed seq updated to ${seq}`); this._lastSeq.value = seq; this._lastSeq._rev = inserted.rev; })) .catch({ error: 'conflict' }, this._ignoreIfStopped(() => { log.warn('Are two realtime instances running simultaneously?'); // Attempt to re-fetch the seq, it might have changed somehow.. return this._fetchLastSeq().catch(() => {}); })); } /** * Starts following CouchDB changes in realtime. * Each change is buffered and flushed when appropriate. * * @returns {Promise} A promise that is rejected on error. */ _followChanges() { return new Promise((resolve, reject) => { const since = this._lastSeq.value == null ? 'now' : this._lastSeq.value; log.info({ since }, `Will now start to follow changes since ${since}`); this._buffer = []; this._follower = this._npmNano.follow({ since }); this._follower // Buffer each change .on('change', this._ignoreIfStopped((change) => this._addToBuffer(change))) // The follow functionality is resilient to errors.. if an error happens, // it must be really serious .on('error', reject) .follow(); }); } /** * Adds a change to the buffer. * The buffer will be flushed if full or after a certain delay. * * @param {Object} change - The CouchDB change object. */ _addToBuffer(change) { // Ignore design documents and other stuff that are not actually packages if (change.id[0] === '_') { return; } this._buffer.push(change); // Cancel previous flush timeout if any if (this._flushBufferTimeout) { clearTimeout(this._flushBufferTimeout); this._flushBufferTimeout = null; } // Flush if buffer is full if (this._buffer.length >= this._options.concurrency * 10) { this._flushBuffer(); // Flush if there are no more changes within a certain timeframe } else { this._flushBufferTimeout = setTimeout(() => { this._flushBufferTimeout = null; this._buffer.length && this._flushBuffer(); }, 2500); } } /** * Flushes the buffer, pausing the follow feed until the flush is completed. * The `onPackage()` function will be called for each buffered package. * Once done, the followed seq will be updated and the feed will be resumed. */ _flushBuffer() { if (!this._buffer.length) { return; } log.debug(`Flushing changes buffer with a total of ${this._buffer.length} changes..`); // Pause the follower this._follower.pause(); const seq = this._buffer[this._buffer.length - 1].seq; const names = uniq(this._buffer.map((change) => change.id)); // Might contain duplicates this._buffer = []; // Filter names to only contain the ones that have new versions this._filterModified(names) // Notify packages, updating the observer doc for successful ones .spread(this._ignoreIfStopped((filteredNames, bulkUpdate) => { const ignoredCount = names.length - filteredNames.length; const successfulNames = []; filteredNames && log.debug(`Notifying ${filteredNames.length} changed packages`); ignoredCount && log.info(`Ignored ${ignoredCount} packages because they have the same version`); return Promise.map(filteredNames, this._ignoreIfStopped((name) => ( this._onPackage(name) .then(() => { successfulNames.push(name); }) )), { concurrency: this._options.concurrency }) .finally(this._ignoreIfStopped(() => bulkUpdate(successfulNames))); })) // Update the last followed seq id .then(this._ignoreIfStopped(() => ( this._updateLastSeq(seq) .catch((err) => log.error({ seq, err }, 'Failed to update last followed seq, ignoring..'))) )) // If all was good, simply resume the follower // Otherwise stop the process and restart in a few moments .then(this._ignoreIfStopped(() => ( this._follower.resume() )), this._ignoreIfStopped((err) => { log.error({ err }, 'Realtime failed when notifying packages, restarting in a few moments..'); this._stop(); this._restartTimeout = setTimeout(() => { this._restartTimeout = null; this._start(); }, this._options.restartDelay); })) .done(); } /** * Filters packages that actually got their version changed or were removed. * * When a user stars a package, a change is produced. Also, the `npm` usually perform * maintenance fixes on documents that also trigger a change. * Though, we are only interested in changes that were produced by a publish or similar actions. * * This function resolves with an array where the first element is the filtered packages * and the second element is function to internally update - - - - - - - - - The package names. * * @param {Array} names - The package names. * * @returns {Promise} A promise that resolves with [filteredNames, bulkUpdate]. */ _filterModified(names) { return Promise.all([ this._npmNano.fetchAsync({ keys: names }).get('rows'), this._npmsNano.fetchAsync({ keys: names.map((name) => `observer!package!${name}`) }).get('rows'), ]) .spread(this._ignoreIfStopped((npmRows, observerRows) => { // Filter only the ones that were actually modified, aggregating the docs and patches for each one const docsHash = {}; const patchesHash = {}; const filteredNames = names.filter((name, index) => { const npmModifiedAt = get(npmRows[index], 'doc.time.modified', null); const observerModifiedAt = get(observerRows[index], 'doc.realtime.modifiedAt'); const wasModified = !npmModifiedAt || !observerModifiedAt || npmModifiedAt !== observerModifiedAt; if (!wasModified) { return false; } docsHash[name] = observerRows[index].doc; patchesHash[name] = { _id: `observer!package!${name}`, realtime: { modifiedAt: npmModifiedAt } }; return true; }); // Resolve with the filtered names and a bulkUpdate function to update the observer docs return [filteredNames, (successfulNames) => { const docs = successfulNames.map((name) => docsHash[name]); const patches = successfulNames.map((name) => patchesHash[name]); return couchdbForce.bulkPatch(this._npmsNano, patches, { docs }); }]; })); } } function realtime(npmAddr, npmsAddr, onPackage, options) { return new RealtimeObserver(npmAddr, npmsAddr, onPackage, options); } module.exports = realtime; ================================================ FILE: lib/observers/stale.js ================================================ 'use strict'; const couchdbIterator = require('couchdb-iterator'); const couchdbForce = require('couchdb-force'); const get = require('lodash/get'); const log = logger.child({ module: 'observer/stale' }); class StaleObserver { /** * Constructor. * * Note that the `onPackage` function may return a promise that will be waited * before resuming the observe process. If the `onPackage` function fails, the process will be restarted and resumed * at the same package. * * @param {Nano} npmsNano - The npms nano client instance. * @param {function} onPackage - The function to be called to notify packages. * @param {Object} [options] - The options; read below to get to know each available option. */ constructor(npmsNano, onPackage, options) { if (typeof options === 'function') { onPackage = options; options = null; } this._npmsNano = npmsNano; this._onPackage = onPackage; this._options = Object.assign({ concurrency: 25, // The maximum concurrency in which to call `onPackage` staleThreshold: { normal: 25 * 24 * 60 * 60 * 1000, // Threshold in which a package analysis is considered stale (defaults to 25d) failed: 12 * 60 * 60 * 1000, // Threshold in which a failed package analysis is considered stale (defaults to 12h) }, checkDelay: 5 * 60 * 1000, // Time to wait before checking for stale package analysis (defaults to 5m) }, options); // Start the thingy! this._start(); } /** * Destroys the instance. */ destroy() { this._stop(); } // ----------------------------------------------------- /** * Little utility to halt the flow of promises if `_stop()` was called in the middle * of a complex promise flow. * * @param {function} fn - A function that returns a promise. * * @returns {function} A function that returns a wrapped promise that never fulfills if stopped. */ _ignoreIfStopped(fn) { return function (...args) { if (!this._started) { return new Promise(() => {}); } return fn(...args); }.bind(this); } /** * Starts observing. * * This process is infinite until `destroy()` is called. */ _start() { this._started = true; log.info('Starting stale observer..'); this._check(); } /** * Stops observing. */ _stop() { this._started = false; if (this._checkTimeout) { clearTimeout(this._checkTimeout); this._checkTimeout = null; } } /** * Searches the database, looking for stale packages. * * Schedules a new check once done. */ _check() { // Check for normal stale packages this._checkType('failed') // Check for stale packages which analysis have failed .then(() => this._checkType('normal')) // Schedule the next check .then(this._ignoreIfStopped(() => { this._checkTimeout = setTimeout(() => { this._checkTimeout = null; this._check(); }, this._options.checkDelay); })); } /** * Searches the database, looking for stale packages of a specific type. * * @param {String} type - The staleness type (normal or failed). * * @returns {Promise} A promise that fullfills when done. */ _checkType(type) { log.debug(`Looking for stale packages (${type})..`); // Fetch stale packages by querying the `packages-stale` view return couchdbIterator.bulk(this._npmsNano, 'npms-analyzer/packages-stale', this._ignoreIfStopped((rows) => { const names = rows.filter((row) => row.doc).map((row) => row.doc.collected.metadata.name); log.debug(`Got ${rows.length} packages that are considered stale (${type}), filtering..`); // Filter names to only contain the ones that have new versions return this._filterNotNotified(names, type) // Notify packages, updating the observer doc for successful ones .spread(this._ignoreIfStopped((filteredNames, bulkUpdate) => { const filteredCount = filteredNames.length; const ignoredCount = names.length - filteredCount; const successfulNames = []; filteredCount && log.debug(`Notifying ${filteredNames.length} stale packages (${type})`); ignoredCount && log.info(`Ignored ${ignoredCount} stale packages (${type}) because they were already notified`); return Promise.map(filteredNames, this._ignoreIfStopped((name) => this._onPackage(name) .then(() => { successfulNames.push(name); }))) .finally(this._ignoreIfStopped(() => bulkUpdate(successfulNames))); })); }), { startkey: [type, 0, null], endkey: [type, Date.now() - this._options.staleThreshold[type], '\ufff0'], includeDocs: true, bulkSize: this._options.concurrency, }) .catch(this._ignoreIfStopped((err) => { log.error({ err }, `Stale observer failed when notifying stale packages (${type})`); })); } /** * Filters packages that were not yet notified. * * It might take some time for a package to be analyzed. Having that said, we must ensure * that packages that were previously notified are filtered to avoid repetition. * * @param {Array} names - The package names. * @param {String} type - The stale type (normal or failed). * * @returns {Promise} A promise that resolves with [filteredNames, bulkUpdate]. */ _filterNotNotified(names, type) { return this._npmsNano.fetchAsync({ keys: names.map((key) => `observer!package!${key}`) }) .get('rows') .then(this._ignoreIfStopped((observerRows) => { // Filter only the ones that were not notified or enough time has passed, aggregating the docs for each one const docsHash = {}; const filteredNames = names.filter((name, index) => { const notifiedAt = get(observerRows[index], 'doc.stale.notifiedAt'); if (notifiedAt && Date.now() - Date.parse(notifiedAt) <= this._options.staleThreshold[type]) { return false; } docsHash[name] = observerRows[index].doc; return true; }); // Resolve with the filtered names and a bulkUpdate function to update the observer docs return [filteredNames, (successfulNames) => { const now = (new Date()).toISOString(); const docs = successfulNames.map((name) => docsHash[name]); const patches = successfulNames.map((name) => ({ _id: `observer!package!${name}`, stale: { notifiedAt: now }, })); return couchdbForce.bulkPatch(this._npmsNano, patches, { docs }); }]; })); } } function stale(npmsAddr, onPackage, options) { return new StaleObserver(npmsAddr, onPackage, options); } module.exports = stale; ================================================ FILE: lib/queue.js ================================================ 'use strict'; const EventEmitter = require('events').EventEmitter; const assert = require('assert'); const amqp = require('amqplib'); const pick = require('lodash/pick'); const log = logger.child({ module: 'queue' }); /** * Simple yet powerful queue implementation based on RabbitMQ, with support for priorities. * * The implementation has reliability and resilience, which means that a lot of errors are handled automatically for you, * including connection issues. If something goes really wrong, the instance will be automatically destroyed and a `error` event will * be emitted. * * The `error` listeners will receive an error object with a `reason` property which can be: * - blocked: RabbitMQ blocked the connection, which usually means a service outage * - canceled: RabbitMQ canceled the consumer, which usually means a service outage (or the queue was deleted) * * Additionally the following events are emitted: * - reconnect: Emitted each time a reconnect is attempted, with the number of attempts */ class Queue extends EventEmitter { /** * Constructor. * * @param {String} name - The queue name. * @param {String} addr - The RabbitMQ address (connection string). * @param {Object} [options] - The options; read below to get to know each available option. */ constructor(name, addr, options) { super(); this._name = name; this._addr = addr; this._options = Object.assign({ maxPriority: null, // The maximum priority to use if this queue is a priority queue socket: { heartbeat: 30 }, // The socket options, see: http://goo.gl/lL9SSB reconnectDelay: 5000, // Time to wait before reconnecting on connection errors }, options); this._reconnectCount = 0; } /** * Pushes the specified data into the queue. * An error will be thrown if the instance is destroyed. * * @param {Mixed} data - The data. * @param {Number} [priority] - The message priority. * * @returns {Promise} A promise that fulfills when done. */ push(data, priority) { assert(!this._destroyed, 'Queue is destroyed'); log.trace({ data }, 'Pushing into the queue'); // Ensure we are connected return this._connect() // Add it to the queue .then(() => this._sendToQueue({ data, pushedAt: (new Date()).toISOString(), retryCount: 0, priority })) .then(() => { log.trace({ data }, 'Successfully pushed into the queue'); }, (err) => { log.error({ data, err }, 'Failed to push data into the queue'); throw err; }); } /** * Registers the consumer for this queue. * * The consumer function will be called with one argument - a message object that contains * `data`, `pushedAt` and `retryCount` properties - and is expected to return a promise. * Resolving the promise signals that the message was consumed successfully, rejecting the promise * signals that an error occurred which causes the message to be re-queued. * * One note on consumers: In error scenarios the message might be redelivered several times therefore your * consumer function must be coded having that in mind. * * Only one consumer is allowed as well as only one inflight attempt to register it. In both cases * an error will be thrown. Also, an error will be thrown if the instance has been destroyed. * * @param {function} fn - The consumer function. * @param {Object} [options] - The options; read below to get to know each available option. * * @returns {Promise} A promise that fulfills once registered. */ consume(fn, options) { assert(!this._destroyed, 'Queue is destroyed'); assert(!this._consumer, 'Consumer is already registered'); assert(!this._registeringConsumer, 'A consumer is being registered'); if (typeof options === 'function') { fn = options; options = null; } options = Object.assign({ concurrency: 1, // Concurrency at which `fn` will be run maxRetries: 5, // Maximum number of retries allowed for the same message onRetriesExceeded: null, // Called when all retries where exhausted when consuming the message }, options); const consumer = Object.assign({ fn }, options); this._registeringConsumer = true; return this._connect() .then(() => this._registerConsumer(consumer)) .finally(() => { this._registeringConsumer = false; }); } /** * Stats the queue. * * Returns a promise that resolves with an object with `messageCount` and * `consumerCount` properties. * * An error will be thrown if the instance is destroyed. * * @returns {Promise} A promise that fulfills when done. */ stat() { assert(!this._destroyed, 'Queue is destroyed'); return this._connect() .then(() => this._channel.checkQueue(this._name)) .then((response) => pick(response, 'messageCount', 'consumerCount')) .catch({ code: 404 }, () => ({ messageCount: 0, consumerCount: 0 })); } /** * Destroys the instance. * Any on going jobs will be automatically re-queued by RabbitMQ. */ destroy() { this._destroyed = true; this._disconnect(); if (this._reconnectTimeout) { clearTimeout(this._reconnectTimeout); this._reconnectTimeout = null; } } // ----------------------------------------------------- /** * Connects to RabbitMQ. * * Sets up the connection, the channel and the consumers. * Returns a promise that is resolved once connected. If already connected, the promise resolves immediately. * * The connection is handled carefully which means that automatic retries will be attempted on errors. * * @returns {Promise} A promise that is resolved once connected. */ _connect() { if (this._connectPromise) { return this._connectPromise; } // Wait for the reconnect delay if any this._connectPromise = Promise.resolve(this._reconnectDelayPromise) // Connect to RabbitMQ! .then(() => ( Promise.resolve(amqp.connect(this._addr, this._options.socket)) .tap((connection) => { this._connection = connection; }) )) // Configure channel & queue .then((connection) => ( Promise.resolve(connection.createConfirmChannel()) .tap((channel) => { this._channel = channel; }) .then((channel) => channel.assertQueue(this._name, { durable: true, maxPriority: this._options.maxPriority, })) )) // Register consumer .then(() => { this._assertConnected(); return this._consumer && this._registerConsumer(this._consumer); }) // Final handling .then(() => { this._assertConnected(); this._reconnectCount = 0; this._connection .once('error', (err) => this._reconnect(err)) .once('close', (err) => this._reconnect(err)) .once('blocked', (reason) => { log.error({ reason }, `RabbitMQ is blocking the connection, reason being ${reason}`); this.destroy(); this.emit('error', Object.assign(new Error('Fatal error'), { code: 'FATAL', reason: 'blocked' })); }); this._channel .once('error', (err) => this._reconnect(err)) .once('close', (err) => this._reconnect(err)) .once('return', () => log.error('A message could not be queued and was returned back')); log.info('RabbitMQ connect and setup done successfully'); }) // On error, try to reconnect .catch((err) => { this._connectPromise = null; setImmediate(() => this._reconnect(err)); throw err; }); return this._connectPromise; } /** * Reconnects to RabbitMQ on error. * * The client we are using does not have built-in reconnection so we handle it ourselves. * * @param {Error} [err] - The error. */ _reconnect(err) { // Since this function is called in various asynchronous contexts, ensure that // we don't do anything if the instance has been destroyed if (this._destroyed) { log.trace('Reconnect ignored because instance is already destroyed'); return; } // Do not reconnect if already reconnecting.. if (this._reconnectDelayPromise) { log.error({ err, attemptCount: this._reconnectCount }, 'RabbitMQ connection errored, already retrying to reconnect to..'); return; } log.error({ err, attemptCount: this._reconnectCount }, 'RabbitMQ connection errored, reconnecting in a few moments..'); // Emit the reconnect event and check if the listener have decided to destroy the instance this.emit('reconnect', this._reconnectCount); if (this._destroyed) { return; } this._reconnectCount += 1; this._reconnectDelayPromise = new Promise((resolve) => { this._reconnectTimeout = setTimeout(() => { this._reconnectTimeout = this._reconnectDelayPromise = null; resolve(); }, this._options.reconnectDelay); }); this._disconnect(); this._connect().catch(() => {}); } /** * Disconnects from RabbitMQ. */ _disconnect() { this._connectPromise = null; if (this._connection) { this._connection.removeAllListeners(); this._connection.on('error', () => {}); this._connection.close().catch(() => { /* Do nothing */ }); this._connection = null; } if (this._channel) { this._channel.removeAllListeners(); this._channel.on('error', () => {}); this._channel.close().catch(() => { /* Do nothing */ }); this._channel = null; } } /** * Registers the consumer of the queue. * * @param {Object} consumer - An object containing the actual function and additional options. * * @returns {Promise} A promise that fulfills once done. */ _registerConsumer(consumer) { this._consumer = consumer; this._channel.prefetch(this._consumer.concurrency); return Promise.resolve(this._channel.consume(this._name, (queueMessage) => { // According to http://www.squaremobius.net/amqp.node/channel_api.html#channel_consume, if RabbitMQ // cancels this consumer then `queueMessage` will be null if (!queueMessage) { log.error('Consumer function got canceled remotely..'); this.destroy(); this.emit('error', Object.assign(new Error('Fatal error'), { code: 'FATAL', reason: 'canceled' })); return; } const message = JSON.parse(queueMessage.content.toString()); // Call the consumer function Promise.try(() => this._consumer.fn(message)) // Handle consumer success/error .then(() => { this._handleConsumerSuccess(message, queueMessage); }, (err) => { this._handleConsumerError(err, message, queueMessage); }) .done(); })) .then(() => { log.info('Consumer was registered successfully, will now receive messages..'); }, (err) => { this._consumer = null; log.error({ err }, 'Failed to register consumer'); throw err; }); } /** * Handles consumer success for a specific message. * * @param {Object} message - The message that the consumer received. * @param {Object} queueMessage - The original consumed RabbitMQ message. */ _handleConsumerSuccess(message, queueMessage) { // Handle the fact that we might no longer be connected.. consumers might take a while to handle the message if (!this._isConnected()) { log.warn({ message }, 'Consumer handled the message but we are no longer connected'); return; } log.debug({ message }, 'Consumer successfully handled message, ack\'ing..'); this._channel.ack(queueMessage); } /** * Handles consumer error for a specific message. * * The message will be retried if the max retries were not reached. * Otherwise, it will simply be discarded form the queue (dead lettered). * * Retried messages are put into the end of the queue to avoid congestion. * * @param {Error} err - The consumer error. * @param {Object} message - The message that the consumer received. * @param {Object} queueMessage - The original consumed RabbitMQ message. */ _handleConsumerError(err, message, queueMessage) { // Handle the fact that we might no longer be connected.. consumers might take a while to handle the message if (!this._isConnected()) { log.warn({ message }, 'Consumer failed to handle the message but we are no longer connected'); return; } // Did we reach the max allowed retries? if (message.retryCount >= this._consumer.maxRetries) { log.fatal({ err, message }, `Failed to consume message, NOT re-queueing after ${message.retryCount} failed attempts`); Promise.try(() => this._consumer.onRetriesExceeded && this._consumer.onRetriesExceeded(message, err)) .finally(() => this._channel.nack(queueMessage, false, false)); return; } log.warn({ err, message }, 'Failed to consume message, re-queueing..'); message.retryCount += 1; // Send the updated message to the tail of the queue with the updated retries count this._sendToQueue(message) // Ack the previous message only after we are sure the updated one was added to the queue // This is necessary to avoid loosing messages .then(() => { this._assertConnected(); this._channel.ack(queueMessage); }) .catch((err) => log.error({ err }, 'Error trying to re-queue the message, duplicates will occur!')) .done(); } /** * Little utility function to enqueue a message. * * @param {Object} message - The message. * * @returns {Promise} A promise that fulfills when done. */ _sendToQueue(message) { const content = Buffer.from(JSON.stringify(message)); // No promise support for sendToQueue(), see: https://github.com/squaremo/amqp.node/issues/286 return new Promise((resolve, reject) => { this._channel.sendToQueue(this._name, content, { persistent: true, priority: message.priority }, (err) => { if (err) { reject(err); } else { resolve(); } }); }); } /** * Little utility function that checks if we are connected. * * @returns {Boolean} True if connected, false otherwise. */ _isConnected() { return this._connection && this._channel; } /** * Little utility function that asserts that we are connected. */ _assertConnected() { assert(this._isConnected(), 'Not connected to RabbitMQ'); } } function queue(name, addr, options) { return new Queue(name, addr, options); } module.exports = queue; ================================================ FILE: lib/scoring/aggregate.js ================================================ 'use strict'; const couchdbIterator = require('couchdb-iterator'); const promiseRetry = require('promise-retry'); const flattenObject = require('obj-flatten'); const unflattenObject = require('obj-unflatten'); const mapValues = require('lodash/mapValues'); const mean = require('lodash/mean'); const objGet = require('lodash/get'); const trimPercentage = 0.01; // Trim evaluations % to normalize skewness of values when aggregating const log = logger.child({ module: 'scoring/aggregate' }); /** * Calculates the aggregation based on the accumulated evaluations. * * @param {Array} evaluations - The accumulated evaluations. * * @returns {Object} The aggregation object. */ function calculateAggregation(evaluations) { const shape = flattenObject(evaluations[0] || {}); const grouped = mapValues(shape, (value, key) => ( evaluations .map((evaluation) => objGet(evaluation, key)) // All the packages with negative values will have a score of 0 (e.g.: downloads acceleration) // So, we must remove all negative values from the aggregation in order to have a better score curve .filter((evaluation) => evaluation >= 0) .sort((a, b) => a - b) )); const aggregation = mapValues(grouped, (evaluations) => { const trimmedLength = Math.round(evaluations.length * trimPercentage); return { min: evaluations[0], max: evaluations[evaluations.length - 1], mean: mean(evaluations), truncatedMean: mean(evaluations.slice(trimmedLength, -trimmedLength)), median: evaluations[Math.round(evaluations.length / 2)], }; }); return unflattenObject(aggregation); } // --------------------------------------------------------- /** * Gets the last aggregation. * * @param {Nano} npmsNano - The npms nano client instance. * * @returns {Promise} The promise that fulfills when done. */ function get(npmsNano) { log.trace('Getting aggregation'); return npmsNano.getAsync('scoring!aggregation') .catch({ error: 'not_found' }, () => { throw Object.assign(new Error('Aggregation not found, it appears that the first scoring cycle has not yet run'), { code: 'AGGREGATION_NOT_FOUND' }); }); } /** * Removes a last aggregation. * * @param {Nano} npmsNano - The client nano instance for npms. * * @returns {Promise} The promise that fulfills when done. */ function remove(npmsNano) { return promiseRetry((retry) => ( get(npmsNano) .then((doc) => ( npmsNano.destroyAsync(doc._id, doc._rev) .catch({ error: 'conflict' }, (err) => { err = new Error('Conflict while removing aggregation'); log.warn({ err }, err.message); retry(err); }) )) )) .catch({ code: 'AGGREGATION_NOT_FOUND' }, () => {}) .then(() => log.trace('Aggregation removed')); } /** * Saves aggregation. * * @param {Object} aggregation - The aggregation (can be the full doc to avoid having to fetch it). * @param {Nano} npmsNano - The client nano instance for npms. * * @returns {Promise} The promise that fulfills when done. */ function save(aggregation, npmsNano) { return promiseRetry((retry) => ( // Fetch the doc if necessary to obtain its rev Promise.try(() => { if (aggregation._rev) { return; } return get(npmsNano) .then((doc) => { aggregation._rev = doc._rev; }) .catch({ code: 'AGGREGATION_NOT_FOUND' }, () => {}); }) // Save it .then(() => { aggregation._id = 'scoring!aggregation'; return npmsNano.insertAsync(aggregation) .tap((response) => { aggregation._rev = response.rev; }) .catch({ error: 'conflict' }, (err) => { err = new Error('Conflict while storing aggregation'); log.warn({ err }, err.message); delete aggregation._rev; retry(err); }); }) )) .return(aggregation) .tap(() => log.trace({ aggregation }, 'Saved aggregation')); } /** * Iterates over all packages evaluations, producing an aggregation (aka reduce) of all scalar values in it, * including the min, max and mean values for each metric. * * @param {Nano} npmsNano - The npms nano client instance. * * @returns {Promise} The promise that fulfills when done. */ function aggregate(npmsNano) { const evaluations = []; log.info('Starting aggregation'); // Iterate over all packages evaluation return couchdbIterator(npmsNano, 'npms-analyzer/packages-evaluation', (row) => { row.index && row.index % 25000 === 0 && log.info(`Accumulated a total of ${row.index} evaluations`); evaluations.push(row.value); }, { concurrency: 100, limit: 10000 }) // Calculate the aggregation & save it .then((evaluationsCount) => { if (!evaluationsCount) { log.debug('There are no evaluations yet'); return null; } log.info(`Accumulated a total of ${evaluationsCount} evaluations, calculating aggregation..`); const aggregation = calculateAggregation(evaluations); log.info({ aggregation }, 'Aggregation calculated, saving it..'); return save(aggregation, npmsNano); }) // We are done! .then((aggregation) => { log.info({ aggregation }, `Aggregation successful, processed a total of ${evaluations.length} evaluations`); return aggregation; }, (err) => { log.error({ err }, 'Aggregation failed'); throw err; }); } module.exports = aggregate; module.exports.get = get; module.exports.save = save; module.exports.remove = remove; ================================================ FILE: lib/scoring/finalize.js ================================================ 'use strict'; const log = logger.child({ module: 'scoring/finalize' }); /** * Finalizes the scoring cycle. * Updates the `npms-current` alias to point to the new index and removes all the old indices and aliases. * * @param {Object} esInfo - The object with the Elasticsearch information (returned by prepare()). * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} A promise that fulfills when done. */ function finalize(esInfo, esClient) { log.info('Finalizing scoring'); // Update `npms-current` alias to point to the new index and removes `npms-new` alias return Promise.try(() => { // Remove any `npms-current` alias const actions = esInfo.aliases.current.map((index) => ({ remove: { index, alias: 'npms-current' } })); // Remove `npms-new` and add the new `npms-current` aliases actions.push({ remove: { index: esInfo.newIndex, alias: 'npms-new' } }); actions.push({ add: { index: esInfo.newIndex, alias: 'npms-current' } }); return esClient.indices.updateAliases({ body: { actions } }) .then(() => log.debug({ actions }, 'Updated npms-read alias')); }) // Remove old indices .then(() => { const indices = esInfo.aliases.current; return indices.length && esClient.indices.delete({ index: indices }) .then(() => log.debug({ indices }, 'Removed old indices pointing to npms-read')); }) .return(); } module.exports = finalize; ================================================ FILE: lib/scoring/prepare.js ================================================ 'use strict'; const fs = require('fs'); const JSON5 = require('json5'); const difference = require('lodash/difference'); const esIndexConfig = JSON5.parse(fs.readFileSync(`${__dirname}/../../config/elasticsearch/npms.json5`)); const log = logger.child({ module: 'scoring/prepare' }); /** * Prepares the start of a scoring cycle. * Collects information about the current indices and aliases, creates a new index for the * scores to be written and updates the `npms-new` alias to point to it. * * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} A promise that resolves with the Elasticsearch information. */ function prepare(esClient) { const esInfo = {}; log.info('Preparing scoring..'); // Get current indices and aliases return Promise.try(() => Promise.all([ esClient.cat.indices({ h: ['index'] }), esClient.cat.aliases({ h: ['alias', 'index'] }), ]) .spread((indicesCat, aliasesCat) => { esInfo.indices = []; esInfo.aliases = { current: [], new: [] }; (indicesCat || '').split(/\s*\n\s*/).forEach((lines) => { const split = lines.split(/\s+/); const index = split[0]; /^npms-\d+$/.test(index) && esInfo.indices.push(index); }); (aliasesCat || '').split(/\s*\n\s*/).forEach((lines) => { const split = lines.split(/\s+/); const alias = split[0]; const index = split[1]; const match = alias.match(/^npms-(current|new)$/); match && esInfo.aliases[match[1]].push(index); }); }) .then(() => log.debug({ esInfo }, 'Gathered Elasticsearch info..'))) // Create a new index in which the scores will be written .then(() => { esInfo.newIndex = `npms-${Date.now()}`; return esClient.indices.create({ index: esInfo.newIndex, body: esIndexConfig }) .then(() => log.debug({ index: esInfo.newIndex }, 'Created new index')); }) // Update the `npms-new` alias to point to the previously created index .then(() => { // Remove any `npms-new` alias const actions = esInfo.aliases.new.map((index) => ({ remove: { index, alias: 'npms-new' } })); // Add the new `npms-new` alias actions.push({ add: { index: esInfo.newIndex, alias: 'npms-new' } }); return esClient.indices.updateAliases({ body: { actions } }) .then(() => log.debug({ actions }, 'Updated npms-new alias')); }) // Remove all indices except the ones pointing to `npms-current` (should be only 1) .then(() => { const indices = difference(esInfo.indices, esInfo.aliases.current); return indices.length && esClient.indices.delete({ index: indices }) .then(() => log.debug({ indices }, 'Removed unnecessary indices')); }) .return(esInfo); } module.exports = prepare; ================================================ FILE: lib/scoring/score.js ================================================ 'use strict'; const couchdbIterator = require('couchdb-iterator'); const weightedMean = require('weighted-mean'); const semver = require('semver'); const deepCompact = require('deep-compact'); const clamp = require('lodash/clamp'); const pick = require('lodash/pick'); const aggregate = require('./aggregate'); const { solveCubic } = require('./util/paperNumerical'); const log = logger.child({ module: 'scoring/score' }); /** * Computes the quality score. * * @param {Object} quality - The quality evaluation. * @param {Object} aggregation - The quality aggregation. * * @returns {Number} The score. */ function scoreQuality(quality, aggregation) { const scores = { carefulness: calculateScore(quality.carefulness, aggregation.carefulness, 0.8), tests: calculateScore(quality.tests, aggregation.tests, 0.7), health: calculateScore(quality.health, aggregation.health, 1), branding: calculateScore(quality.branding, aggregation.branding, 1), }; return weightedMean([ [scores.carefulness, 7], [scores.tests, 7], [scores.health, 4], [scores.branding, 2], ]); } /** * Computes the popularity score. * * @param {Object} popularity - The popularity evaluation. * @param {Object} aggregation - The popularity aggregation. * * @returns {Number} The score. */ function scorePopularity(popularity, aggregation) { const scores = { communityInterest: calculateScore(popularity.communityInterest, aggregation.communityInterest, 1), downloadsCount: calculateScore(popularity.downloadsCount, aggregation.downloadsCount, 1), downloadsAcceleration: calculateScore(popularity.downloadsAcceleration, aggregation.downloadsAcceleration, 1), // dependentsCount: calculateScore(popularity.dependentsCount, aggregation.dependentsCount, 1), }; return weightedMean([ [scores.communityInterest, 2], [scores.downloadsCount, 2], [scores.downloadsAcceleration, 1], // [scores.dependentsCount, 2], ]); } /** * Computes the maintenance score. * * @param {Object} maintenance - The maintenance evaluation. * @param {Object} aggregation - The maintenance aggregation. * * @returns {Number} The score. */ function scoreMaintenance(maintenance, aggregation) { const scores = { releasesFrequency: calculateScore(maintenance.releasesFrequency, aggregation.releasesFrequency, 1), commitsFrequency: calculateScore(maintenance.commitsFrequency, aggregation.commitsFrequency, 1), openIssues: calculateScore(maintenance.openIssues, aggregation.openIssues, 1), issuesDistribution: calculateScore(maintenance.issuesDistribution, aggregation.issuesDistribution, 1), }; return weightedMean([ [scores.releasesFrequency, 2], [scores.commitsFrequency, 1], [scores.openIssues, 1], [scores.issuesDistribution, 2], ]); } /** * Calculates the score of a value taking into the consideration its aggregation (min, max, mean). * * The mathematical formula can be "previewed" here: Https://github.com/npms-io/npms-analyzer/blob/master/docs/diagrams/bezier.png. * It's a bezier curve, with the following points: (0,0), (normValue, avgY), (normValue, avgY) and (1, 1). * Thanks @atduarte for this awesome equation. * * @param {Number} value - The value. * @param {Object} aggregation - The aggregation for the value. * @param {Number} avgY - The avgY value to use for the intermediate point. * * @returns {Number} The score. */ function calculateScore(value, aggregation, avgY) { // Normalize value and mean const normValue = clamp((value - aggregation.min) / aggregation.max, 0, 1); const normMean = clamp((aggregation.truncatedMean - aggregation.min) / aggregation.max, 0, 1); // Calculate the cubic roots const roots = []; solveCubic(1, -3 * normMean, 3 * normMean, -1 * normValue, roots, 0, 1); const t = roots[0]; if (t == null) { throw Object.assign(new Error('Solving the cubic formula failed, probably aggregation is incorrect'), { code: 'SCORE_CUBIC_MISMATCH', roots, normValue, normMean, value, aggregation }); } // Calculate the point in the bezier curve return (t ** 3) - (3 * avgY * (t ** 2)) + (3 * t * avgY); } /** * Calculates and builds the score data to be indexed in Elasticsearch. * * @param {Object} analysis - The package analysis. * @param {Object} aggregation - The most up to date aggregation. * * @returns {Object} The score data. */ function buildScore(analysis, aggregation) { const collected = analysis.collected; const evaluation = analysis.evaluation; const scoreDetail = { quality: scoreQuality(evaluation.quality, aggregation.quality), popularity: scorePopularity(evaluation.popularity, aggregation.popularity), maintenance: scoreMaintenance(evaluation.maintenance, aggregation.maintenance), }; return deepCompact({ package: pick(collected.metadata, [ 'name', 'scope', 'version', 'description', 'keywords', 'date', 'links', 'author', 'publisher', 'maintainers', ]), flags: analysis.error && collected.metadata.version === '0.0.0' ? null : { deprecated: collected.metadata.deprecated, insecure: collected.source && collected.source.vulnerabilities ? collected.source.vulnerabilities.length : null, unstable: semver.lt(collected.metadata.version, '1.0.0', true) ? true : null, }, evaluation, score: { final: (scoreDetail.quality * 0.3) + (scoreDetail.popularity * 0.35) + (scoreDetail.maintenance * 0.35), detail: scoreDetail, }, }); } /** * Get the score indices that are currently available as an array. * * This function is necessary to avoid calling POST, DELETE or other document operations that attempt to * auto-create the index automatically. These operations will fail because we explicitly disabled index auto-creation. * A lot of errors are outputted to Elasticsearch error log and we want to avoid that. * * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} A promise that fulfills when done. */ function getLivingIndices(esClient) { const indices = ['npms-current', 'npms-new']; return Promise.map(indices, (index) => esClient.indices.exists({ index })) .then((exists) => indices.filter((index, x) => exists[x])) .tap((livingIndices) => log.trace({ livingIndices }, 'Got living score indices')); } /** * Stores a package score in `npms-current` and `npms-new` indices. * * If none of the indices exist, the operation fails. * * @param {Object} score - The score data. * @param {Object} livingIndices - The array from getLivingIndices(). * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} A promise that fulfills when done. */ function storeScore(score, livingIndices, esClient) { // Fail if none exist if (!livingIndices.length) { return Promise.reject(Object.assign(new Error('There are no scoring indices'), { code: 'SCORE_INDEX_NOT_FOUND' })); } const name = score.package.name; return Promise.map(livingIndices, (index) => ( esClient.index({ index, type: 'score', id: name, body: score }) .catch({ status: 404 }, () => { throw Object.assign(new Error(`Index ${index} was deleted meanwhile`), { code: 'SCORE_INDEX_NOT_FOUND' }); }) )) .return(score) .tap(() => log.trace({ score, livingIndices }, `Stored score of ${name}`)); } // ------------------------------------------------------------------- /** * Gets a package score data. * * @param {String} name - The package name. * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} The promise that fulfills when done. */ function get(name, esClient) { // Need to use Promise.resolve() because Elasticsearch doesn't use the global promise return Promise.resolve(esClient.get({ index: 'npms-current', type: 'score', id: name })) .get('_source') .catch({ status: 404 }, () => { throw Object.assign(new Error(`Score for ${name} does not exist`), { code: 'SCORE_NOT_FOUND' }); }); } /** * Removes a package score data. * * Removes score data from both `npms-current` and `npms-new` indices. * * @param {String} name - The package name. * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} The promise that fulfills when done. */ function remove(name, esClient) { // Check current indices return getLivingIndices(esClient) // Remove package from each of them .tap((livingIndices) => ( Promise.map(livingIndices, (index) => ( // Need to use Promise.resolve() because Elasticsearch doesn't use the global promise Promise.resolve(esClient.delete({ index, type: 'score', id: name })) .catch({ status: 404 }, () => {}) // Just in case.. )) ) .then(() => log.trace({ livingIndices }, `Removed score of ${name}`))); } /** * Saves a package score data. * * Stores score data in `npms-current` and `npms-new` indices. * If none of the indices exist, the operation fails. * * @param {Object} score - The score data. * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} The promise that fulfills when done. */ function save(score, esClient) { // Check the existence of `npms-current` and `npms-new` indices return getLivingIndices(esClient) // Store the score in the indices .then((livingIndices) => storeScore(score, livingIndices, esClient)); } /** * Scores all packages. * * Scores are stored only in the `npms-new` index. * If none of the indices exist, the operation fails. * * @param {Object} aggregation - The most up to date aggregation. * @param {Nano} npmsNano - The npm nano instance. * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} A promise that fulfills when done. */ function all(aggregation, npmsNano, esClient) { // Check if the `npms-new` index exists return getLivingIndices(esClient) .then((livingIndices) => { if (livingIndices.indexOf('npms-new') === -1) { throw Object.assign(new Error('There is no `npms-new` scoring index'), { code: 'SCORE_INDEX_NOT_FOUND' }); } return ['npms-new']; }) // Iterate over all packages and score them! .then((livingIndices) => { log.info({ aggregation }, 'Scoring packages..'); return couchdbIterator(npmsNano, (row) => { row.index && row.index % 10000 === 0 && log.info(`Scored a total of ${row.index} packages`); if (!row.doc) { return; } const analysis = row.doc; const name = analysis.collected.metadata.name; // Store the score in the indices return Promise.try(() => storeScore(buildScore(analysis, aggregation), livingIndices, esClient)) .then((score) => { log.debug({ score, livingIndices }, `Score of ${name} completed`); }, (err) => { log.error({ err }, `Score of ${name} failed`); // Surpress cubic errors if (err.code !== 'SCORE_CUBIC_MISMATCH') { throw err; } }); }, { startkey: 'package!', endkey: 'package!\ufff0', concurrency: 50, limit: 2500, includeDocs: true, }) .tap((count) => log.info(`Scoring packages completed, scored a total of ${count} packages`)); }); } /** * Scores a package, indexing its result in Elasticsearch to be searchable. * * @param {objects} analysis - The package analysis. * @param {Nano} npmsNano - The npms nano client instance. * @param {Elastic} esClient - The Elasticsearch instance. * * @returns {Promise} The promise that fulfills when done. */ function score(analysis, npmsNano, esClient) { const name = analysis.collected.metadata.name; return aggregate.get(npmsNano) .then((aggregation) => save(buildScore(analysis, aggregation), esClient)) .then((score) => { log.debug({ score }, `Score of ${name} completed`); return score; }, (err) => { log.error({ err }, `Score of ${name} failed`); throw err; }); } module.exports = score; module.exports.get = get; module.exports.save = save; module.exports.remove = remove; module.exports.all = all; ================================================ FILE: lib/scoring/util/paperNumerical.js ================================================ /* eslint-disable */ // This was copied from the https://raw.githubusercontent.com/paperjs/paper.js project // It's used by `solveCubic.js` /* * Paper.js - The Swiss Army Knife of Vector Graphics Scripting. * http://paperjs.org/ * * Copyright (c) 2011 - 2016, Juerg Lehni & Jonathan Puckey * http://scratchdisk.com/ & http://jonathanpuckey.com/ * * Distributed under the MIT license. See LICENSE file for details. * * All rights reserved. */ /** * @name Numerical * @namespace * @private */ var Numerical = new function() { // Lookup tables for abscissas and weights with values for n = 2 .. 16. // As values are symmetric, only store half of them and adapt algorithm // to factor in symmetry. var abscissas = [ [ 0.5773502691896257645091488], [0,0.7745966692414833770358531], [ 0.3399810435848562648026658,0.8611363115940525752239465], [0,0.5384693101056830910363144,0.9061798459386639927976269], [ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016], [0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897], [ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609], [0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762], [ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640], [0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380], [ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491], [0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294], [ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973], [0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657], [ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542] ]; var weights = [ [1], [0.8888888888888888888888889,0.5555555555555555555555556], [0.6521451548625461426269361,0.3478548451374538573730639], [0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640], [0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961], [0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114], [0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314], [0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922], [0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688], [0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537], [0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160], [0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216], [0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329], [0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284], [0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806] ]; // Math short-cuts for often used methods and values var abs = Math.abs, sqrt = Math.sqrt, pow = Math.pow, // Fallback to polyfill: log2 = Math.log2 || function(x) { return Math.log(x) * Math.LOG2E; }, // Constants EPSILON = 1e-12, MACHINE_EPSILON = 1.12e-16; function clamp(value, min, max) { return value < min ? min : value > max ? max : value; } function getDiscriminant(a, b, c) { // d = b^2 - a * c computed accurately enough by a tricky scheme. // Ported from @hkrish's polysolve.c function split(v) { var x = v * 134217729, y = v - x, hi = y + x, // Don't optimize y away! lo = v - hi; return [hi, lo]; } var D = b * b - a * c, E = b * b + a * c; if (abs(D) * 3 < E) { var ad = split(a), bd = split(b), cd = split(c), p = b * b, dp = (bd[0] * bd[0] - p + 2 * bd[0] * bd[1]) + bd[1] * bd[1], q = a * c, dq = (ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0]) + ad[1] * cd[1]; D = (p - q) + (dp - dq); // Don’t omit parentheses! } return D; } function getNormalizationFactor() { // Normalize coefficients à la Jenkins & Traub's RPOLY. // Normalization is done by scaling coefficients with a power of 2, so // that all the bits in the mantissa remain unchanged. // Use the infinity norm (max(sum(abs(a)…)) to determine the appropriate // scale factor. See @hkrish in #1087#issuecomment-231526156 var norm = Math.max.apply(Math, arguments); return norm && (norm < 1e-8 || norm > 1e8) ? pow(2, -Math.round(log2(norm))) : 0; } return /** @lends Numerical */{ /** * A very small absolute value used to check if a value is very close to * zero. The value should be large enough to offset any floating point * noise, but small enough to be meaningful in computation in a nominal * range (see MACHINE_EPSILON). * * http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html * http://www.cs.berkeley.edu/~wkahan/Math128/Cubic.pdf */ EPSILON: EPSILON, /** * The machine epsilon for a double precision (Javascript Number) is * 2.220446049250313e-16. (try this in the js console: * (function(){ for (var e = 1; 1 < 1+e/2;) e/=2; return e }()) * * The constant MACHINE_EPSILON here refers to the constants δ and ε * such that, the error introduced by addition, multiplication on a * 64bit float (js Number) will be less than δ and ε. That is to say, * for all X and Y representable by a js Number object, S and P be their * 'exact' sum and product respectively, then * |S - (x+y)| <= δ|S|, and |P - (x*y)| <= ε|P|. * This amounts to about half of the actual machine epsilon. */ MACHINE_EPSILON: MACHINE_EPSILON, /** * The epsilon to be used when handling curve-time parameters. This * cannot be smaller, because errors add up to around 2e-7 in the bezier * fat-line clipping code as a result of recursive sub-division. */ CURVETIME_EPSILON: 1e-8, /** * The epsilon to be used when performing "geometric" checks, such as * distances between points and lines. */ GEOMETRIC_EPSILON: 1e-7, /** * The epsilon to be used when performing "trigonometric" checks, such * as examining cross products to check for collinearity. */ TRIGONOMETRIC_EPSILON: 1e-8, /** * Kappa is the value which which to scale the curve handles when * drawing a circle with bezier curves. * * http://whizkidtech.redprince.net/bezier/circle/kappa/ */ KAPPA: 4 * (sqrt(2) - 1) / 3, /** * Checks if the value is 0, within a tolerance defined by * Numerical.EPSILON. */ isZero: function(val) { return val >= -EPSILON && val <= EPSILON; }, /** * Returns a number whose value is clamped by the given range. * * @param {Number} value the value to be clamped * @param {Number} min the lower boundary of the range * @param {Number} max the upper boundary of the range * @returns {Number} a number in the range of [min, max] */ clamp: clamp, /** * Gauss-Legendre Numerical Integration. */ integrate: function(f, a, b, n) { var x = abscissas[n - 2], w = weights[n - 2], A = (b - a) * 0.5, B = A + a, i = 0, m = (n + 1) >> 1, sum = n & 1 ? w[i++] * f(B) : 0; // Handle odd n while (i < m) { var Ax = A * x[i]; sum += w[i++] * (f(B + Ax) + f(B - Ax)); } return A * sum; }, /** * Root finding using Newton-Raphson Method combined with Bisection. */ findRoot: function(f, df, x, a, b, n, tolerance) { for (var i = 0; i < n; i++) { var fx = f(x), // Calculate a new candidate with the Newton-Raphson method. dx = fx / df(x), nx = x - dx; // See if we can trust the Newton-Raphson result. If not we use // bisection to find another candidate for Newton's method. if (abs(dx) < tolerance) { x = nx; break; } // Update the root-bounding interval and test for containment of // the candidate. If candidate is outside the root-bounding // interval, use bisection instead. // There is no need to compare to lower / upper because the // tangent line has positive slope, guaranteeing that the x-axis // intercept is larger than lower / smaller than upper. if (fx > 0) { b = x; x = nx <= a ? (a + b) * 0.5 : nx; } else { a = x; x = nx >= b ? (a + b) * 0.5 : nx; } } // Return the best result even though we haven't gotten close // enough to the root... (In paper.js this never seems to happen). // But make sure, that it actually is within the given range [a, b] return clamp(x, a, b); }, /** * Solve a quadratic equation in a numerically robust manner; * given a quadratic equation ax² + bx + c = 0, find the values of x. * * References: * Kahan W. - "To Solve a Real Cubic Equation" * http://www.cs.berkeley.edu/~wkahan/Math128/Cubic.pdf * Blinn J. - "How to solve a Quadratic Equation" * Harikrishnan G. * https://gist.github.com/hkrish/9e0de1f121971ee0fbab281f5c986de9 * * @param {Number} a the quadratic term * @param {Number} b the linear term * @param {Number} c the constant term * @param {Number[]} roots the array to store the roots in * @param {Number} [min] the lower bound of the allowed roots * @param {Number} [max] the upper bound of the allowed roots * @returns {Number} the number of real roots found, or -1 if there are * infinite solutions * * @author Harikrishnan Gopalakrishnan */ solveQuadratic: function(a, b, c, roots, min, max) { var x1, x2 = Infinity; if (abs(a) < EPSILON) { // This could just be a linear equation if (abs(b) < EPSILON) return abs(c) < EPSILON ? -1 : 0; x1 = -c / b; } else { // a, b, c are expected to be the coefficients of the equation: // Ax² - 2Bx + C == 0, so we take b = -b/2: b *= -0.5; var D = getDiscriminant(a, b, c); // If the discriminant is very small, we can try to normalize // the coefficients, so that we may get better accuracy. if (D && abs(D) < MACHINE_EPSILON) { var f = getNormalizationFactor(abs(a), abs(b), abs(c)); if (f) { a *= f; b *= f; c *= f; D = getDiscriminant(a, b, c); } } if (D >= -MACHINE_EPSILON) { // No real roots if D < 0 var Q = D < 0 ? 0 : sqrt(D), R = b + (b < 0 ? -Q : Q); // Try to minimize floating point noise. if (R === 0) { x1 = c / a; x2 = -x1; } else { x1 = R / a; x2 = c / R; } } } var count = 0, boundless = min == null, minB = min - EPSILON, maxB = max + EPSILON; // We need to include EPSILON in the comparisons with min / max, // as some solutions are ever so lightly out of bounds. if (isFinite(x1) && (boundless || x1 > minB && x1 < maxB)) roots[count++] = boundless ? x1 : clamp(x1, min, max); if (x2 !== x1 && isFinite(x2) && (boundless || x2 > minB && x2 < maxB)) roots[count++] = boundless ? x2 : clamp(x2, min, max); return count; }, /** * Solve a cubic equation, using numerically stable methods, * given an equation of the form ax³ + bx² + cx + d = 0. * * This algorithm avoids the trigonometric/inverse trigonometric * calculations required by the "Italins"' formula. Cardano's method * works well enough for exact computations, this method takes a * numerical approach where the double precision error bound is kept * very low. * * References: * Kahan W. - "To Solve a Real Cubic Equation" * http://www.cs.berkeley.edu/~wkahan/Math128/Cubic.pdf * Harikrishnan G. * https://gist.github.com/hkrish/9e0de1f121971ee0fbab281f5c986de9 * * W. Kahan's paper contains inferences on accuracy of cubic * zero-finding methods. Also testing methods for robustness. * * @param {Number} a the cubic term (x³ term) * @param {Number} b the quadratic term (x² term) * @param {Number} c the linear term (x term) * @param {Number} d the constant term * @param {Number[]} roots the array to store the roots in * @param {Number} [min] the lower bound of the allowed roots * @param {Number} [max] the upper bound of the allowed roots * @returns {Number} the number of real roots found, or -1 if there are * infinite solutions * * @author Harikrishnan Gopalakrishnan */ solveCubic: function(a, b, c, d, roots, min, max) { var f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)), x, b1, c2, qd, q; if (f) { a *= f; b *= f; c *= f; d *= f; } function evaluate(x0) { x = x0; // Evaluate q, q', b1 and c2 at x var tmp = a * x; b1 = tmp + b; c2 = b1 * x + c; qd = (tmp + b1) * x + c2; q = c2 * x + d; } // If a or d is zero, we only need to solve a quadratic, so we set // the coefficients appropriately. if (abs(a) < EPSILON) { a = b; b1 = c; c2 = d; x = Infinity; } else if (abs(d) < EPSILON) { b1 = b; c2 = c; x = 0; } else { // Here onwards we iterate for the leftmost root. Proceed to // deflate the cubic into a quadratic (as a side effect to the // iteration) and solve the quadratic. evaluate(-(b / a) / 3); // Get a good initial approximation. var t = q / a, r = pow(abs(t), 1/3), s = t < 0 ? -1 : 1, td = -qd / a, // See Kahan's notes on why 1.324718*... works. rd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r, x0 = x - s * rd; if (x0 !== x) { do { evaluate(x0); // Newton's. Divide by 1 + MACHINE_EPSILON (1.000...002) // to avoid x0 crossing over a root. x0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON); } while (s * x0 > s * x); // Adjust the coefficients for the quadratic. if (abs(a) * x * x > abs(d / x)) { c2 = -d / x; b1 = (c2 - c) / x; } } } // The cubic has been deflated to a quadratic. var count = Numerical.solveQuadratic(a, b1, c2, roots, min, max), boundless = min == null; if (isFinite(x) && (count === 0 || count > 0 && x !== roots[0] && x !== roots[1]) && (boundless || x > min - EPSILON && x < max + EPSILON)) roots[count++] = boundless ? x : clamp(x, min, max); return count; } }; }; module.exports = Numerical; ================================================ FILE: package.json ================================================ { "name": "npms-analyzer", "version": "1.0.0", "description": "The analyzer behind npms.io", "main": "index.js", "bin": { "npms-analyzer": "cli.js" }, "bugs": "https://github.com/npms-io/npms-analyzer/issues/", "repository": { "type": "git", "url": "git://github.com/npms-io/npms-analyzer.git" }, "keywords": [ "npm", "npms", "npmsearch", "npmsearch", "search", "node", "module", "package" ], "author": "André Cruz ", "license": "MIT", "scripts": { "lint": "eslint --ignore-path .gitignore .", "test": "npm run download-test-fixtures && VCR_MODE=cache mocha", "test-cov": "npm run download-test-fixtures && VCR_MODE=cache istanbul cover --dir test/coverage _mocha && echo Coverage lies in test/coverage/lcov-report/index.html", "test-travis": "npm run download-test-fixtures && VCR_MODE=playback istanbul cover _mocha --report lcovonly", "download-test-fixtures": "test/bin/download-fixtures", "clean-test-fixtures": "date=\"$(date -R)\" && VCR_MODE=playback mocha && test/bin/clean-fixtures \"$date\"" }, "dependencies": { "amqplib": "^0.5.0", "bluebird": "^3.1.1", "camelcase-keys": "^5.0.0", "config": "^2.0.1", "couchdb-force": "^1.0.1", "couchdb-iterator": "^2.0.0", "david": "^11.0.0", "deep-compact": "^1.1.0", "detect-readme-badges": "^1.3.0", "detect-repo-changelog": "^1.0.1", "detect-repo-linters": "^3.1.1", "detect-repo-test-files": "^1.2.2", "elasticsearch": "^15.1.1", "fetch-coverage": "^2.0.1", "gh-issues-stats": "^3.0.0", "globby": "^8.0.1", "got": "^9.3.0", "hosted-git-info": "^2.1.4", "humanize-duration": "^3.6.1", "is-link-working": "^2.1.0", "is-regular-file": "^1.0.1", "json5": "^2.0.0", "load-json-file": "^5.1.0", "lodash": "^4.17.11", "moment": "^2.21.0", "nano": "^7.1.0", "normalize-package-data": "^2.3.6", "normalize-value": "~1.0.0", "obj-flatten": "^2.0.0", "obj-unflatten": "^1.0.0", "paper": "^0.11.5", "php-escape-shell": "^1.0.0", "pino": "^5.6.1", "promise-retry": "^1.0.1", "require-directory": "^2.1.1", "semver": "^5.1.0", "serialize-error": "^3.0.0", "spdx": "^0.5.0", "spdx-correct": "^3.0.0", "token-dealer": "^3.0.0", "weighted-mean": "^1.0.0", "which": "^1.2.8", "yargs": "^12.0.2" }, "optionalDependencies": { "heapdump": "^0.3.7" }, "devDependencies": { "@commitlint/cli": "^7.1.2", "@commitlint/config-conventional": "^7.1.2", "betray": "^1.3.0", "chai": "^4.1.2", "chronokinesis": "^2.0.0", "eslint": "^5.6.0", "eslint-config-moxy": "^6.1.1", "husky": "^1.0.0", "istanbul": "^0.4.2", "lint-staged": "^8.0.4", "mocha": "^5.2.0", "mock-require": "^3.0.2", "nock": "^10.0.0", "sepia": "^2.0.1" }, "husky": { "hooks": { "pre-commit": "lint-staged", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, "lint-staged": { "*.js": [ "eslint --fix", "git add" ] }, "commitlint": { "extends": [ "@commitlint/config-conventional" ] }, "engines": { "node": ">=8.6", "npm": ">=6" } } ================================================ FILE: test/.eslintrc.json ================================================ { "env": { "mocha": true } } ================================================ FILE: test/bin/download-fixtures ================================================ #!/bin/sh # Thanks Patrick Marques for helping with bash # Travis runs on a old linux distribution which has an old `wget` and certificates if [ -z "$TRAVIS" ]; then WGET_OPTS="--continue --timestamping --no-verbose --show-progress" else WGET_OPTS="--no-check-certificate --progress=dot:mega" fi DIR=test/fixtures/analyze/download/downloaded mkdir -p ${DIR} && cd ${DIR} wget ${WGET_OPTS} http://registry.npmjs.org/pickles2-contents-editor/-/pickles2-contents-editor-2.0.0-alpha.1.tgz wget ${WGET_OPTS} https://registry.npmjs.org/couchdb-iterator/-/couchdb-iterator-2.0.2.tgz wget ${WGET_OPTS} https://registry.npmjs.org/citong/-/citong-1.3.1.tgz ================================================ FILE: test/fixtures/analyze/collect/modules/0/data.json ================================================ { "name": "0", "dist-tags": { "latest": "0.0.0" }, "versions": { "0.0.0": { "name": "0", "version": "0.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "BSD-2-Clause", "_id": "0@0.0.0", "dist": { "shasum": "beabacb0a099c1dd215eaec15bb201318db7de6a", "tarball": "http://registry.npmjs.org/0/-/0-0.0.0.tgz" }, "_from": ".", "_npmVersion": "1.3.14", "_npmUser": { "name": "zolmeister", "email": "zolikahan@gmail.com" }, "maintainers": [ { "name": "zolmeister", "email": "zolikahan@gmail.com" } ] } }, "readme": "ERROR: No README data found!", "maintainers": [ { "name": "zolmeister", "email": "zolikahan@gmail.com" } ], "time": { "modified": "2014-06-17T06:38:43.495Z", "created": "2014-04-01T22:51:09.131Z", "0.0.0": "2014-04-01T22:51:11.871Z" }, "readmeFilename": "", "license": "BSD-2-Clause", "users": { "zolmeister": true } } ================================================ FILE: test/fixtures/analyze/collect/modules/0/expected-source.json ================================================ { "files": { "readmeSize": 0, "testsSize": 0 } } ================================================ FILE: test/fixtures/analyze/collect/modules/@bcoe%2fexpress-oauth-server/data.json ================================================ { "_id": "@bcoe/express-oauth-server", "_rev": "2-1eafc256421b304557faf317e9b16b3c", "name": "@bcoe/express-oauth-server", "description": "OAuth provider for express", "dist-tags": { "latest": "1.0.0" }, "versions": { "1.0.0": { "name": "@bcoe/express-oauth-server", "version": "1.0.0", "description": "OAuth provider for express", "main": "index.js", "scripts": { "lint": "jshint .", "test": "mocha --recursive test" }, "repository": { "type": "git", "url": "git://github.com/seegno/express-oauth-server.git" }, "keywords": [ "express", "oauth", "oauth2" ], "author": { "name": "Nuno Sousa", "email": "nfs@seegno.com" }, "license": "SEE LICENSE IN LICENSE", "dependencies": { "bluebird": "^3.0.5", "express": "^4.13.3", "oauth2-server": "^3.0.0-b2", "thenify": "^3.0.0" }, "devDependencies": { "body-parser": "^1.14.1", "jshint": "^2.8.0", "mocha": "^2.3.3", "should": "^7.1.0", "sinon": "^1.14.1", "supertest": "^0.15.0" }, "engines": { "node": ">=0.11" }, "gitHead": "c5216f4c4d37dd4962d8553b6c9ba2cf7c47b739", "bugs": { "url": "https://github.com/seegno/express-oauth-server/issues" }, "homepage": "https://github.com/seegno/express-oauth-server#readme", "_id": "@bcoe/express-oauth-server@1.0.0", "_shasum": "cd72c60a73533023ca397104274d6a7b6d7eecef", "_from": ".", "_npmVersion": "3.3.12", "_nodeVersion": "5.1.0", "_npmUser": { "name": "bcoe", "email": "ben@npmjs.com" }, "dist": { "shasum": "cd72c60a73533023ca397104274d6a7b6d7eecef", "tarball": "https://registry.npmjs.org/@bcoe/express-oauth-server/-/express-oauth-server-1.0.0.tgz" }, "maintainers": [ { "name": "bcoe", "email": "ben@npmjs.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/express-oauth-server-1.0.0.tgz_1459216830343_0.7240529225673527" }, "directories": {} } }, "readme": "# Express OAuth Server [![Build Status](https://travis-ci.org/seegno/express-oauth-server.png?branch=master)](https://travis-ci.org/seegno/express-oauth-server)\n\nComplete, compliant and well tested module for implementing an OAuth2 Server/Provider with [express](https://github.com/strongloop/express) in [node.js](http://nodejs.org/).\n\nThis is the express wrapper for [oauth2-server](https://github.com/thomseddon/node-oauth2-server).\n\n## Installation\n\n $ npm install @bcoe/express-oauth-server\n\n## Quick Start\n\nThe module provides two middlewares - one for granting tokens and another to authorise them. `@bcoe/express-oauth-server` and, consequently `oauth2-server`, expect the request body to be parsed already.\nThe following example uses `body-parser` but you may opt for an alternative library.\n\n```js\nvar bodyparser = require('body-parser');\nvar express = require('express');\nvar OAuthServer = require('@bcoe/express-oauth-server');\n\nvar app = express();\n\napp.oauth = new OAuthServer({\n model: {}, // See https://github.com/thomseddon/node-oauth2-server for specification\n});\n\napp.use(bodyParser.json());\napp.use(bodyparser.urlencoded({ extended: false }))\napp.use(app.oauth.authorise());\n\napp.use(function(req, res) {\n res.send('Secret area');\n});\n\napp.listen(3000);\n```\n", "maintainers": [ { "name": "bcoe", "email": "ben@npmjs.com" } ], "time": { "modified": "2016-03-29T02:00:30.766Z", "created": "2016-03-29T02:00:30.766Z", "1.0.0": "2016-03-29T02:00:30.766Z" }, "homepage": "https://github.com/seegno/express-oauth-server#readme", "keywords": [ "express", "oauth", "oauth2" ], "repository": { "type": "git", "url": "git://github.com/seegno/express-oauth-server.git" }, "author": { "name": "Nuno Sousa", "email": "nfs@seegno.com" }, "bugs": { "url": "https://github.com/seegno/express-oauth-server/issues" }, "license": "SEE LICENSE IN LICENSE", "readmeFilename": "Readme.md", "users": { "bcoe": true }, "_attachments": {} } ================================================ FILE: test/fixtures/analyze/collect/modules/@bcoe%2fexpress-oauth-server/expected-metadata.json ================================================ { "name": "@bcoe/express-oauth-server", "scope": "bcoe", "version": "1.0.0", "description": "OAuth provider for express", "keywords": [ "express", "oauth", "oauth2" ], "date": "2016-03-29T02:00:30.766Z", "readme": "# Express OAuth Server [![Build Status](https://travis-ci.org/seegno/express-oauth-server.png?branch=master)](https://travis-ci.org/seegno/express-oauth-server)\n\nComplete, compliant and well tested module for implementing an OAuth2 Server/Provider with [express](https://github.com/strongloop/express) in [node.js](http://nodejs.org/).\n\nThis is the express wrapper for [oauth2-server](https://github.com/thomseddon/node-oauth2-server).\n\n## Installation\n\n $ npm install @bcoe/express-oauth-server\n\n## Quick Start\n\nThe module provides two middlewares - one for granting tokens and another to authorise them. `@bcoe/express-oauth-server` and, consequently `oauth2-server`, expect the request body to be parsed already.\nThe following example uses `body-parser` but you may opt for an alternative library.\n\n```js\nvar bodyparser = require('body-parser');\nvar express = require('express');\nvar OAuthServer = require('@bcoe/express-oauth-server');\n\nvar app = express();\n\napp.oauth = new OAuthServer({\n model: {}, // See https://github.com/thomseddon/node-oauth2-server for specification\n});\n\napp.use(bodyParser.json());\napp.use(bodyparser.urlencoded({ extended: false }))\napp.use(app.oauth.authorise());\n\napp.use(function(req, res) {\n res.send('Secret area');\n});\n\napp.listen(3000);\n```", "publisher": { "username": "bcoe", "email": "ben@npmjs.com" }, "maintainers": [ { "username": "bcoe", "email": "ben@npmjs.com" } ], "author": { "name": "Nuno Sousa", "email": "nfs@seegno.com" }, "repository": { "type": "git", "url": "git://github.com/seegno/express-oauth-server.git" }, "links": { "bugs": "https://github.com/seegno/express-oauth-server/issues", "homepage": "https://github.com/seegno/express-oauth-server#readme", "npm": "https://www.npmjs.com/package/%40bcoe%2Fexpress-oauth-server", "repository": "https://github.com/seegno/express-oauth-server" }, "dependencies": { "bluebird": "^3.0.5", "express": "^4.13.3", "oauth2-server": "^3.0.0-b2", "thenify": "^3.0.0" }, "devDependencies": { "body-parser": "^1.14.1", "jshint": "^2.8.0", "mocha": "^2.3.3", "should": "^7.1.0", "sinon": "^1.14.1", "supertest": "^0.15.0" }, "releases": [ { "from": "2016-04-08T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z", "count": 0 }, { "count": 3, "from": "2016-02-08T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z" }, { "count": 3, "from": "2015-11-10T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z" }, { "count": 3, "from": "2015-05-09T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z" }, { "count": 3, "from": "2014-05-09T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z" } ], "hasTestScript": true } ================================================ FILE: test/fixtures/analyze/collect/modules/babel-jest/data.json ================================================ { "_id": "babel-jest", "_rev": "25-ad9120705c652660c3dd2ad91893a4b5", "name": "babel-jest", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "dist-tags": { "latest": "19.0.0", "test": "16.1.0-alpha.691b0e22", "canary": "18.5.0-alpha.7da3df39", "next": "19.1.0-alpha.eed82034" }, "versions": { "4.0.0": { "name": "babel-jest", "version": "4.0.0", "repository": { "type": "git", "url": "https://github.com/6to5/6to5-jest" }, "dependencies": { "babel-core": "^4.0.0" }, "gitHead": "ba2baff42ea88a767406e468f56d503a38af4877", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/6to5/6to5-jest/issues" }, "homepage": "https://github.com/6to5/6to5-jest", "_id": "babel-jest@4.0.0", "scripts": {}, "_shasum": "d0446db8535d0f338535a18a2f42384de745a10d", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "sebmck", "email": "sebmck@gmail.com" }, "maintainers": [ { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "d0446db8535d0f338535a18a2f42384de745a10d", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-4.0.0.tgz" }, "directories": {} }, "5.0.0": { "name": "babel-jest", "version": "5.0.0", "repository": { "type": "git", "url": "https://github.com/babel/babel-jest" }, "dependencies": { "babel-core": "^5.0.0" }, "gitHead": "d089380112f13a40f6fe60c7c679ac710f8c1711", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/babel/babel-jest/issues" }, "homepage": "https://github.com/babel/babel-jest", "_id": "babel-jest@5.0.0", "scripts": {}, "_shasum": "42bada7e4929378b291b844b05a82214a368d073", "_from": ".", "_npmVersion": "2.7.1", "_nodeVersion": "1.6.1", "_npmUser": { "name": "sebmck", "email": "sebmck@gmail.com" }, "maintainers": [ { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "42bada7e4929378b291b844b05a82214a368d073", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-5.0.0.tgz" }, "directories": {} }, "5.0.1": { "name": "babel-jest", "version": "5.0.1", "repository": { "type": "git", "url": "https://github.com/babel/babel-jest" }, "dependencies": { "babel-core": "^5.0.0" }, "gitHead": "7b4fb97ddba980ae729f1c1d2c6b43f8e7dedfff", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/babel/babel-jest/issues" }, "homepage": "https://github.com/babel/babel-jest", "_id": "babel-jest@5.0.1", "scripts": {}, "_shasum": "0cb0e5198116f2e3ef69e76b44c484521b4cff33", "_from": ".", "_npmVersion": "2.7.1", "_nodeVersion": "1.6.1", "_npmUser": { "name": "sebmck", "email": "sebmck@gmail.com" }, "maintainers": [ { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "0cb0e5198116f2e3ef69e76b44c484521b4cff33", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-5.0.1.tgz" }, "directories": {} }, "5.2.0": { "name": "babel-jest", "version": "5.2.0", "repository": { "type": "git", "url": "git+https://github.com/babel/babel-jest.git" }, "dependencies": { "babel-core": "^5.2.9" }, "gitHead": "6c603bec64ee2f199d667d73f622968b86d7f710", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/babel/babel-jest/issues" }, "homepage": "https://github.com/babel/babel-jest#readme", "_id": "babel-jest@5.2.0", "scripts": {}, "_shasum": "e6c25d875ab9ebf07b622cf80d106b79ba10b3b0", "_from": ".", "_npmVersion": "2.9.0", "_nodeVersion": "2.0.0", "_npmUser": { "name": "sebmck", "email": "sebmck@gmail.com" }, "maintainers": [ { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "e6c25d875ab9ebf07b622cf80d106b79ba10b3b0", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-5.2.0.tgz" }, "directories": {} }, "5.2.1": { "name": "babel-jest", "version": "5.2.1", "repository": { "type": "git", "url": "git+https://github.com/babel/babel-jest.git" }, "dependencies": { "babel-core": "^5.2.9" }, "gitHead": "803672241fbbe2b6dd2cb12dd808a2c584ca6aaa", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/babel/babel-jest/issues" }, "homepage": "https://github.com/babel/babel-jest#readme", "_id": "babel-jest@5.2.1", "scripts": {}, "_shasum": "4bbcddda5f2e1336c0d56c91332078a1a09c7299", "_from": ".", "_npmVersion": "2.9.0", "_nodeVersion": "2.0.0", "_npmUser": { "name": "sebmck", "email": "sebmck@gmail.com" }, "maintainers": [ { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "4bbcddda5f2e1336c0d56c91332078a1a09c7299", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-5.2.1.tgz" }, "directories": {} }, "5.3.0": { "name": "babel-jest", "version": "5.3.0", "repository": { "type": "git", "url": "git+https://github.com/babel/babel-jest.git" }, "dependencies": { "babel-core": "^5.5.7" }, "gitHead": "09e029f8d72147ec75e3331cd620604362edce06", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/babel/babel-jest/issues" }, "homepage": "https://github.com/babel/babel-jest#readme", "_id": "babel-jest@5.3.0", "scripts": {}, "_shasum": "d7bc3dc2b6f2b0f577ef6cdf80c096f94f02facb", "_from": ".", "_npmVersion": "2.9.0", "_nodeVersion": "2.0.0", "_npmUser": { "name": "sebmck", "email": "sebmck@gmail.com" }, "maintainers": [ { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "d7bc3dc2b6f2b0f577ef6cdf80c096f94f02facb", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-5.3.0.tgz" }, "directories": {} }, "6.0.0": { "name": "babel-jest", "version": "6.0.0", "repository": { "type": "git", "url": "git+https://github.com/babel/babel-jest.git" }, "dependencies": { "babel-core": "^6.0.0" }, "gitHead": "2e300924482eacf8f73a52d4a20933506b03f454", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/babel/babel-jest/issues" }, "homepage": "https://github.com/babel/babel-jest#readme", "_id": "babel-jest@6.0.0", "scripts": {}, "_shasum": "ada5653c0187fd8666a7801b94fca803b63ec12a", "_from": ".", "_npmVersion": "3.3.10", "_nodeVersion": "4.1.0", "_npmUser": { "name": "sebmck", "email": "sebmck@gmail.com" }, "dist": { "shasum": "ada5653c0187fd8666a7801b94fca803b63ec12a", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-6.0.0.tgz" }, "maintainers": [ { "name": "sebmck", "email": "sebmck@gmail.com" } ], "directories": {} }, "6.0.1": { "name": "babel-jest", "version": "6.0.1", "repository": { "type": "git", "url": "git+https://github.com/babel/babel-jest.git" }, "dependencies": { "babel-core": "^6.0.0" }, "gitHead": "7443a96c3b88005bebcb5b1a89af02f8e8f692b4", "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/babel/babel-jest/issues" }, "homepage": "https://github.com/babel/babel-jest#readme", "_id": "babel-jest@6.0.1", "scripts": {}, "_shasum": "313463ad2376d88e4b6b132644cbbcf7aa563221", "_from": ".", "_npmVersion": "3.3.10", "_nodeVersion": "4.1.0", "_npmUser": { "name": "sebmck", "email": "sebmck@gmail.com" }, "dist": { "shasum": "313463ad2376d88e4b6b132644cbbcf7aa563221", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-6.0.1.tgz" }, "maintainers": [ { "name": "sebmck", "email": "sebmck@gmail.com" } ], "directories": {} }, "9.0.0": { "name": "babel-jest", "version": "9.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^1.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@9.0.0", "scripts": {}, "_shasum": "98cfc048c56cec6a82cb4aeb9f25b0bb7e435d8e", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "98cfc048c56cec6a82cb4aeb9f25b0bb7e435d8e", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-9.0.0.tgz" }, "_npmOperationalInternal": { "host": "packages-13-west.internal.npmjs.com", "tmp": "tmp/babel-jest-9.0.0.tgz_1457138194296_0.7884515542536974" }, "directories": {} }, "9.0.1": { "name": "babel-jest", "version": "9.0.1", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^1.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@9.0.1", "scripts": {}, "_shasum": "9fc055322f7e324827c9b84d7984ef54a8370d2c", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "9fc055322f7e324827c9b84d7984ef54a8370d2c", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-9.0.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-9.0.1.tgz_1457294391640_0.9813627682160586" }, "directories": {} }, "9.0.2": { "name": "babel-jest", "version": "9.0.2", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^1.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@9.0.2", "scripts": {}, "_shasum": "324386c084b39957159fdea834efd282345632e4", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "324386c084b39957159fdea834efd282345632e4", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-9.0.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-9.0.2.tgz_1457486398031_0.671166701009497" }, "directories": {} }, "9.0.3": { "name": "babel-jest", "version": "9.0.3", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^1.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@9.0.3", "scripts": {}, "_shasum": "e9cb04620313672b6b589b612150dbedfd65002a", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "e9cb04620313672b6b589b612150dbedfd65002a", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-9.0.3.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-9.0.3.tgz_1457717498846_0.1265838195104152" }, "directories": {} }, "10.0.1": { "name": "babel-jest", "version": "10.0.1", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^10.0.1" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@10.0.1", "scripts": {}, "_shasum": "0428b8fef22eb86aef6b5fdf6e95e5681f61b3ff", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "0428b8fef22eb86aef6b5fdf6e95e5681f61b3ff", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-10.0.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-10.0.1.tgz_1459381457674_0.26688811648637056" }, "directories": {} }, "10.0.2": { "name": "babel-jest", "version": "10.0.2", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^10.0.2" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@10.0.2", "scripts": {}, "_shasum": "e957fab889413bb5ea93d145b2b72a95c6188cd9", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "e957fab889413bb5ea93d145b2b72a95c6188cd9", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-10.0.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-10.0.2.tgz_1460363058577_0.7996738702058792" }, "directories": {} }, "11.0.0": { "name": "babel-jest", "version": "11.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^11.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@11.0.0", "scripts": {}, "_shasum": "fd5983562fc4e63666f23981ac8d72b843bf8b90", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "sebmck", "email": "sebmck@gmail.com" } ], "dist": { "shasum": "fd5983562fc4e63666f23981ac8d72b843bf8b90", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-11.0.0.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-11.0.0.tgz_1460447786320_0.2524056036490947" }, "directories": {} }, "11.0.1": { "name": "babel-jest", "version": "11.0.1", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^11.0.1" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@11.0.1", "scripts": {}, "_shasum": "727c0cae13f2c646cf7c4a49e3f930ac5325cb5c", "_from": ".", "_npmVersion": "3.8.3", "_nodeVersion": "5.10.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "727c0cae13f2c646cf7c4a49e3f930ac5325cb5c", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-11.0.1.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "sebmck", "email": "sebmck@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-11.0.1.tgz_1460692946595_0.41531627788208425" }, "directories": {} }, "11.0.2": { "name": "babel-jest", "version": "11.0.2", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^11.0.2" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@11.0.2", "scripts": {}, "_shasum": "1a2f50deadfe3fc844dc4250c0f7df2bef756d6b", "_from": ".", "_npmVersion": "2.14.12", "_nodeVersion": "4.3.1", "_npmUser": { "name": "kentaromiura", "email": "kentaromiura@gmail.com" }, "dist": { "shasum": "1a2f50deadfe3fc844dc4250c0f7df2bef756d6b", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-11.0.2.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-11.0.2.tgz_1460952198774_0.24902582098729908" }, "directories": {} }, "12.0.0": { "name": "babel-jest", "version": "12.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.0.0", "scripts": {}, "_shasum": "7a5dfc5f1672550af9ff144d931bf71dc526bfaa", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "5.11.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "7a5dfc5f1672550af9ff144d931bf71dc526bfaa", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.0.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-12.0.0.tgz_1461734650085_0.15937253506854177" }, "directories": {} }, "12.0.1": { "name": "babel-jest", "version": "12.0.1", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.0.1" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.0.1", "scripts": {}, "_shasum": "9b6d687368e4223c281295616dcc1dc0f4dd817d", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "5.11.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "9b6d687368e4223c281295616dcc1dc0f4dd817d", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.0.1.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-12.0.1.tgz_1461751775789_0.07597908494062722" }, "directories": {} }, "12.0.2": { "name": "babel-jest", "version": "12.0.2", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.0.2" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.0.2", "scripts": {}, "_shasum": "8eca2bf52a6865a7384f5b3343c19bff986987ad", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "8eca2bf52a6865a7384f5b3343c19bff986987ad", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.0.2.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-12.0.2.tgz_1461817899086_0.895658076973632" }, "directories": {} }, "12.1.0": { "name": "babel-jest", "version": "12.1.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "src/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.1.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.1.0", "scripts": {}, "_shasum": "a939e15b5343075c05efc17215f046848711aea8", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "a939e15b5343075c05efc17215f046848711aea8", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.1.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-12.1.0.tgz_1463767563210_0.46476168604567647" }, "directories": {} }, "12.1.1-alpha.2935e14d": { "name": "babel-jest", "version": "12.1.1-alpha.2935e14d", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.1.1-alpha.2935e14d" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.1.1-alpha.2935e14d", "scripts": {}, "_shasum": "74f09b79b16618ab8906833b7814723de534a8e4", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "74f09b79b16618ab8906833b7814723de534a8e4", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.1.1-alpha.2935e14d.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-12.1.1-alpha.2935e14d.tgz_1466141592428_0.01578390528447926" }, "directories": {} }, "12.1.2-alpha.a482b15c": { "name": "babel-jest", "version": "12.1.2-alpha.a482b15c", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.1.2-alpha.a482b15c" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.1.2-alpha.a482b15c", "scripts": {}, "_shasum": "3da996163abe255c5843d62c7fce3f5062440816", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "3da996163abe255c5843d62c7fce3f5062440816", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.1.2-alpha.a482b15c.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-12.1.2-alpha.a482b15c.tgz_1466150283093_0.668202371802181" }, "directories": {} }, "12.1.2-alpha.6230044c": { "name": "babel-jest", "version": "12.1.2-alpha.6230044c", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.1.2-alpha.6230044c" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.1.2-alpha.6230044c", "scripts": {}, "_shasum": "551b5283e69ac0e2d3de6fead18bbb0090c465e5", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "551b5283e69ac0e2d3de6fead18bbb0090c465e5", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.1.2-alpha.6230044c.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-12.1.2-alpha.6230044c.tgz_1466536514418_0.9165508339647204" }, "directories": {} }, "12.1.3-alpha.6230044c": { "name": "babel-jest", "version": "12.1.3-alpha.6230044c", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.1.3-alpha.6230044c" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.1.3-alpha.6230044c", "scripts": {}, "_shasum": "919ee14a959534910513be67464a00ed934af970", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "919ee14a959534910513be67464a00ed934af970", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.1.3-alpha.6230044c.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-12.1.3-alpha.6230044c.tgz_1466539907309_0.7573212264105678" }, "directories": {} }, "12.1.4-alpha.a737c6e5": { "name": "babel-jest", "version": "12.1.4-alpha.a737c6e5", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.1.4-alpha.a737c6e5" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.1.4-alpha.a737c6e5", "scripts": {}, "_shasum": "8ab588c5d957574de19ca5604cfa86030343b5f6", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "8ab588c5d957574de19ca5604cfa86030343b5f6", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.1.4-alpha.a737c6e5.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-12.1.4-alpha.a737c6e5.tgz_1466566601619_0.14762199693359435" }, "directories": {} }, "12.1.5-alpha.b5322422": { "name": "babel-jest", "version": "12.1.5-alpha.b5322422", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^12.1.5-alpha.b5322422" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@12.1.5-alpha.b5322422", "scripts": {}, "_shasum": "1885f148a0c27c85d14c8eb62b55f52a5aa7f6c9", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "1885f148a0c27c85d14c8eb62b55f52a5aa7f6c9", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-12.1.5-alpha.b5322422.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-12.1.5-alpha.b5322422.tgz_1466577948071_0.724343832116574" }, "directories": {} }, "13.0.0": { "name": "babel-jest", "version": "13.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.0.0", "scripts": {}, "_shasum": "f008f43b4b1c9429c4cea3507d2cea14a1c79157", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "6.0.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "f008f43b4b1c9429c4cea3507d2cea14a1c79157", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.0.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-13.0.0.tgz_1466626696133_0.14600875950418413" }, "directories": {} }, "13.2.1": { "name": "babel-jest", "version": "13.2.1", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.2.1" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.2.1", "scripts": {}, "_shasum": "ee3c2b9dca85a412c198839573aa0f68beae5867", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "ee3c2b9dca85a412c198839573aa0f68beae5867", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.2.1.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-13.2.1.tgz_1467856774761_0.8069158168509603" }, "directories": {} }, "13.2.2": { "name": "babel-jest", "version": "13.2.2", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.2.2" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.2.2", "scripts": {}, "_shasum": "ab408ffb6b195fa08c919793d273eb88f55ffb4e", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "ab408ffb6b195fa08c919793d273eb88f55ffb4e", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.2.2.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-13.2.2.tgz_1467857580035_0.6548712470103055" }, "directories": {} }, "13.3.0-alpha.a44f195f": { "name": "babel-jest", "version": "13.3.0-alpha.a44f195f", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.3.0-alpha.a44f195f" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.3.0-alpha.a44f195f", "scripts": {}, "_shasum": "5443dc3d861382a56b3a510cb29ca4c13ff2fd76", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "5443dc3d861382a56b3a510cb29ca4c13ff2fd76", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.3.0-alpha.a44f195f.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-13.3.0-alpha.a44f195f.tgz_1468231007547_0.6965432425495237" }, "directories": {} }, "13.3.0-alpha.4eb0c908": { "name": "babel-jest", "version": "13.3.0-alpha.4eb0c908", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.3.0-alpha.4eb0c908" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.3.0-alpha.4eb0c908", "scripts": {}, "_shasum": "e40ded2f5678ecb75ab02c1bdec87195260a25c6", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "e40ded2f5678ecb75ab02c1bdec87195260a25c6", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.3.0-alpha.4eb0c908.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-13.3.0-alpha.4eb0c908.tgz_1468231471274_0.17214104207232594" }, "directories": {} }, "13.2.3-alpha.ffc7404b": { "name": "babel-jest", "version": "13.2.3-alpha.ffc7404b", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.2.3-alpha.ffc7404b" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.2.3-alpha.ffc7404b", "scripts": {}, "_shasum": "d5295506360cc8ec9c8d3e66b4352e44f5915645", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "d5295506360cc8ec9c8d3e66b4352e44f5915645", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.2.3-alpha.ffc7404b.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-13.2.3-alpha.ffc7404b.tgz_1468232399050_0.014298353111371398" }, "directories": {} }, "13.3.0-alpha.ffc7404b": { "name": "babel-jest", "version": "13.3.0-alpha.ffc7404b", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.3.0-alpha.ffc7404b" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.3.0-alpha.ffc7404b", "scripts": {}, "_shasum": "0830b65f4746b4b9e3f48a9a2f4d16a48459de3f", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "0830b65f4746b4b9e3f48a9a2f4d16a48459de3f", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.3.0-alpha.ffc7404b.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-13.3.0-alpha.ffc7404b.tgz_1468232409677_0.6667009205557406" }, "directories": {} }, "13.3.0-alpha.8b48d59e": { "name": "babel-jest", "version": "13.3.0-alpha.8b48d59e", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.3.0-alpha.8b48d59e" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.3.0-alpha.8b48d59e", "scripts": {}, "_shasum": "68b939173977b2745aa6ff1d43613cc542de26d3", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "68b939173977b2745aa6ff1d43613cc542de26d3", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.3.0-alpha.8b48d59e.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-13.3.0-alpha.8b48d59e.tgz_1468390444860_0.8340013008564711" }, "directories": {} }, "13.3.0-alpha.g8b48d59": { "name": "babel-jest", "version": "13.3.0-alpha.g8b48d59", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.3.0-alpha.g8b48d59" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.3.0-alpha.g8b48d59", "scripts": {}, "_shasum": "c8d59edf21437acd27bc1bb0e8c2d4f436f71008", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "c8d59edf21437acd27bc1bb0e8c2d4f436f71008", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.3.0-alpha.g8b48d59.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-13.3.0-alpha.g8b48d59.tgz_1468391977753_0.480694244382903" }, "directories": {} }, "13.4.0-alpha.d2632006": { "name": "babel-jest", "version": "13.4.0-alpha.d2632006", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^13.4.0-alpha.d2632006" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@13.4.0-alpha.d2632006", "scripts": {}, "_shasum": "999326d66d12cf7fe73c0f6b7c6a74a6887808e3", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "999326d66d12cf7fe73c0f6b7c6a74a6887808e3", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-13.4.0-alpha.d2632006.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-13.4.0-alpha.d2632006.tgz_1469609830850_0.7020669202320278" }, "directories": {} }, "14.0.0": { "name": "babel-jest", "version": "14.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^14.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.0.0", "scripts": {}, "_shasum": "5d4a28c66ad84858d45fadad26ed5f0cc503c627", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "5d4a28c66ad84858d45fadad26ed5f0cc503c627", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.0.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-14.0.0.tgz_1469610876744_0.02645887969993055" }, "directories": {} }, "14.0.1": { "name": "babel-jest", "version": "14.0.1", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^14.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.0.1", "scripts": {}, "_shasum": "f61ef7283ca832145190b0410a481e080e722788", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "f61ef7283ca832145190b0410a481e080e722788", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.0.1.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-14.0.1.tgz_1469784939187_0.25041031278669834" }, "directories": {} }, "14.0.2": { "name": "babel-jest", "version": "14.0.2", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^14.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.0.2", "scripts": {}, "_shasum": "e330d8596e1bf6db01179e1e80876eab2817d7f7", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "e330d8596e1bf6db01179e1e80876eab2817d7f7", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.0.2.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-14.0.2.tgz_1469785707926_0.03387196711264551" }, "directories": {} }, "14.1.0": { "name": "babel-jest", "version": "14.1.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-preset-jest": "^14.1.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.1.0", "scripts": {}, "_shasum": "29a20bfe8b3c4789a620162a1c52e7db4fb500e9", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "29a20bfe8b3c4789a620162a1c52e7db4fb500e9", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.1.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-14.1.0.tgz_1470047189280_0.6144244994502515" }, "directories": {} }, "14.2.0-alpha.ca8bfb6e": { "name": "babel-jest", "version": "14.2.0-alpha.ca8bfb6e", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^1.1.0", "babel-preset-jest": "^14.2.0-alpha.ca8bfb6e" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.2.0-alpha.ca8bfb6e", "scripts": {}, "_shasum": "59b9ba4a0493246802e9e15e2785f457b1e82c22", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "59b9ba4a0493246802e9e15e2785f457b1e82c22", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.2.0-alpha.ca8bfb6e.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-14.2.0-alpha.ca8bfb6e.tgz_1471287273543_0.34843858052045107" }, "directories": {} }, "14.2.1-alpha.e21d71a4": { "name": "babel-jest", "version": "14.2.1-alpha.e21d71a4", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^1.1.0", "babel-preset-jest": "^14.2.1-alpha.e21d71a4" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.2.1-alpha.e21d71a4", "scripts": {}, "_shasum": "4cee0c1a537261d9ee663c1f2a3a100d0a4b0fb8", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "4cee0c1a537261d9ee663c1f2a3a100d0a4b0fb8", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.2.1-alpha.e21d71a4.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-14.2.1-alpha.e21d71a4.tgz_1471382314002_0.003589335596188903" }, "directories": {} }, "14.2.2-alpha.22bd3c33": { "name": "babel-jest", "version": "14.2.2-alpha.22bd3c33", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^1.1.0", "babel-preset-jest": "^14.2.2-alpha.22bd3c33" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.2.2-alpha.22bd3c33", "scripts": {}, "_shasum": "760497ca86ea8f365efd83bceccc9ac4b4d7af6c", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "760497ca86ea8f365efd83bceccc9ac4b4d7af6c", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.2.2-alpha.22bd3c33.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-14.2.2-alpha.22bd3c33.tgz_1471388086069_0.864485016092658" }, "directories": {} }, "14.3.0-alpha.d13c163e": { "name": "babel-jest", "version": "14.3.0-alpha.d13c163e", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^14.3.0-alpha.d13c163e" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.3.0-alpha.d13c163e", "scripts": {}, "_shasum": "da47291312c339ecc95acd4170b9ce083c10ed47", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "da47291312c339ecc95acd4170b9ce083c10ed47", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.3.0-alpha.d13c163e.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-14.3.0-alpha.d13c163e.tgz_1471552521738_0.557226562872529" }, "directories": {} }, "14.3.1-alpha.410cb91a": { "name": "babel-jest", "version": "14.3.1-alpha.410cb91a", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^14.3.1-alpha.410cb91a" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.3.1-alpha.410cb91a", "scripts": {}, "_shasum": "4461e276a959be8cdf3b5d38076858028309aef3", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.5.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "4461e276a959be8cdf3b5d38076858028309aef3", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.3.1-alpha.410cb91a.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-14.3.1-alpha.410cb91a.tgz_1472593923251_0.5713954831007868" }, "directories": {} }, "14.3.2-alpha.83c25417": { "name": "babel-jest", "version": "14.3.2-alpha.83c25417", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^14.3.2-alpha.83c25417" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@14.3.2-alpha.83c25417", "scripts": {}, "_shasum": "427341757b3758b54d24ea5d942cf5f8083d7303", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.5.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "427341757b3758b54d24ea5d942cf5f8083d7303", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-14.3.2-alpha.83c25417.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/babel-jest-14.3.2-alpha.83c25417.tgz_1472669431086_0.36772308428771794" }, "directories": {} }, "15.0.0": { "name": "babel-jest", "version": "15.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^15.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@15.0.0", "scripts": {}, "_shasum": "6a9e2e3999f241383db9ab1e2ef6704401d74242", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.5.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "6a9e2e3999f241383db9ab1e2ef6704401d74242", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-15.0.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-15.0.0.tgz_1472669723893_0.5474627567455173" }, "directories": {} }, "15.2.0-alpha.c681f819": { "name": "babel-jest", "version": "15.2.0-alpha.c681f819", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^15.2.0-alpha.c681f819" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@15.2.0-alpha.c681f819", "scripts": {}, "_shasum": "3b4c63b7c3c86278e49a16e8887c1d91a62bc01e", "_from": ".", "_npmVersion": "3.10.7", "_nodeVersion": "6.7.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "3b4c63b7c3c86278e49a16e8887c1d91a62bc01e", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-15.2.0-alpha.c681f819.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-15.2.0-alpha.c681f819.tgz_1475139733700_0.08679252048023045" }, "directories": {} }, "16.0.0": { "name": "babel-jest", "version": "16.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^16.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@16.0.0", "scripts": {}, "_shasum": "348729aea6d624a4774b8a934d07a40dd2cfd640", "_from": ".", "_npmVersion": "3.10.7", "_nodeVersion": "6.7.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "348729aea6d624a4774b8a934d07a40dd2cfd640", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-16.0.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-16.0.0.tgz_1475483907951_0.3470273388084024" }, "directories": {} }, "16.1.0-alpha.691b0e22": { "name": "babel-jest", "version": "16.1.0-alpha.691b0e22", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^16.1.0-alpha.691b0e22" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@16.1.0-alpha.691b0e22", "scripts": {}, "_shasum": "1d1eba748a1c01e88a535685bf6320167c4f6b24", "_from": ".", "_npmVersion": "3.10.8", "_nodeVersion": "6.9.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "1d1eba748a1c01e88a535685bf6320167c4f6b24", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-16.1.0-alpha.691b0e22.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-16.1.0-alpha.691b0e22.tgz_1477639644625_0.3524253903888166" }, "directories": {} }, "17.0.0": { "name": "babel-jest", "version": "17.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^16.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@17.0.0", "scripts": {}, "_shasum": "4dbee762eb2f2ca77c4dacc17eb61f38157b0f01", "_from": ".", "_npmVersion": "3.10.8", "_nodeVersion": "6.9.1", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "4dbee762eb2f2ca77c4dacc17eb61f38157b0f01", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-17.0.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/babel-jest-17.0.0.tgz_1478614341830_0.5385184471961111" }, "directories": {} }, "17.0.2": { "name": "babel-jest", "version": "17.0.2", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^2.0.0", "babel-preset-jest": "^17.0.2" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@17.0.2", "scripts": {}, "_shasum": "8d51e0d03759713c331f108eb0b2eaa4c6efff74", "_from": ".", "_npmVersion": "3.10.9", "_nodeVersion": "7.1.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "8d51e0d03759713c331f108eb0b2eaa4c6efff74", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-17.0.2.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-17.0.2.tgz_1479170355690_0.5522983237169683" }, "directories": {} }, "18.0.0": { "name": "babel-jest", "version": "18.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^3.0.0", "babel-preset-jest": "^18.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@18.0.0", "scripts": {}, "_shasum": "17ebba8cb3285c906d859e8707e4e79795fb65e3", "_from": ".", "_npmVersion": "3.10.9", "_nodeVersion": "7.2.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "17ebba8cb3285c906d859e8707e4e79795fb65e3", "tarball": "http://registry.npmjs.org/babel-jest/-/babel-jest-18.0.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/babel-jest-18.0.0.tgz_1481801061886_0.42061222274787724" }, "directories": {} }, "18.5.0-alpha.7da3df39": { "name": "babel-jest", "version": "18.5.0-alpha.7da3df39", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^4.0.0", "babel-preset-jest": "^18.5.0-alpha.7da3df39" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@18.5.0-alpha.7da3df39", "scripts": {}, "_shasum": "f69864a0ea3f99e81065845bf9b12ed12590f576", "_from": ".", "_npmVersion": "4.1.2", "_nodeVersion": "7.5.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "f69864a0ea3f99e81065845bf9b12ed12590f576", "tarball": "https://registry.npmjs.org/babel-jest/-/babel-jest-18.5.0-alpha.7da3df39.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/babel-jest-18.5.0-alpha.7da3df39.tgz_1487350649290_0.8689893304836005" }, "directories": {} }, "19.0.0": { "name": "babel-jest", "version": "19.0.0", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^4.0.0", "babel-preset-jest": "^19.0.0" }, "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@19.0.0", "scripts": {}, "_shasum": "59323ced99a3a84d359da219ca881074ffc6ce3f", "_from": ".", "_npmVersion": "4.1.2", "_nodeVersion": "7.5.0", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "59323ced99a3a84d359da219ca881074ffc6ce3f", "tarball": "https://registry.npmjs.org/babel-jest/-/babel-jest-19.0.0.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "kentaromiura", "email": "kentaromiura@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/babel-jest-19.0.0.tgz_1487669409076_0.22902131639420986" }, "directories": {} }, "19.1.0-alpha.eed82034": { "name": "babel-jest", "description": "Jest plugin to use babel for transformation.", "version": "19.1.0-alpha.eed82034", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "license": "BSD-3-Clause", "main": "build/index.js", "dependencies": { "babel-core": "^6.0.0", "babel-plugin-istanbul": "^4.0.0", "babel-preset-jest": "^19.1.0-alpha.eed82034" }, "bugs": { "url": "https://github.com/facebook/jest/issues" }, "homepage": "https://github.com/facebook/jest#readme", "_id": "babel-jest@19.1.0-alpha.eed82034", "scripts": {}, "_shasum": "f830e6095a30555171f413d287942f2bc374e54f", "_from": ".", "_npmVersion": "4.1.2", "_nodeVersion": "7.7.2", "_npmUser": { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, "dist": { "shasum": "f830e6095a30555171f413d287942f2bc374e54f", "tarball": "https://registry.npmjs.org/babel-jest/-/babel-jest-19.1.0-alpha.eed82034.tgz" }, "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/babel-jest-19.1.0-alpha.eed82034.tgz_1489711290717_0.018463894492015243" }, "directories": {} } }, "readme": "# babel-jest\n\n[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin\n\n## Usage\n\nIf you are already using `jest-cli`, just add `babel-jest` and it will automatically compile JavaScript code using babel.\n\n```\nnpm install --save babel-jest\n```\n\nIf you would like to write your own preprocessor, uninstall and delete babel-jest and set the [config.scriptPreprocessor](http://facebook.github.io/jest/docs/api.html#scriptpreprocessor-string) option to your preprocessor.\n", "maintainers": [ { "name": "cpojer", "email": "christoph.pojer@gmail.com" }, { "name": "dmitriiabramov", "email": "dmitrii@rheia.us" }, { "name": "fb", "email": "opensource+npm@fb.com" } ], "time": { "modified": "2017-03-17T00:44:00.169Z", "created": "2015-02-15T14:33:26.881Z", "4.0.0": "2015-02-15T14:33:26.881Z", "5.0.0": "2015-04-02T18:53:45.258Z", "5.0.1": "2015-04-03T03:43:38.863Z", "5.2.0": "2015-05-05T09:24:59.880Z", "5.2.1": "2015-06-12T19:46:45.179Z", "5.3.0": "2015-06-13T17:43:29.118Z", "6.0.0": "2015-11-07T00:47:22.524Z", "6.0.1": "2015-11-08T13:38:02.569Z", "9.0.0": "2016-03-05T00:36:35.698Z", "9.0.1": "2016-03-06T19:59:53.094Z", "9.0.2": "2016-03-09T01:20:00.495Z", "9.0.3": "2016-03-11T17:31:39.290Z", "10.0.1": "2016-03-30T23:44:18.155Z", "10.0.2": "2016-04-11T08:24:19.191Z", "11.0.0": "2016-04-12T07:56:29.127Z", "11.0.1": "2016-04-15T04:02:29.928Z", "11.0.2": "2016-04-18T04:03:20.668Z", "12.0.0": "2016-04-27T05:24:10.519Z", "12.0.1": "2016-04-27T10:09:36.256Z", "12.0.2": "2016-04-28T04:31:39.647Z", "12.1.0": "2016-05-20T18:06:05.304Z", "12.1.1-alpha.2935e14d": "2016-06-17T05:33:12.900Z", "12.1.2-alpha.a482b15c": "2016-06-17T07:58:03.580Z", "12.1.2-alpha.6230044c": "2016-06-21T19:15:17.344Z", "12.1.3-alpha.6230044c": "2016-06-21T20:11:50.964Z", "12.1.4-alpha.a737c6e5": "2016-06-22T03:36:44.652Z", "12.1.5-alpha.b5322422": "2016-06-22T06:45:48.725Z", "13.0.0": "2016-06-22T20:18:19.768Z", "13.2.1": "2016-07-07T01:59:35.975Z", "13.2.2": "2016-07-07T02:13:02.164Z", "13.3.0-alpha.a44f195f": "2016-07-11T09:56:50.559Z", "13.3.0-alpha.4eb0c908": "2016-07-11T10:04:34.484Z", "13.2.3-alpha.ffc7404b": "2016-07-11T10:19:59.581Z", "13.3.0-alpha.ffc7404b": "2016-07-11T10:20:10.344Z", "13.3.0-alpha.8b48d59e": "2016-07-13T06:14:05.429Z", "13.3.0-alpha.g8b48d59": "2016-07-13T06:39:38.666Z", "13.4.0-alpha.d2632006": "2016-07-27T08:57:11.197Z", "14.0.0": "2016-07-27T09:14:37.002Z", "14.0.1": "2016-07-29T09:35:44.374Z", "14.0.2": "2016-07-29T09:48:28.169Z", "14.1.0": "2016-08-01T10:26:31.110Z", "14.2.0-alpha.ca8bfb6e": "2016-08-15T18:54:35.424Z", "14.2.1-alpha.e21d71a4": "2016-08-16T21:18:35.968Z", "14.2.2-alpha.22bd3c33": "2016-08-16T22:54:51.851Z", "14.3.0-alpha.d13c163e": "2016-08-18T20:35:23.562Z", "14.3.1-alpha.410cb91a": "2016-08-30T21:52:04.834Z", "14.3.2-alpha.83c25417": "2016-08-31T18:50:32.997Z", "15.0.0": "2016-08-31T18:55:25.727Z", "15.2.0-alpha.c681f819": "2016-09-29T09:02:13.949Z", "16.0.0": "2016-10-03T08:38:28.166Z", "16.1.0-alpha.691b0e22": "2016-10-28T07:27:24.873Z", "17.0.0": "2016-11-08T14:12:23.784Z", "17.0.2": "2016-11-15T00:39:15.916Z", "18.0.0": "2016-12-15T11:24:22.637Z", "18.5.0-alpha.7da3df39": "2017-02-17T16:57:29.902Z", "19.0.0": "2017-02-21T09:30:10.899Z", "19.1.0-alpha.eed82034": "2017-03-17T00:41:32.568Z" }, "homepage": "https://github.com/facebook/jest#readme", "repository": { "type": "git", "url": "git+https://github.com/facebook/jest.git" }, "bugs": { "url": "https://github.com/facebook/jest/issues" }, "readmeFilename": "README.md", "users": { "junjiansyu": true, "leonardorb": true }, "license": "BSD-3-Clause" } ================================================ FILE: test/fixtures/analyze/collect/modules/babel-jest/expected-source.json ================================================ { "files": { "readmeSize": 803, "testsSize": 783379, "hasNpmIgnore": true, "hasChangelog": true }, "badges": [ { "info": { "service": "circleci", "type": "build" }, "urls": { "content": "https://img.shields.io/circleci/project/github/facebook/jest.json", "original": "https://circleci.com/gh/facebook/jest.svg?style=shield", "service": "https://circleci.com/gh/facebook/jest.svg", "shields": "https://img.shields.io/circleci/project/github/facebook/jest.svg" } }, { "urls": { "original": "https://travis-ci.org/facebook/jest.svg?branch=master", "service": "https://api.travis-ci.org/facebook/jest.svg?branch=master", "shields": "https://img.shields.io/travis/facebook/jest/master.svg", "content": "https://img.shields.io/travis/facebook/jest/master.json" }, "info": { "service": "travis", "type": "build", "modifiers": { "branch": "master" } } }, { "info": { "service": "appveyor", "type": "build" }, "urls": { "content": "https://img.shields.io/appveyor/ci/8n38o44k585hhvhd/branch/master.json", "original": "https://ci.appveyor.com/api/projects/status/8n38o44k585hhvhd/branch/master?svg=true", "service": "https://ci.appveyor.com/api/projects/status/8n38o44k585hhvhd/branch/master", "shields": "https://img.shields.io/appveyor/ci/8n38o44k585hhvhd/branch/master.svg" } } ], "linters": [ "eslint", "prettier" ], "coverage": 0.64 } ================================================ FILE: test/fixtures/analyze/collect/modules/backoff/data.json ================================================ { "_id": "backoff", "_rev": "2-c1f0bcee39d50baac252504546d7d13d", "name": "backoff", "description": "Fibonacci and exponential backoffs.", "dist-tags": { "latest": "2.5.0" }, "versions": { "0.0.1": { "name": "backoff", "description": "Exponential backoff implementation.", "version": "0.0.1", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "exponential" ], "repository": { "type": "git", "url": "git://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.3", "nodeunit": "0.7" }, "scripts": { "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "main": "backoff.js", "_npmUser": { "name": "Mathieu", "email": "turcotte.mat@gmail.com" }, "_id": "backoff@0.0.1", "dependencies": { }, "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.4", "_nodeVersion": "v0.6.12", "_defaultsLoaded": true, "dist": { "shasum": "a2be0d56d658e9297090c4095763c3c6138aff08", "tarball": "http://registry.npmjs.org/backoff/-/backoff-0.0.1.tgz" }, "maintainers": [ { "name": "Mathieu", "email": "turcotte.mat@gmail.com" } ] }, "0.0.2": { "name": "backoff", "description": "Exponential backoff implementation.", "version": "0.0.2", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "exponential" ], "repository": { "type": "git", "url": "git://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.3", "nodeunit": "0.7" }, "scripts": { "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "main": "backoff.js", "_npmUser": { "name": "Mathieu", "email": "turcotte.mat@gmail.com" }, "_id": "backoff@0.0.2", "dependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.0-beta-4", "_nodeVersion": "v0.6.6", "_defaultsLoaded": true, "dist": { "shasum": "08b4cb64931b0b069f3d5ca8f8e8504fb0058239", "tarball": "http://registry.npmjs.org/backoff/-/backoff-0.0.2.tgz" }, "maintainers": [ { "name": "Mathieu", "email": "turcotte.mat@gmail.com" } ] }, "0.0.3": { "name": "backoff", "description": "Exponential backoff implementation.", "version": "0.0.3", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "exponential" ], "repository": { "type": "git", "url": "git://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.3", "nodeunit": "0.7", "jshint": "0.7" }, "scripts": { "pretest": "node_modules/jshint/bin/hint *.js tests/*.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "main": "backoff.js", "_npmUser": { "name": "Mathieu", "email": "turcotte.mat@gmail.com" }, "_id": "backoff@0.0.3", "dependencies": { }, "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.21", "_nodeVersion": "v0.6.17", "_defaultsLoaded": true, "dist": { "shasum": "8f66d0d5d4138a4a10b6db80e10d1265f93b97b6", "tarball": "http://registry.npmjs.org/backoff/-/backoff-0.0.3.tgz" }, "maintainers": [ { "name": "Mathieu", "email": "turcotte.mat@gmail.com" } ] }, "0.1.0": { "name": "backoff", "description": "Fibonnaci backoff implementation.", "version": "0.1.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "fibonnaci" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.4", "nodeunit": "0.7", "jshint": "0.7" }, "scripts": { "pretest": "node_modules/jshint/bin/hint *.js tests/*.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "main": "backoff.js", "_id": "backoff@0.1.0", "dist": { "shasum": "84a21e7c1c305743705a49981aec6b0f0d8bd8f2", "tarball": "http://registry.npmjs.org/backoff/-/backoff-0.1.0.tgz" }, "maintainers": [ { "name": "Mathieu", "email": "turcotte.mat@gmail.com" } ] }, "0.2.0": { "name": "backoff", "description": "Exponential and Fibonnaci backoffs.", "version": "0.2.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "fibonnaci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.4", "nodeunit": "0.7", "jshint": "0.7" }, "scripts": { "pretest": "node_modules/jshint/bin/hint lib/*.js lib/strategy/*.js tests/*.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@0.2.0", "dist": { "shasum": "1abbe9393a28dd35d55c5403ec132472136b21ce", "tarball": "http://registry.npmjs.org/backoff/-/backoff-0.2.0.tgz" }, "maintainers": [ { "name": "Mathieu", "email": "turcotte.mat@gmail.com" } ] }, "0.2.1": { "name": "backoff", "description": "Exponential and Fibonacci backoffs.", "version": "0.2.1", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.4", "nodeunit": "0.7", "jshint": "0.7" }, "scripts": { "pretest": "node_modules/jshint/bin/hint lib/*.js lib/strategy/*.js tests/*.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@0.2.1", "dist": { "shasum": "affea29debd29fe48680019b9967e84c636e799d", "tarball": "http://registry.npmjs.org/backoff/-/backoff-0.2.1.tgz" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "0.3.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "0.3.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.4", "nodeunit": "0.7", "jshint": "0.7" }, "scripts": { "pretest": "node_modules/jshint/bin/hint lib/*.js lib/strategy/*.js tests/*.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@0.3.0", "dist": { "shasum": "d63cbab90b0475d3ccf2fac929e11af963a96608", "tarball": "http://registry.npmjs.org/backoff/-/backoff-0.3.0.tgz" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "1.0.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "1.0.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.4", "nodeunit": "0.7", "jshint": "0.7" }, "scripts": { "pretest": "node_modules/jshint/bin/hint lib/*.js lib/strategy/*.js tests/*.js examples/*.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@1.0.0", "dist": { "shasum": "00982f78158ec6d03f99693ec0fb5f7b2ad1e28e", "tarball": "http://registry.npmjs.org/backoff/-/backoff-1.0.0.tgz" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "1.1.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "1.1.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.4", "nodeunit": "0.7", "jshint": "0.9" }, "scripts": { "pretest": "node_modules/jshint/bin/hint lib/ lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@1.1.0", "dist": { "shasum": "7160ba2416caab0b9ce4f36981283a0ac25a44fe", "tarball": "http://registry.npmjs.org/backoff/-/backoff-1.1.0.tgz" }, "_npmVersion": "1.1.59", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "1.2.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "1.2.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.4", "nodeunit": "0.7", "jshint": "0.9.0" }, "scripts": { "pretest": "node_modules/jshint/bin/hint lib/ lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@1.2.0", "dist": { "shasum": "9e4935da1f42cb9d7c44184765c127f4602370d9", "tarball": "http://registry.npmjs.org/backoff/-/backoff-1.2.0.tgz" }, "_npmVersion": "1.1.62", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "1.2.1": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "1.2.1", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.4", "nodeunit": "0.7", "jshint": "0.9.0" }, "scripts": { "pretest": "node_modules/jshint/bin/hint lib/ lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@1.2.1", "dist": { "shasum": "06baefd31bef5624bd4223cb7beb73f92a8e1ba2", "tarball": "http://registry.npmjs.org/backoff/-/backoff-1.2.1.tgz" }, "_npmVersion": "1.1.62", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "2.0.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "2.0.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.5.2", "nodeunit": "0.7", "jshint": "0.9.0" }, "scripts": { "pretest": "node_modules/jshint/bin/hint lib/ lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@2.0.0", "dist": { "shasum": "b4394776f91c28a361049071dd891c00394fd805", "tarball": "http://registry.npmjs.org/backoff/-/backoff-2.0.0.tgz" }, "_npmVersion": "1.1.62", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "2.1.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "2.1.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.5.2", "nodeunit": "0.7", "jshint": "1.1.0" }, "scripts": { "pretest": "node_modules/jshint/bin/jshint lib/ lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@2.1.0", "dist": { "shasum": "19b4e9f9fb75c122ad7bb1c6c376d6085d43ea09", "tarball": "http://registry.npmjs.org/backoff/-/backoff-2.1.0.tgz" }, "_from": ".", "_npmVersion": "1.2.14", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "2.2.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "2.2.0", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.5.2", "nodeunit": "0.7", "jshint": "1.1.0" }, "scripts": { "pretest": "node_modules/jshint/bin/jshint lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@2.2.0", "dist": { "shasum": "bae0026ef445580b582bffa7201068bf101691cb", "tarball": "http://registry.npmjs.org/backoff/-/backoff-2.2.0.tgz" }, "_npmVersion": "1.1.62", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "2.3.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "2.3.0", "license": "MIT", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "devDependencies": { "sinon": "1.7", "nodeunit": "0.8", "jshint": "2.0" }, "scripts": { "pretest": "node_modules/jshint/bin/jshint lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "_id": "backoff@2.3.0", "dist": { "shasum": "ee7c7e38093f92e472859db635e7652454fc21ea", "tarball": "http://registry.npmjs.org/backoff/-/backoff-2.3.0.tgz" }, "_from": ".", "_npmVersion": "1.2.14", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "2.4.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "2.4.0", "license": "MIT", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "dependencies": { "precond": "0.2" }, "devDependencies": { "sinon": "1.10", "nodeunit": "0.9" }, "scripts": { "docco": "docco lib/*.js lib/strategy/* index.js", "pretest": "jshint lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "file": [ "index.js", "lib" ], "bugs": { "url": "https://github.com/MathieuTurcotte/node-backoff/issues" }, "_id": "backoff@2.4.0", "dist": { "shasum": "c5a2888e784a61e18d5cba310ef0f521fb107d4f", "tarball": "http://registry.npmjs.org/backoff/-/backoff-2.4.0.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "2.4.1": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "2.4.1", "license": "MIT", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "dependencies": { "precond": "0.2" }, "devDependencies": { "sinon": "1.10", "nodeunit": "0.9" }, "scripts": { "docco": "docco lib/*.js lib/strategy/* index.js", "pretest": "jshint lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "files": [ "index.js", "lib", "tests" ], "bugs": { "url": "https://github.com/MathieuTurcotte/node-backoff/issues" }, "_id": "backoff@2.4.1", "dist": { "shasum": "2f68c50e0dd789dbefe24200a62efb04d2456d68", "tarball": "http://registry.npmjs.org/backoff/-/backoff-2.4.1.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ] }, "2.5.0": { "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "2.5.0", "license": "MIT", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "repository": { "type": "git", "url": "git+https://github.com/MathieuTurcotte/node-backoff.git" }, "dependencies": { "precond": "0.2" }, "devDependencies": { "sinon": "1.10", "nodeunit": "0.9" }, "scripts": { "docco": "docco lib/*.js lib/strategy/* index.js", "pretest": "jshint lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "files": [ "index.js", "lib", "tests" ], "gitHead": "811118fd1f89e9ca4e6b67292b9ef5da6c4f60e9", "bugs": { "url": "https://github.com/MathieuTurcotte/node-backoff/issues" }, "homepage": "https://github.com/MathieuTurcotte/node-backoff#readme", "_id": "backoff@2.5.0", "_shasum": "f616eda9d3e4b66b8ca7fca79f695722c5f8e26f", "_from": ".", "_npmVersion": "2.14.12", "_nodeVersion": "4.2.4", "_npmUser": { "name": "mathieu", "email": "turcotte.mat@gmail.com" }, "dist": { "shasum": "f616eda9d3e4b66b8ca7fca79f695722c5f8e26f", "tarball": "http://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" }, "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-13-west.internal.npmjs.com", "tmp": "tmp/backoff-2.5.0.tgz_1457796071422_0.5366517049260437" } } }, "readme": "# Backoff for Node.js\n[![Build Status](https://secure.travis-ci.org/MathieuTurcotte/node-backoff.png?branch=master)](http://travis-ci.org/MathieuTurcotte/node-backoff)\n[![NPM version](https://badge.fury.io/js/backoff.png)](http://badge.fury.io/js/backoff)\n\nFibonacci and exponential backoffs for Node.js.\n\n## Installation\n\n```\nnpm install backoff\n```\n\n## Unit tests\n\n```\nnpm test\n```\n\n## Usage\n\n### Object Oriented\n\nThe usual way to instantiate a new `Backoff` object is to use one predefined\nfactory method: `backoff.fibonacci([options])`, `backoff.exponential([options])`.\n\n`Backoff` inherits from `EventEmitter`. When a backoff starts, a `backoff`\nevent is emitted and, when a backoff ends, a `ready` event is emitted.\nHandlers for these two events are called with the current backoff number and\ndelay.\n\n``` js\nvar backoff = require('backoff');\n\nvar fibonacciBackoff = backoff.fibonacci({\n randomisationFactor: 0,\n initialDelay: 10,\n maxDelay: 300\n});\n\nfibonacciBackoff.failAfter(10);\n\nfibonacciBackoff.on('backoff', function(number, delay) {\n // Do something when backoff starts, e.g. show to the\n // user the delay before next reconnection attempt.\n console.log(number + ' ' + delay + 'ms');\n});\n\nfibonacciBackoff.on('ready', function(number, delay) {\n // Do something when backoff ends, e.g. retry a failed\n // operation (DNS lookup, API call, etc.). If it fails\n // again then backoff, otherwise reset the backoff\n // instance.\n fibonacciBackoff.backoff();\n});\n\nfibonacciBackoff.on('fail', function() {\n // Do something when the maximum number of backoffs is\n // reached, e.g. ask the user to check its connection.\n console.log('fail');\n});\n\nfibonacciBackoff.backoff();\n```\n\nThe previous example would print the following.\n\n```\n0 10ms\n1 10ms\n2 20ms\n3 30ms\n4 50ms\n5 80ms\n6 130ms\n7 210ms\n8 300ms\n9 300ms\nfail\n```\n\nNote that `Backoff` objects are meant to be instantiated once and reused\nseveral times by calling `reset` after a successful \"retry\".\n\n### Functional\n\nIt's also possible to avoid some boilerplate code when invoking an asynchronous\nfunction in a backoff loop by using `backoff.call(fn, [args, ...], callback)`.\n\nTypical usage looks like the following.\n\n``` js\nvar call = backoff.call(get, 'https://duplika.ca/', function(err, res) {\n console.log('Num retries: ' + call.getNumRetries());\n\n if (err) {\n console.log('Error: ' + err.message);\n } else {\n console.log('Status: ' + res.statusCode);\n }\n});\n\ncall.retryIf(function(err) { return err.status == 503; });\ncall.setStrategy(new backoff.ExponentialStrategy());\ncall.failAfter(10);\ncall.start();\n```\n\n## API\n\n### backoff.fibonacci([options])\n\nConstructs a Fibonacci backoff (10, 10, 20, 30, 50, etc.).\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n\nWith these values, the backoff delay will increase from 100 ms to 10000 ms. The\nrandomisation factor controls the range of randomness and must be between 0\nand 1. By default, no randomisation is applied on the backoff delay.\n\n### backoff.exponential([options])\n\nConstructs an exponential backoff (10, 20, 40, 80, etc.).\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n- factor: defaults to 2, must be greater than 1\n\nWith these values, the backoff delay will increase from 100 ms to 10000 ms. The\nrandomisation factor controls the range of randomness and must be between 0\nand 1. By default, no randomisation is applied on the backoff delay.\n\n### backoff.call(fn, [args, ...], callback)\n\n- fn: function to call in a backoff handler, i.e. the wrapped function\n- args: function's arguments\n- callback: function's callback accepting an error as its first argument\n\nConstructs a `FunctionCall` instance for the given function. The wrapped\nfunction will get retried until it succeds or reaches the maximum number\nof backoffs. In both cases, the callback function will be invoked with the\nlast result returned by the wrapped function.\n\nIt is the caller's responsability to initiate the call by invoking the\n`start` method on the returned `FunctionCall` instance.\n\n### Class Backoff\n\n#### new Backoff(strategy)\n\n- strategy: the backoff strategy to use\n\nConstructs a new backoff object from a specific backoff strategy. The backoff\nstrategy must implement the `BackoffStrategy`interface defined bellow.\n\n#### backoff.failAfter(numberOfBackoffs)\n\n- numberOfBackoffs: maximum number of backoffs before the fail event gets\nemitted, must be greater than 0\n\nSets a limit on the maximum number of backoffs that can be performed before\na fail event gets emitted and the backoff instance is reset. By default, there\nis no limit on the number of backoffs that can be performed.\n\n#### backoff.backoff([err])\n\nStarts a backoff operation. If provided, the error parameter will be emitted\nas the last argument of the `backoff` and `fail` events to let the listeners\nknow why the backoff operation was attempted.\n\nAn error will be thrown if a backoff operation is already in progress.\n\nIn practice, this method should be called after a failed attempt to perform a\nsensitive operation (connecting to a database, downloading a resource over the\nnetwork, etc.).\n\n#### backoff.reset()\n\nResets the backoff delay to the initial backoff delay and stop any backoff\noperation in progress. After reset, a backoff instance can and should be\nreused.\n\nIn practice, this method should be called after having successfully completed\nthe sensitive operation guarded by the backoff instance or if the client code\nrequest to stop any reconnection attempt.\n\n#### Event: 'backoff'\n\n- number: number of backoffs since last reset, starting at 0\n- delay: backoff delay in milliseconds\n- err: optional error parameter passed to `backoff.backoff([err])`\n\nEmitted when a backoff operation is started. Signals to the client how long\nthe next backoff delay will be.\n\n#### Event: 'ready'\n\n- number: number of backoffs since last reset, starting at 0\n- delay: backoff delay in milliseconds\n\nEmitted when a backoff operation is done. Signals that the failing operation\nshould be retried.\n\n#### Event: 'fail'\n\n- err: optional error parameter passed to `backoff.backoff([err])`\n\nEmitted when the maximum number of backoffs is reached. This event will only\nbe emitted if the client has set a limit on the number of backoffs by calling\n`backoff.failAfter(numberOfBackoffs)`. The backoff instance is automatically\nreset after this event is emitted.\n\n### Interface BackoffStrategy\n\nA backoff strategy must provide the following methods.\n\n#### strategy.next()\n\nComputes and returns the next backoff delay.\n\n#### strategy.reset()\n\nResets the backoff delay to its initial value.\n\n### Class ExponentialStrategy\n\nExponential (10, 20, 40, 80, etc.) backoff strategy implementation.\n\n#### new ExponentialStrategy([options])\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n- factor: defaults to 2, must be greater than 1\n\n### Class FibonacciStrategy\n\nFibonnaci (10, 10, 20, 30, 50, etc.) backoff strategy implementation.\n\n#### new FibonacciStrategy([options])\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n\n### Class FunctionCall\n\nThis class manages the calling of an asynchronous function within a backoff\nloop.\n\nThis class should rarely be instantiated directly since the factory method\n`backoff.call(fn, [args, ...], callback)` offers a more convenient and safer\nway to create `FunctionCall` instances.\n\n#### new FunctionCall(fn, args, callback)\n\n- fn: asynchronous function to call\n- args: an array containing fn's args\n- callback: fn's callback\n\nConstructs a function handler for the given asynchronous function.\n\n#### call.isPending()\n\nReturns whether the call is pending, i.e. hasn't been started.\n\n#### call.isRunning()\n\nReturns whether the call is in progress.\n\n#### call.isCompleted()\n\nReturns whether the call is completed.\n\n#### call.isAborted()\n\nReturns whether the call is aborted.\n\n#### call.setStrategy(strategy)\n\n- strategy: strategy instance to use, defaults to `FibonacciStrategy`.\n\nSets the backoff strategy to use. This method should be called before\n`call.start()` otherwise an exception will be thrown.\n\n#### call.failAfter(maxNumberOfBackoffs)\n\n- maxNumberOfBackoffs: maximum number of backoffs before the call is aborted\n\nSets the maximum number of backoffs before the call is aborted. By default,\nthere is no limit on the number of backoffs that can be performed.\n\nThis method should be called before `call.start()` otherwise an exception will\nbe thrown..\n\n#### call.retryIf(predicate)\n\n- predicate: a function which takes in as its argument the error returned\nby the wrapped function and determines whether it is retriable.\n\nSets the predicate which will be invoked to determine whether a given error\nshould be retried or not, e.g. a network error would be retriable while a type\nerror would stop the function call. By default, all errors are considered to be\nretriable.\n\nThis method should be called before `call.start()` otherwise an exception will\nbe thrown.\n\n#### call.getLastResult()\n\nReturns an array containing the last arguments passed to the completion callback\nof the wrapped function. For example, to get the error code returned by the last\ncall, one would do the following.\n\n``` js\nvar results = call.getLastResult();\n// The error code is the first parameter of the callback.\nvar error = results[0];\n```\n\nNote that if the call was aborted, it will contain the abort error and not the\nlast error returned by the wrapped function.\n\n#### call.getNumRetries()\n\nReturns the number of times the wrapped function call was retried. For a\nwrapped function that succeeded immediately, this would return 0. This\nmethod can be called at any point in time during the call life cycle, i.e.\nbefore, during and after the wrapped function invocation.\n\n#### call.start()\n\nInitiates the call the wrapped function. This method should only be called\nonce otherwise an exception will be thrown.\n\n#### call.abort()\n\nAborts the call and causes the completion callback to be invoked with an abort\nerror if the call was pending or running; does nothing otherwise. This method\ncan safely be called mutliple times.\n\n#### Event: 'call'\n\n- args: wrapped function's arguments\n\nEmitted each time the wrapped function is called.\n\n#### Event: 'callback'\n\n- results: wrapped function's return values\n\nEmitted each time the wrapped function invokes its callback.\n\n#### Event: 'backoff'\n\n- number: backoff number, starts at 0\n- delay: backoff delay in milliseconds\n- err: the error that triggered the backoff operation\n\nEmitted each time a backoff operation is started.\n\n#### Event: 'abort'\n\nEmitted when a call is aborted.\n\n## Annotated source code\n\nThe annotated source code can be found at [mathieuturcotte.github.io/node-backoff/docs](http://mathieuturcotte.github.io/node-backoff/docs/).\n\n## License\n\nThis code is free to use under the terms of the [MIT license](http://mturcotte.mit-license.org/).\n", "maintainers": [ { "name": "mathieu", "email": "turcotte.mat@gmail.com" } ], "time": { "modified": "2016-03-12T15:21:13.929Z", "created": "2012-04-20T01:04:30.744Z", "0.0.1": "2012-04-20T01:04:31.437Z", "0.0.2": "2012-04-24T19:14:30.591Z", "0.0.3": "2012-06-27T22:32:10.567Z", "0.1.0": "2012-07-25T12:33:33.583Z", "0.2.0": "2012-07-27T02:55:58.435Z", "0.2.1": "2012-08-07T22:27:47.797Z", "0.3.0": "2012-08-10T16:33:30.276Z", "1.0.0": "2012-08-16T15:16:46.110Z", "1.1.0": "2012-09-19T19:39:12.095Z", "1.2.0": "2012-10-12T14:49:09.297Z", "1.2.1": "2013-01-19T22:14:57.912Z", "2.0.0": "2013-01-26T19:04:14.712Z", "2.1.0": "2013-03-28T02:02:03.200Z", "2.2.0": "2013-04-13T20:11:43.082Z", "2.3.0": "2013-05-18T18:48:28.214Z", "2.4.0": "2014-06-21T15:11:53.139Z", "2.4.1": "2014-12-06T20:57:26.257Z", "2.5.0": "2016-03-12T15:21:13.929Z" }, "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" }, "repository": { "type": "git", "url": "git+https://github.com/MathieuTurcotte/node-backoff.git" }, "users": { "fgribreau": true, "dominictarr": true, "klyngbaek": true, "scull7": true, "silas": true, "ajohnstone": true, "joshperry": true, "animustechnology": true, "bojand": true, "guumaster": true, "hugojosefson": true, "moimikey": true, "jzhang300": true, "chriszs": true }, "keywords": [ "backoff", "retry", "fibonacci", "exponential" ], "license": "MIT", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/MathieuTurcotte/node-backoff/issues" }, "homepage": "https://github.com/MathieuTurcotte/node-backoff#readme" } ================================================ FILE: test/fixtures/analyze/collect/modules/backoff/expected-source.json ================================================ { "files": { "readmeSize": 11287, "testsSize": 27463, "hasChangelog": true }, "linters": [ "jshint" ], "badges": [ { "urls": { "original": "https://secure.travis-ci.org/MathieuTurcotte/node-backoff.png?branch=master", "service": "https://api.travis-ci.org/MathieuTurcotte/node-backoff.svg?branch=master", "shields": "https://img.shields.io/travis/MathieuTurcotte/node-backoff/master.svg", "content": "https://img.shields.io/travis/MathieuTurcotte/node-backoff/master.json" }, "info": { "service": "travis", "type": "build", "modifiers": { "branch": "master" } } } ] } ================================================ FILE: test/fixtures/analyze/collect/modules/cross-spawn/data.json ================================================ { "name": "cross-spawn", "description": "Cross platform child_process#spawn and child_process#spawnSync", "dist-tags": { "latest": "2.2.3" }, "versions": { "0.1.0": { "name": "cross-spawn", "version": "0.1.0", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/npde-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/npde-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/npde-cross-spawn", "_id": "cross-spawn@0.1.0", "_shasum": "804a4305ffe717f5f50598a855c08221a227c370", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "804a4305ffe717f5f50598a855c08221a227c370", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz" } }, "0.1.1": { "name": "cross-spawn", "version": "0.1.1", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.1.1", "_shasum": "ec7d08cf044c1f349e7aa21738296f665f8d7b8a", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "ec7d08cf044c1f349e7aa21738296f665f8d7b8a", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.1.tgz" } }, "0.1.2": { "name": "cross-spawn", "version": "0.1.2", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.1.2", "_shasum": "83ba4d7f394d41683253684052e669d14a873f10", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "83ba4d7f394d41683253684052e669d14a873f10", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.2.tgz" } }, "0.1.3": { "name": "cross-spawn", "version": "0.1.3", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.1.3", "_shasum": "08705196268ee352d99edf03c53ce05bf218ae91", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "08705196268ee352d99edf03c53ce05bf218ae91", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.3.tgz" } }, "0.1.4": { "name": "cross-spawn", "version": "0.1.4", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.1.4", "_shasum": "216fbe401cce5c1fae8f4270367865f841585992", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "216fbe401cce5c1fae8f4270367865f841585992", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.4.tgz" } }, "0.1.5": { "name": "cross-spawn", "version": "0.1.5", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.1.5", "_shasum": "5578f122bebf8476a6b1846ab082adbea83d0a65", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "5578f122bebf8476a6b1846ab082adbea83d0a65", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.5.tgz" } }, "0.1.6": { "name": "cross-spawn", "version": "0.1.6", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.1.6", "_shasum": "73de1551529b5865ce0392456ea5491a708aa809", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "73de1551529b5865ce0392456ea5491a708aa809", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.6.tgz" } }, "0.1.7": { "name": "cross-spawn", "version": "0.1.7", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.1.7", "_shasum": "7e26c368953fd9618215f519056fca17c4c43d0e", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "7e26c368953fd9618215f519056fca17c4c43d0e", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.7.tgz" } }, "0.2.0": { "name": "cross-spawn", "version": "0.2.0", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.0", "_shasum": "adf1f68b6b0a1fc221e65446e075e06ba5e34072", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "adf1f68b6b0a1fc221e65446e075e06ba5e34072", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.0.tgz" } }, "0.2.1": { "name": "cross-spawn", "version": "0.2.1", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.1", "_shasum": "740c2be6ef07e4693fadc863438f33c633bedca4", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "740c2be6ef07e4693fadc863438f33c633bedca4", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.1.tgz" } }, "0.2.2": { "name": "cross-spawn", "version": "0.2.2", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.2", "_shasum": "e843220593b3bc6e7e7c96decb1dafec69024ecd", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "e843220593b3bc6e7e7c96decb1dafec69024ecd", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.2.tgz" } }, "0.2.3": { "name": "cross-spawn", "version": "0.2.3", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.3", "_shasum": "9b40ef3270fbdfba9a0ad42fec9db2c40027d08c", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "9b40ef3270fbdfba9a0ad42fec9db2c40027d08c", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.3.tgz" } }, "0.2.4": { "name": "cross-spawn", "version": "0.2.4", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "0021b10fbba574e727c92459ff0bfdcc1cc0fab2", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.4", "_shasum": "b28444c6b8da2d6b5aa99bd04f0af2e029e9f1a1", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "b28444c6b8da2d6b5aa99bd04f0af2e029e9f1a1", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.4.tgz" } }, "0.2.5": { "name": "cross-spawn", "version": "0.2.5", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "89edcfa212bb75d5e1afd3e140c3040683ae5502", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.5", "_shasum": "39b123afcceaf0218ff4c198bfcc665e7ca7879e", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "39b123afcceaf0218ff4c198bfcc665e7ca7879e", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.5.tgz" } }, "0.2.6": { "name": "cross-spawn", "version": "0.2.6", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "48f2c14382f20a6c9078edb6945be3ae7a4f550a", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.6", "_shasum": "1a3512dfc5671da621f0974f26ed3bfd1555ee91", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "1a3512dfc5671da621f0974f26ed3bfd1555ee91", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.6.tgz" } }, "0.2.7": { "name": "cross-spawn", "version": "0.2.7", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "a403c3d72d811226c3dfb6c3c408a01a4ad37022", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.7", "_shasum": "b2edc68f95413c35dc2a0bed8f0c981c50dc4f81", "_from": ".", "_npmVersion": "2.6.1", "_nodeVersion": "0.10.36", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "b2edc68f95413c35dc2a0bed8f0c981c50dc4f81", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.7.tgz" } }, "0.2.8": { "name": "cross-spawn", "version": "0.2.8", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "f41ba1a9758c1f43a1f0fd263ecd6795f80a5807", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.8", "_shasum": "0f042e792eaeb5fdb098c4524aecfd5553b8ea57", "_from": ".", "_npmVersion": "2.6.1", "_nodeVersion": "0.10.36", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "0f042e792eaeb5fdb098c4524aecfd5553b8ea57", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.8.tgz" } }, "0.2.9": { "name": "cross-spawn", "version": "0.2.9", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "6fececcbd8331f98b4cfd6560b925bc4d8e77f47", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.2.9", "_shasum": "bd67f96c07efb6303b7fe94c1e979f88478e0a39", "_from": ".", "_npmVersion": "2.6.1", "_nodeVersion": "0.10.36", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "bd67f96c07efb6303b7fe94c1e979f88478e0a39", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.9.tgz" } }, "0.3.0": { "name": "cross-spawn", "version": "0.3.0", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "a431cdc9e431ae59b994d3ac3dced552e90a4434", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.3.0", "_shasum": "586ca7abec0887ce0600a119990fb3a3c80ccee2", "_from": ".", "_npmVersion": "2.7.4", "_nodeVersion": "0.12.2", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "586ca7abec0887ce0600a119990fb3a3c80ccee2", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.3.0.tgz" } }, "0.4.0": { "name": "cross-spawn", "version": "0.4.0", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0", "spawn-sync": "^1.0.6" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "b5e83a90ac4493aceb158b3b5d3274b087da5b10", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.4.0", "_shasum": "29e97f5098362d39245d795f63834e6aa9b2df15", "_from": ".", "_npmVersion": "2.7.4", "_nodeVersion": "0.12.2", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "29e97f5098362d39245d795f63834e6aa9b2df15", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.4.0.tgz" } }, "0.4.1": { "name": "cross-spawn", "version": "0.4.1", "description": "Cross platform child_process#spawn", "main": "index.js", "scripts": { "test": "mocha --bail -R spec" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "lru-cache": "^2.5.0", "spawn-sync": "^1.0.6" }, "devDependencies": { "expect.js": "^0.3.0", "mocha": "^1.20.1" }, "gitHead": "3679e6942768de5a61a7c2b5b8064ff4bbd78362", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@0.4.1", "_shasum": "05b2c16fca761350b492ad455802ea1bea3fadae", "_from": ".", "_npmVersion": "2.7.4", "_nodeVersion": "0.12.2", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "05b2c16fca761350b492ad455802ea1bea3fadae", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-0.4.1.tgz" } }, "1.0.0": { "name": "cross-spawn", "version": "1.0.0", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^0.1.0", "spawn-sync": "^1.0.6" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mocha": "^2.2.5" }, "gitHead": "b5239f25c0274feba89242b77d8f0ce57dce83ad", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@1.0.0", "_shasum": "53e3c1e2d7a03206b226cd7c57807a5d4fb4282e", "_from": ".", "_npmVersion": "2.10.1", "_nodeVersion": "0.12.4", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "53e3c1e2d7a03206b226cd7c57807a5d4fb4282e", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-1.0.0.tgz" } }, "1.0.1": { "name": "cross-spawn", "version": "1.0.1", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^1.0.0", "spawn-sync": "^1.0.6" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mocha": "^2.2.5" }, "gitHead": "7e354c58e4bc5b94f535c7d488c7d868dcb72dd0", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@1.0.1", "_shasum": "ec68b90d43d7eaf1ae602a5dce7d075b40c472ee", "_from": ".", "_npmVersion": "2.10.1", "_nodeVersion": "0.12.4", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "ec68b90d43d7eaf1ae602a5dce7d075b40c472ee", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-1.0.1.tgz" } }, "1.0.2": { "name": "cross-spawn", "version": "1.0.2", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^1.0.1", "spawn-sync": "^1.0.6" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mocha": "^2.2.5" }, "gitHead": "bf0d22195571b06ccc882cd100fd7fb7c5a2ad86", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@1.0.2", "_shasum": "16405a46325fb3e0f4dd271f5d9618e02560d68d", "_from": ".", "_npmVersion": "2.10.1", "_nodeVersion": "0.12.4", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "16405a46325fb3e0f4dd271f5d9618e02560d68d", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-1.0.2.tgz" } }, "1.0.3": { "name": "cross-spawn", "version": "1.0.3", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^1.0.1", "spawn-sync": "^1.0.6" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mocha": "^2.2.5" }, "gitHead": "3c02b4036eeb9df39004bfc3f0ad3d13b668d0e0", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@1.0.3", "_shasum": "eb4f604ee204c3c555dd9e4b39bf430b69e977a6", "_from": ".", "_npmVersion": "2.10.1", "_nodeVersion": "0.12.4", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "eb4f604ee204c3c555dd9e4b39bf430b69e977a6", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-1.0.3.tgz" } }, "1.0.4": { "name": "cross-spawn", "version": "1.0.4", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^1.0.1", "spawn-sync": "^1.0.13" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mocha": "^2.2.5" }, "gitHead": "d27621d9ee8b81ee4913d9c8377e5e23add54828", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@1.0.4", "_shasum": "4b60d515f5d8723bb4cde0e8e3d0240517ebffca", "_from": ".", "_npmVersion": "2.13.1", "_nodeVersion": "0.12.7", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "4b60d515f5d8723bb4cde0e8e3d0240517ebffca", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-1.0.4.tgz" } }, "2.0.0": { "name": "cross-spawn", "version": "2.0.0", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.0.0", "spawn-sync": "^1.0.13" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mocha": "^2.2.5" }, "gitHead": "65d41138e6b5161787df43d5f8de2442765e32d0", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.0.0", "_shasum": "32dc93907e8f80e39830aa3f0bd9f32538b3bcf1", "_from": ".", "_npmVersion": "2.11.3", "_nodeVersion": "0.12.7", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "32dc93907e8f80e39830aa3f0bd9f32538b3bcf1", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.0.0.tgz" } }, "2.0.1": { "name": "cross-spawn", "version": "2.0.1", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.0.0", "spawn-sync": "1.0.13" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.4.4", "which": "^1.2.0" }, "gitHead": "22cae907b13de66edb5882aea6f1cb405740d283", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.0.1", "_shasum": "ab6fd893a099759d9b85220e3a64397de946b0f6", "_from": ".", "_npmVersion": "2.13.1", "_nodeVersion": "0.12.7", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "ab6fd893a099759d9b85220e3a64397de946b0f6", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.0.1.tgz" } }, "2.1.0": { "name": "cross-spawn", "version": "2.1.0", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.0.0", "spawn-sync": "1.0.13" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^1.0.9", "which": "^1.2.0" }, "gitHead": "f2baa6dce3606daf543666ac1e5df6e4d29ed0cc", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.1.0", "_shasum": "9bc27f40423e98a445efe9269983e4f4055cde3a", "_from": ".", "_npmVersion": "2.13.1", "_nodeVersion": "0.12.7", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "9bc27f40423e98a445efe9269983e4f4055cde3a", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.1.0.tgz" } }, "2.1.1": { "name": "cross-spawn", "version": "2.1.1", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.0.0", "spawn-sync": "1.0.13" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^5.0.12", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^1.0.9", "which": "^1.2.0" }, "gitHead": "a9b71dd09dd90b8423707b743ae9ced844a7ae21", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.1.1", "_shasum": "c3b85d6a88719068b2b27be55e2974f62d41b5c0", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.3", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "c3b85d6a88719068b2b27be55e2974f62d41b5c0", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.1.1.tgz" } }, "2.1.2": { "name": "cross-spawn", "version": "2.1.2", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.0.0", "spawn-sync": "1.0.13" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^6.0.3", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.5.0", "which": "^1.2.1" }, "gitHead": "b701ac8cce3b8c21278018d0f2af60860a125c1e", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.1.2", "_shasum": "954ea0346437918e803e03c445cb5c3287abc2af", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.3", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "954ea0346437918e803e03c445cb5c3287abc2af", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.1.2.tgz" } }, "2.1.3": { "name": "cross-spawn", "version": "2.1.3", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.0.0", "spawn-sync": "1.0.13" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^6.0.3", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.5.0", "which": "^1.2.1" }, "gitHead": "299efd1b11fe8bcc64cdb9cdf8f624b9e56e1bb9", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.1.3", "_shasum": "6b801df157e4328b63e3d4c2c9c00488745726e8", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.3", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "6b801df157e4328b63e3d4c2c9c00488745726e8", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.1.3.tgz" } }, "2.1.4": { "name": "cross-spawn", "version": "2.1.4", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail -R spec test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.0.0", "spawn-sync": "^1.0.15" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^6.0.3", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.5.0", "which": "^1.2.1" }, "gitHead": "1831b3228a38722f431156485b01db3be6d199cc", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.1.4", "_shasum": "e64441b7a038e929ccc6e24e2aa7b72a96b26a27", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.3", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "e64441b7a038e929ccc6e24e2aa7b72a96b26a27", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.1.4.tgz" } }, "2.1.5": { "name": "cross-spawn", "version": "2.1.5", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.0.0", "spawn-sync": "^1.0.15" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^6.0.3", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.5.0", "which": "^1.2.4" }, "gitHead": "a91440123d1d8ec2865cf7643351955e7ad48247", "homepage": "https://github.com/IndigoUnited/node-cross-spawn", "_id": "cross-spawn@2.1.5", "_shasum": "09e1eefb7617270f4f9cad41766e7fcbd2c6ae6c", "_from": ".", "_npmVersion": "2.14.12", "_nodeVersion": "4.2.4", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "09e1eefb7617270f4f9cad41766e7fcbd2c6ae6c", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.1.5.tgz" } }, "2.2.0": { "name": "cross-spawn", "version": "2.2.0", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.2.0", "spawn-sync": "^1.0.15" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^7.0.0", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.5.0", "which": "^1.2.4" }, "gitHead": "d55c6fd837ebc9bfb64ed73b7bc9e584547d97c2", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.2.0", "_shasum": "69a59997789571ccb64f399555a5169af79c9361", "_from": ".", "_npmVersion": "2.14.20", "_nodeVersion": "4.4.0", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "69a59997789571ccb64f399555a5169af79c9361", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.2.0.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/cross-spawn-2.2.0.tgz_1459975736466_0.5801793539430946" } }, "2.2.2": { "name": "cross-spawn", "version": "2.2.2", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.2.0", "spawn-sync": "^1.0.15" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^7.0.0", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.5.0", "which": "^1.2.4" }, "gitHead": "34bb37ef65c431891f5cc4f033b418dbb24084ae", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.2.2", "_shasum": "745cba057f65fb13daca869e4c50cdbda173b45b", "_from": ".", "_npmVersion": "2.14.20", "_nodeVersion": "4.4.0", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "745cba057f65fb13daca869e4c50cdbda173b45b", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.2.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/cross-spawn-2.2.2.tgz_1460152414353_0.8628160380758345" } }, "2.2.3": { "name": "cross-spawn", "version": "2.2.3", "description": "Cross platform child_process#spawn and child_process#spawnSync", "main": "index.js", "scripts": { "test": "node test/prepare && mocha --bail test/test" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.2.2", "spawn-sync": "^1.0.15" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^7.0.0", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.5.0", "which": "^1.2.4" }, "gitHead": "7bc71932e517c974c80f54ae9f7687c9cd25db74", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "_id": "cross-spawn@2.2.3", "_shasum": "fac56202dfd3d0dd861778f2da203bf434bb821c", "_from": ".", "_npmVersion": "2.14.20", "_nodeVersion": "4.4.0", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "dist": { "shasum": "fac56202dfd3d0dd861778f2da203bf434bb821c", "tarball": "http://registry.npmjs.org/cross-spawn/-/cross-spawn-2.2.3.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/cross-spawn-2.2.3.tgz_1460574403627_0.18620981369167566" } } }, "readme": "# cross-spawn\n\n[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Build status][appveyor-image]][appveyor-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url]\n\n[npm-url]:https://npmjs.org/package/cross-spawn\n[downloads-image]:http://img.shields.io/npm/dm/cross-spawn.svg\n[npm-image]:http://img.shields.io/npm/v/cross-spawn.svg\n[travis-url]:https://travis-ci.org/IndigoUnited/node-cross-spawn\n[travis-image]:http://img.shields.io/travis/IndigoUnited/node-cross-spawn/master.svg\n[appveyor-url]:https://ci.appveyor.com/project/satazor/node-cross-spawn\n[appveyor-image]:https://img.shields.io/appveyor/ci/satazor/node-cross-spawn.svg\n[david-dm-url]:https://david-dm.org/IndigoUnited/node-cross-spawn\n[david-dm-image]:https://img.shields.io/david/IndigoUnited/node-cross-spawn.svg\n[david-dm-dev-url]:https://david-dm.org/IndigoUnited/node-cross-spawn#info=devDependencies\n[david-dm-dev-image]:https://img.shields.io/david/dev/IndigoUnited/node-cross-spawn.svg\n\nA cross platform solution to node's spawn and spawnSync.\n\n\n## Installation\n\n`$ npm install cross-spawn`\n\nIf you're not using the `spawnSync`, you can use [cross-spawn-async](http://github.com/IndigoUnited/node-cross-spawn-async) which doesn't require a build toolchain, see [#18](https://github.com/IndigoUnited/node-cross-spawn/pull/18)\n\n\n## Why\n\nNode has issues when using spawn on Windows:\n\n- It ignores [PATHEXT](https://github.com/joyent/node/issues/2318)\n- It does not support [shebangs](http://pt.wikipedia.org/wiki/Shebang)\n- It does not allow you to run `del` or `dir`\n- It does not properly escape arguments with spaces or special characters\n\nAll these issues are handled correctly by `cross-spawn`.\nThere are some known modules, such as [win-spawn](https://github.com/ForbesLindesay/win-spawn), that try to solve this but they are either broken or provide faulty escaping of shell arguments.\n\n\n## Usage\n\nExactly the same way as node's [`spawn`](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) or [`spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options), so it's a drop in replacement.\n\n```javascript\nvar spawn = require('cross-spawn');\n\n// Spawn NPM asynchronously\nvar process = spawn('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });\n\n// Spawn NPM synchronously\nvar results = spawn.sync('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });\n```\n\n\n## Tests\n\n`$ npm test`\n\n\n## License\n\nReleased under the [MIT License](http://www.opensource.org/licenses/mit-license.php).\n", "maintainers": [{ "name": "satazor", "email": "andremiguelcruz@msn.com" }], "time": { "modified": "2016-04-13T19:06:45.979Z", "created": "2014-06-30T01:04:42.962Z", "0.1.0": "2014-06-30T01:04:42.962Z", "0.1.1": "2014-06-30T13:22:52.138Z", "0.1.2": "2014-06-30T21:29:40.550Z", "0.1.3": "2014-06-30T21:49:21.933Z", "0.1.4": "2014-06-30T23:25:24.890Z", "0.1.5": "2014-07-02T11:30:53.833Z", "0.1.6": "2014-07-03T08:47:30.074Z", "0.1.7": "2014-07-11T16:28:05.858Z", "0.2.0": "2014-08-28T22:41:05.210Z", "0.2.1": "2014-08-28T22:50:35.426Z", "0.2.2": "2014-08-28T22:59:55.849Z", "0.2.3": "2014-08-29T08:12:24.369Z", "0.2.4": "2015-02-08T20:34:37.954Z", "0.2.5": "2015-02-08T20:35:35.977Z", "0.2.6": "2015-02-08T20:58:31.475Z", "0.2.7": "2015-03-28T00:03:44.626Z", "0.2.8": "2015-03-28T00:05:26.072Z", "0.2.9": "2015-04-08T16:18:38.840Z", "0.3.0": "2015-05-06T08:02:28.625Z", "0.4.0": "2015-05-06T22:21:11.441Z", "0.4.1": "2015-06-10T15:11:37.696Z", "1.0.0": "2015-07-02T19:01:47.896Z", "1.0.1": "2015-07-02T19:10:06.117Z", "1.0.2": "2015-07-02T20:15:01.537Z", "1.0.3": "2015-07-02T20:21:46.368Z", "1.0.4": "2015-07-16T16:57:22.820Z", "2.0.0": "2015-07-21T22:25:49.585Z", "2.0.1": "2015-11-29T17:30:31.442Z", "2.1.0": "2015-12-06T15:26:20.377Z", "2.1.1": "2016-01-02T09:57:15.369Z", "2.1.2": "2016-01-02T14:50:05.176Z", "2.1.3": "2016-01-02T15:27:58.166Z", "2.1.4": "2016-01-03T15:37:28.977Z", "2.1.5": "2016-01-27T01:15:02.454Z", "2.2.0": "2016-04-06T20:48:59.136Z", "2.2.2": "2016-04-08T21:53:36.565Z", "2.2.3": "2016-04-13T19:06:45.979Z" }, "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "keywords": ["spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute"], "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "bugs": { "url": "https://github.com/IndigoUnited/node-cross-spawn/issues/" }, "license": "MIT", "readmeFilename": "README.md", "users": { "itonyyo": true, "nubuck": true, "garthk": true, "antixrist": true, "pandao": true, "carsy": true, "m_gol": true, "crafterm": true, "satazor": true, "mysticatea": true } } ================================================ FILE: test/fixtures/analyze/collect/modules/cross-spawn/expected-github.json ================================================ { "starsCount": 74, "forksCount": 11, "subscribersCount": 12, "issues": { "count": 31, "openCount": 2, "distribution": { "3600": 9, "10800": 2, "32400": 3, "97200": 6, "291600": 4, "874800": 0, "2624400": 4, "7873200": 2, "23619600": 1, "70858800": 0, "212576400": 0 }, "isDisabled": false }, "contributors": [ { "username": "satazor", "commitsCount": 111 }, { "username": "BigstickCarpet", "commitsCount": 4 }, { "username": "kevva", "commitsCount": 1 }, { "username": "typicode", "commitsCount": 1 }, { "username": "greenkeeperio-bot", "commitsCount": 1 }, { "username": "knpwrs", "commitsCount": 1 } ], "commits": [ { "from": "2016-05-02T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 0 }, { "from": "2016-04-09T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 3 }, { "from": "2016-02-09T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 9 }, { "from": "2015-11-11T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 38 }, { "from": "2015-05-10T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 61 } ], "statuses": [ { "context": "continuous-integration/appveyor/branch", "state": "success" }, { "context": "continuous-integration/travis-ci/push", "state": "success" } ] } ================================================ FILE: test/fixtures/analyze/collect/modules/cross-spawn/expected-metadata.json ================================================ { "name": "cross-spawn", "scope": "unscoped", "version": "2.2.3", "description": "Cross platform child_process#spawn and child_process#spawnSync", "keywords": [ "spawn", "spawnSync", "windows", "cross", "platform", "path", "ext", "path-ext", "path_ext", "shebang", "hashbang", "cmd", "execute" ], "date": "2016-04-13T19:06:45.979Z", "readme": "# cross-spawn\n\n[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Build status][appveyor-image]][appveyor-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url]\n\n[npm-url]:https://npmjs.org/package/cross-spawn\n[downloads-image]:http://img.shields.io/npm/dm/cross-spawn.svg\n[npm-image]:http://img.shields.io/npm/v/cross-spawn.svg\n[travis-url]:https://travis-ci.org/IndigoUnited/node-cross-spawn\n[travis-image]:http://img.shields.io/travis/IndigoUnited/node-cross-spawn/master.svg\n[appveyor-url]:https://ci.appveyor.com/project/satazor/node-cross-spawn\n[appveyor-image]:https://img.shields.io/appveyor/ci/satazor/node-cross-spawn.svg\n[david-dm-url]:https://david-dm.org/IndigoUnited/node-cross-spawn\n[david-dm-image]:https://img.shields.io/david/IndigoUnited/node-cross-spawn.svg\n[david-dm-dev-url]:https://david-dm.org/IndigoUnited/node-cross-spawn#info=devDependencies\n[david-dm-dev-image]:https://img.shields.io/david/dev/IndigoUnited/node-cross-spawn.svg\n\nA cross platform solution to node's spawn and spawnSync.\n\n\n## Installation\n\n`$ npm install cross-spawn`\n\nIf you're not using the `spawnSync`, you can use [cross-spawn-async](http://github.com/IndigoUnited/node-cross-spawn-async) which doesn't require a build toolchain, see [#18](https://github.com/IndigoUnited/node-cross-spawn/pull/18)\n\n\n## Why\n\nNode has issues when using spawn on Windows:\n\n- It ignores [PATHEXT](https://github.com/joyent/node/issues/2318)\n- It does not support [shebangs](http://pt.wikipedia.org/wiki/Shebang)\n- It does not allow you to run `del` or `dir`\n- It does not properly escape arguments with spaces or special characters\n\nAll these issues are handled correctly by `cross-spawn`.\nThere are some known modules, such as [win-spawn](https://github.com/ForbesLindesay/win-spawn), that try to solve this but they are either broken or provide faulty escaping of shell arguments.\n\n\n## Usage\n\nExactly the same way as node's [`spawn`](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) or [`spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options), so it's a drop in replacement.\n\n```javascript\nvar spawn = require('cross-spawn');\n\n// Spawn NPM asynchronously\nvar process = spawn('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });\n\n// Spawn NPM synchronously\nvar results = spawn.sync('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });\n```\n\n\n## Tests\n\n`$ npm test`\n\n\n## License\n\nReleased under the [MIT License](http://www.opensource.org/licenses/mit-license.php).", "publisher": { "username": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [ { "username": "satazor", "email": "andremiguelcruz@msn.com" } ], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-cross-spawn.git" }, "links": { "bugs": "https://github.com/IndigoUnited/node-cross-spawn/issues/", "homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme", "npm": "https://www.npmjs.com/package/cross-spawn", "repository": "https://github.com/IndigoUnited/node-cross-spawn" }, "license": "MIT", "dependencies": { "cross-spawn-async": "^2.2.2", "spawn-sync": "^1.0.15" }, "devDependencies": { "expect.js": "^0.3.0", "glob": "^7.0.0", "mkdirp": "^0.5.1", "mocha": "^2.2.5", "rimraf": "^2.5.0", "which": "^1.2.4" }, "releases": [ { "from": "2016-04-08T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z", "count": 3 }, { "from": "2016-02-08T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z", "count": 4 }, { "from": "2015-11-10T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z", "count": 11 }, { "from": "2015-05-09T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z", "count": 18 }, { "from": "2014-05-09T00:00:00.000Z", "to": "2016-05-08T00:00:00.000Z", "count": 39 } ], "hasTestScript": true } ================================================ FILE: test/fixtures/analyze/collect/modules/cross-spawn/expected-npm.json ================================================ { "downloads": [ { "from": "2016-05-08T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 14211 }, { "from": "2016-05-02T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 243516 }, { "from": "2016-04-09T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 1616191 }, { "from": "2016-02-09T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 5178015 }, { "from": "2015-11-11T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 9602846 }, { "from": "2015-05-10T00:00:00.000Z", "to": "2016-05-09T00:00:00.000Z", "count": 15119420 } ], "starsCount": 10 } ================================================ FILE: test/fixtures/analyze/collect/modules/cross-spawn/expected-source.json ================================================ { "files": { "readmeSize": 2709, "testsSize": 20813, "hasNpmIgnore": true }, "linters": [ "editorconfig", "jshint" ], "badges": [ { "urls": { "original": "http://img.shields.io/npm/dm/cross-spawn.svg", "shields": "https://img.shields.io/npm/dm/cross-spawn.svg", "content": "https://img.shields.io/npm/dm/cross-spawn.json" }, "info": { "service": "npm", "type": "downloads", "modifiers": { "type": "dm" } } }, { "urls": { "original": "http://img.shields.io/npm/v/cross-spawn.svg", "shields": "https://img.shields.io/npm/v/cross-spawn.svg", "content": "https://img.shields.io/npm/v/cross-spawn.json" }, "info": { "service": "npm", "type": "version", "modifiers": { "type": "v" } } }, { "urls": { "original": "http://img.shields.io/travis/IndigoUnited/node-cross-spawn/master.svg", "service": "https://api.travis-ci.org/IndigoUnited/node-cross-spawn.svg?branch=master", "shields": "https://img.shields.io/travis/IndigoUnited/node-cross-spawn/master.svg", "content": "https://img.shields.io/travis/IndigoUnited/node-cross-spawn/master.json" }, "info": { "service": "travis", "type": "build", "modifiers": { "branch": "master" } } }, { "info": { "service": "appveyor", "type": "build" }, "urls": { "content": "https://img.shields.io/appveyor/ci/satazor/node-cross-spawn.json", "original": "https://img.shields.io/appveyor/ci/satazor/node-cross-spawn.svg", "service": "https://ci.appveyor.com/api/projects/status/satazor/node-cross-spawn", "shields": "https://img.shields.io/appveyor/ci/satazor/node-cross-spawn.svg" } }, { "urls": { "original": "https://img.shields.io/david/IndigoUnited/node-cross-spawn.svg", "service": "https://david-dm.org/IndigoUnited/node-cross-spawn.svg", "shields": "https://img.shields.io/david/IndigoUnited/node-cross-spawn.svg", "content": "https://img.shields.io/david/IndigoUnited/node-cross-spawn.json" }, "info": { "service": "david", "type": "dependencies", "modifiers": { "statusType": "normal" } } }, { "urls": { "original": "https://img.shields.io/david/dev/IndigoUnited/node-cross-spawn.svg", "service": "https://david-dm.org/IndigoUnited/node-cross-spawn/dev-status.svg", "shields": "https://img.shields.io/david/dev/IndigoUnited/node-cross-spawn.svg", "content": "https://img.shields.io/david/dev/IndigoUnited/node-cross-spawn.json" }, "info": { "service": "david", "type": "dependencies", "modifiers": { "statusType": "dev" } } } ] } ================================================ FILE: test/fixtures/analyze/collect/modules/hapi/data.json ================================================ { "name": "hapi", "description": "HTTP Server framework", "dist-tags": { "latest": "13.4.0", "lts": "9.5.1" }, "versions": { "0.0.1": { "name": "hapi", "description": "HTTP API Server based on Express with native OAuth 2.0 support", "version": "0.0.1", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/hueniverse/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api" ], "engines": { "node": ">=0.4.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x" }, "devDependencies": { }, "_id": "hapi@0.0.1", "_engineSupported": true, "_npmVersion": "1.0.6", "_nodeVersion": "v0.5.0-pre", "_defaultsLoaded": true, "dist": { "shasum": "fbf22dbb502824659ade93eee3e30cb72df97bee", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.0.1.tgz" }, "scripts": { }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.0.2": { "name": "hapi", "description": "HTTP API Server based on Express with native OAuth 2.0 support", "version": "0.0.2", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/hueniverse/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.0.2", "devDependencies": { }, "_engineSupported": true, "_npmVersion": "1.0.105", "_nodeVersion": "v0.6.1-pre", "_defaultsLoaded": true, "dist": { "shasum": "582451da95ca4a650755f6d6f04d4e13539423b8", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.0.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.0.3": { "name": "hapi", "description": "HTTP API Server based on Express with native OAuth 2.0 support", "version": "0.0.3", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/hueniverse/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "sugar": "1.1.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.0.3", "devDependencies": { }, "_engineSupported": true, "_npmVersion": "1.0.105", "_nodeVersion": "v0.6.1-pre", "_defaultsLoaded": true, "dist": { "shasum": "08d84a883e38a610d49f2c413e57cfe717411127", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.0.3.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.0.4": { "name": "hapi", "description": "HTTP API Server based on Express with native OAuth 2.0 support", "version": "0.0.4", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/hueniverse/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "sugar": "1.1.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.0.4", "devDependencies": { }, "_engineSupported": true, "_npmVersion": "1.0.105", "_nodeVersion": "v0.6.1-pre", "_defaultsLoaded": true, "dist": { "shasum": "3a739045c3ad04b8747155d10ee544820bfab71f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.0.4.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.0.5": { "name": "hapi", "description": "HTTP API Server based on Express with native OAuth 2.0 support", "version": "0.0.5", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/hueniverse/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "sugar": "1.1.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.0.5", "devDependencies": { }, "_engineSupported": true, "_npmVersion": "1.0.105", "_nodeVersion": "v0.6.1-pre", "_defaultsLoaded": true, "dist": { "shasum": "c461c3ced42ead36d8b69daa9b8d7ad0684a92b6", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.0.5.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.0.6": { "name": "hapi", "description": "HTTP API Server based on Express with native OAuth 2.0 support", "version": "0.0.6", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/hueniverse/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "sugar": "1.1.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.0.6", "devDependencies": { }, "_engineSupported": true, "_npmVersion": "1.0.105", "_nodeVersion": "v0.6.1-pre", "_defaultsLoaded": true, "dist": { "shasum": "3b0fe1b9c1e728dd06347cde57bb7d46193e3012", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.0.6.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.1.0": { "name": "hapi", "description": "HTTP API Server framework based on Express", "version": "0.1.0", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "express" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "sugar": "1.1.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.1.0", "devDependencies": { }, "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.0-3", "_nodeVersion": "v0.6.9-pre", "_defaultsLoaded": true, "dist": { "shasum": "e25a612fec92af8a1017eca405dc4e3832de867d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.1.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.1.1": { "name": "hapi", "description": "HTTP API Server framework based on Express", "version": "0.1.1", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "express" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "sugar": "1.1.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.1.1", "devDependencies": { }, "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.0-3", "_nodeVersion": "v0.6.9-pre", "_defaultsLoaded": true, "dist": { "shasum": "5bfb5cd25efd2c6163a4db6819c90cc2675fb649", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.1.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.1.2": { "name": "hapi", "description": "HTTP API Server framework based on Express", "version": "0.1.2", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "express" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "sugar": "1.1.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.1.2", "devDependencies": { }, "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.0-3", "_nodeVersion": "v0.6.9-pre", "_defaultsLoaded": true, "dist": { "shasum": "d9a85ce800a6b3e55981335e3800c8abb6cb7853", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.1.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.1.3": { "name": "hapi", "description": "HTTP API Server framework based on Express", "version": "0.1.3", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "express" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "sugar": "1.1.x" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.1.3", "devDependencies": { }, "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.0-3", "_nodeVersion": "v0.6.9-pre", "_defaultsLoaded": true, "dist": { "shasum": "95fa64e4ecac897a2e397f183fc6184dfa0d1d26", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.1.3.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.2.0": { "name": "hapi", "description": "HTTP API Server framework based on Express", "version": "0.2.0", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "express" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x" }, "devDependencies": { "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.2.0", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.0-3", "_nodeVersion": "v0.6.9-pre", "_defaultsLoaded": true, "dist": { "shasum": "82f62e416e62e28540fe1bb25bca5aec11181e94", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.2.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.2.1": { "name": "hapi", "description": "HTTP API Server framework based on Express", "version": "0.2.1", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "express" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "express": "2.x.x", "qs": "0.4.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x" }, "devDependencies": { "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.2.1", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.0-3", "_nodeVersion": "v0.6.9-pre", "_defaultsLoaded": true, "dist": { "shasum": "eb08fa2aeb0db71b65941f9adaf99ca74bf9b15c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.2.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.3.0": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.3.0", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "director": "1.0.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x" }, "devDependencies": { "jscoverage": "0.1.0", "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test && make unit" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.3.0", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.0-3", "_nodeVersion": "v0.6.9-pre", "_defaultsLoaded": true, "dist": { "shasum": "b3271bfc20bbf62131cb48e300caedd899e3f8b1", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.3.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.4.0": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.4.0", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.0.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x" }, "devDependencies": { "jscoverage": "0.1.0", "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test && make unit" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.4.0", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.21", "_nodeVersion": "v0.6.18-pre", "_defaultsLoaded": true, "dist": { "shasum": "a05172cc02fd9199c8f856455ded9c6a87b77e0d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.4.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.4.1": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.4.1", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.0.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x" }, "devDependencies": { "jscoverage": "0.1.0", "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test && make unit" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.4.1", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.21", "_nodeVersion": "v0.6.18-pre", "_defaultsLoaded": true, "dist": { "shasum": "bc9078be8cb2791987a5d282b31900dbe667bce6", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.4.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.4.2": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.4.2", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.0.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x" }, "devDependencies": { "jscoverage": "0.1.0", "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test && make unit" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.4.2", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.21", "_nodeVersion": "v0.6.18-pre", "_defaultsLoaded": true, "dist": { "shasum": "2a5a23c597ea7d65b890a0d10d4ff1e355b9d2e2", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.4.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.4.3": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.4.3", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.0.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "sinon": "1.3.4" }, "devDependencies": { "jscoverage": "0.1.0", "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test && make unit" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.4.3", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.21", "_nodeVersion": "v0.6.18-pre", "_defaultsLoaded": true, "dist": { "shasum": "451f55fef70679905bfae068fdefbb879efd3831", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.4.3.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.4.4": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.4.4", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.0.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "sinon": "1.3.4" }, "devDependencies": { "jscoverage": "0.1.0", "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test && make unit" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.4.4", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.21", "_nodeVersion": "v0.6.18-pre", "_defaultsLoaded": true, "dist": { "shasum": "f4f978c05e02d0f91eec52e13e0c41ce8df30640", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.4.4.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.5.0": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.5.0", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.0.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "sinon": "1.3.4", "joi": "0.3.x" }, "devDependencies": { "jscoverage": "0.1.0", "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test && make unit" }, "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "_id": "hapi@0.5.0", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.21", "_nodeVersion": "v0.6.18-pre", "_defaultsLoaded": true, "dist": { "shasum": "57dbb1174edb23d11140b90218720b162836b17d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.5.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.5.1": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.5.1", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi.git" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.0.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "sinon": "1.3.4", "joi": "0.x.x" }, "devDependencies": { "jscoverage": "0.1.0", "mocha": "0.x.x", "request": "2.9.100", "should": "0.x.x" }, "scripts": { "test": "make test && make unit" }, "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "_id": "hapi@0.5.1", "optionalDependencies": { }, "_engineSupported": true, "_npmVersion": "1.1.21", "_nodeVersion": "v0.8.0", "_defaultsLoaded": true, "dist": { "shasum": "379735cd6b473561aa174466b7f57296887e4c21", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.5.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.6.0": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.6.0", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "router" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "redis": "0.x.x", "ws": "0.4.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4" }, "scripts": { "test": "make test && make unit" }, "_id": "hapi@0.6.0", "dist": { "shasum": "9e984d1ad655ba3bba8e5c86b2ac50e1ac19e68c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.6.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.6.1": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.6.1", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "router" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "redis": "0.x.x", "ws": "0.4.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4" }, "scripts": { "test": "make test && make unit" }, "_id": "hapi@0.6.1", "dist": { "shasum": "48453c9115429212feea5086c0c8294785d23ece", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.6.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.5.2": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.5.2", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.1.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "redis": "0.x.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4" }, "scripts": { "test": "make test && make unit" }, "_id": "hapi@0.5.2", "dist": { "shasum": "6742519c7cc762dea9f551466355bdbc4e0b762c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.5.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.7.0": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.7.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "mac": "0.x.x", "request": "2.11.x", "redis": "0.8.x", "ws": "0.4.x", "shot": "0.0.x", "handlebars": "1.0.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.7.0", "dist": { "shasum": "0a14226efc1a618be67bf819c3043b734fd7d76f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.7.0.tgz" }, "_npmVersion": "1.1.61", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.7.1": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.7.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "mac": "0.x.x", "request": "2.11.x", "redis": "0.8.x", "ws": "0.4.x", "shot": "0.0.x", "handlebars": "1.0.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.7.1", "dist": { "shasum": "2fc89d27ce4476cae21db8165313889c9bada703", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.7.1.tgz" }, "_npmVersion": "1.1.61", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.8.0": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.8.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "mac": "0.x.x", "request": "2.11.x", "redis": "0.8.x", "ws": "0.4.x", "shot": "0.0.x", "handlebars": "1.0.x", "mongodb": "1.1.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.8.0", "dist": { "shasum": "8db8f0edfcaa7d34b0f03c10ac9143b5302b532e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.8.0.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.8.1": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.8.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "mac": "0.x.x", "request": "2.11.x", "redis": "0.8.x", "ws": "0.4.x", "shot": "0.0.x", "handlebars": "1.0.x", "mongodb": "1.1.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.8.1", "dist": { "shasum": "31fb85ebd5b35b96c53badcef14e4f22473d2f1d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.8.1.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.8.2": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.8.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "mac": "0.x.x", "request": "2.11.x", "redis": "0.8.x", "ws": "0.4.x", "shot": "0.0.x", "handlebars": "1.0.x", "mongodb": "1.1.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.8.2", "dist": { "shasum": "99f84de82656135b200bc2c6fc705325aaea4e5c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.8.2.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.8.3": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.8.3", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "mac": "0.x.x", "request": "2.11.x", "redis": "0.8.x", "ws": "0.4.x", "shot": "0.0.x", "handlebars": "1.0.x", "mongodb": "1.1.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.8.3", "dist": { "shasum": "2a736ad2d3e44e31dc440751e78394640b38d59f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.8.3.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.8.4": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.8.4", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "mac": "0.x.x", "request": "2.11.x", "redis": "0.8.x", "ws": "0.4.x", "shot": "0.0.x", "handlebars": "1.0.x", "mongodb": "1.1.x", "multipart-parser": "0.x.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.8.4", "dist": { "shasum": "c4d1864c6b6494b536927227f08e38241227bc0a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.8.4.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.9.0": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.9.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "oz": "0.0.x", "request": "2.11.x", "redis": "0.8.x", "shot": "0.0.x", "mongodb": "1.1.x", "multipart-parser": "0.x.x", "lout": "0.x.x", "hapi-helmet": "0.x.x", "mime": "~1.2.7" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.9.0", "dist": { "shasum": "d3fa6a579a267dfb7c2f2639b76d94e81dc6d00f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.9.0.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.9.1": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.9.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "oz": "0.0.x", "request": "2.11.x", "redis": "0.8.x", "shot": "0.0.x", "mongodb": "1.1.x", "multipart-parser": "0.x.x", "lout": "0.x.x", "hapi-helmet": "0.x.x", "mime": "~1.2.7" }, "devDependencies": { "mocha": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.9.1", "dist": { "shasum": "e54dd7c0cb931207ab3cda295163c1f6a82860ca", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.9.1.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.9.2": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.9.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "async": "0.1.x", "oz": "0.0.x", "request": "2.11.x", "redis": "0.8.x", "shot": "0.0.x", "mongodb": "1.1.x", "formidable": "1.0.x", "lout": "0.x.x", "hapi-helmet": "0.x.x", "mime": "~1.2.7", "hawk": "0.0.x" }, "devDependencies": { "mocha": "1.x.x", "sinon": "1.3.4", "chai": "1.2.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.9.2", "dist": { "shasum": "b986c5413961df2425008a764e55e29cb73f8453", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.9.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.10.0": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.10.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.0.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.0.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.10.0", "dist": { "shasum": "f01b02faa48f40c8a3dcf05225c77fbea6578c42", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.10.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.10.1": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.10.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.0.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.0.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.10.1", "dist": { "shasum": "1dc7258487abc77ede83a556bed3cde436c23aed", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.10.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.11.0": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.11.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.3.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.0.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.11.0", "dist": { "shasum": "57d0e73eea9302d28967bc7eeb169e21bc34ae1f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.11.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.11.1": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.11.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.3.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.0.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.11.1", "dist": { "shasum": "a3f53a7d926a423e3681841b2790bb9a332cd9c3", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.11.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.11.2": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.11.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.3.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.0.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.11.2", "dist": { "shasum": "0d563000ef2c11b980837966811ac9979d9a24e0", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.11.2.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.11.3": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.11.3", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "boom": "0.0.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.5.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.0.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.11.3", "dist": { "shasum": "487082db71a9f867c1e8c909fb42582c543e35ff", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.11.3.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.12.0": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.12.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.2.x", "boom": "0.2.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.6.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.1.x", "cryptiles": "0.0.x", "iron": "0.1.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": ">= 1.0.8", "jade": "~0.28.1" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.12.0", "dist": { "shasum": "37428569ca26ce9915f76b14eed574ae7481d099", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.12.0.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.13.0": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.13.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.3.x", "boom": "0.2.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.6.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.1.x", "cryptiles": "0.0.x", "iron": "0.1.x", "semver": "1.1.0" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": ">= 1.0.8", "jade": "~0.28.1" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.13.0", "dist": { "shasum": "e19c4904afebe687399afaec0db582da9e1cfa53", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.13.0.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.13.1": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.13.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.3.x", "boom": "0.2.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.6.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.1.x", "cryptiles": "0.0.x", "iron": "0.1.x", "semver": "1.1.0" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": ">= 1.0.8", "jade": "~0.28.1" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.13.1", "dist": { "shasum": "bdaa1939b924a606aab41499c54117390db9486f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.13.1.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.13.2": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.13.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.3.x", "boom": "0.2.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.6.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.1.x", "cryptiles": "0.0.x", "iron": "0.1.x", "semver": "1.1.0" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": ">= 1.0.8", "jade": "~0.28.1" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.13.2", "dist": { "shasum": "75f15d0f4d3775fefda24e43dd82008a6b748b22", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.13.2.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.11.4": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.11.4", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.0.x", "boom": "0.0.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.5.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.0.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.11.4", "dist": { "shasum": "c21611aef46e8dba6d51962b038a05db531e5bae", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.11.4.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.13.3": { "name": "hapi", "description": "HTTP API Server framework", "homepage": "http://hapijs.com", "version": "0.13.3", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "authentication", "api", "router" ], "engines": { "node": ">=0.8.0" }, "dependencies": { "hoek": "0.3.x", "boom": "0.2.x", "joi": "0.0.x", "lout": "0.0.x", "hapi-helmet": "0.0.x", "hapi-log": "0.0.x", "hawk": "0.6.x", "shot": "0.0.x", "oz": "0.0.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.1.x", "cryptiles": "0.0.x", "iron": "0.1.x", "semver": "1.1.0" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": ">= 1.0.8", "jade": "~0.28.1" }, "scripts": { "test": "make test && make unit" }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.13.3", "dist": { "shasum": "4ab9aa83b5d2ef7d4cdbe0953e6dd6d8e2d5e452", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.13.3.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.14.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.14.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.4.x", "boom": "0.3.x", "joi": "0.0.x", "good": "0.0.x", "hawk": "0.7.x", "shot": "0.0.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.1.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x", "jade": "0.28.x", "blanket": "1.0.x", "travis-cov": "0.2.x", "complexity-report": "0.x.x", "furball": "0.0.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test && make test-cov", "blanket": { "pattern": "//^((?!/node_modules/)(?!/test/helpers/)(?!/test/unit/)(?!/test/integration/).)*$/ig", "onlyCwd": true, "data-cover-flags": { "branchTracking": true } }, "travis-cov": { "threshold": 100 } }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.14.0", "dist": { "shasum": "8b54d7b1b5f301284ba8b4c664fa88739c264aab", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.14.0.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.14.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.14.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.4.x", "boom": "0.3.x", "joi": "0.0.x", "good": "0.0.x", "hawk": "0.7.x", "shot": "0.0.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.1.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x", "jade": "0.28.x", "blanket": "1.0.x", "travis-cov": "0.2.x", "complexity-report": "0.x.x", "furball": "0.0.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test && make test-cov", "blanket": { "pattern": "//^((?!/node_modules/)(?!/test/helpers/)(?!/test/unit/)(?!/test/integration/).)*$/ig", "onlyCwd": true, "data-cover-flags": { "branchTracking": true } }, "travis-cov": { "threshold": 100 } }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.14.1", "dist": { "shasum": "46277e2bb53042472288d564797654e62287ecdc", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.14.1.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.14.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.14.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.5.x", "boom": "0.3.x", "joi": "0.1.x", "good": "0.0.x", "hawk": "0.7.x", "shot": "0.0.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.11.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.1.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x", "jade": "0.28.x", "blanket": "1.0.x", "travis-cov": "0.2.x", "complexity-report": "0.x.x", "furball": "0.0.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test && make test-cov", "blanket": { "pattern": "//^((?!/node_modules/)(?!/test/helpers/)(?!/test/unit/)(?!/test/integration/).)*$/ig", "onlyCwd": true, "data-cover-flags": { "branchTracking": true } }, "travis-cov": { "threshold": 100 } }, "licenses": [ { "type": "BSD", "url": "http://github.com/walmartlabs/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.14.2", "dist": { "shasum": "9a2d5039cbd70d8f93f6bbd1f67fe556d88bb1d7", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.14.2.tgz" }, "_from": ".", "_npmVersion": "1.2.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.6.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.14.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "mocha": "1.x.x", "chai": "1.x.x", "sinon": "1.x.x", "handlebars": "1.0.x", "jade": "0.28.x", "blanket": "1.0.x", "travis-cov": "0.2.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test && make test-cov", "blanket": { "pattern": "//^((?!/node_modules/)(?!/test/helpers/)(?!/test/unit/)(?!/test/integration/).)*$/ig", "onlyCwd": true, "data-cover-flags": { "branchTracking": true } }, "travis-cov": { "threshold": 100 } }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.0", "dist": { "shasum": "fcf7c945a64a52dc27e0ede49dcd5ba6b6ffac4b", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.0.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.6.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.14.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.1", "dist": { "shasum": "db1e556d4c29ccfd1d5922adc74d4653eb94d1fe", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.1.tgz" }, "_from": ".", "_npmVersion": "1.2.14", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.7.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.2", "dist": { "shasum": "8ad425e515a5a7142606db935d1ba59b7237154f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.2.tgz" }, "_from": ".", "_npmVersion": "1.2.14", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.3", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.7.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.3", "dist": { "shasum": "2d8ea344d60a824effabf07426e3e5110d5ac42f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.3.tgz" }, "_from": ".", "_npmVersion": "1.2.2", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.4": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.4", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.7.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.4", "dist": { "shasum": "deb4916116363241b41d464a5234b0b5090c7d0d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.4.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.5": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.5", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.6.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.5", "dist": { "shasum": "622fc4a6535f9cf7a773d0c2e5343605bba6915e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.5.tgz" }, "_npmVersion": "1.1.65", "_npmUser": { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.6": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.6", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.6.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.6", "_from": ".", "dist": { "shasum": "bb09a7c3092da7731bcccdf2fac8fdde1d51a253", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.6.tgz" }, "_npmVersion": "1.2.14", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.7": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.7", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.6.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.7", "_from": ".", "dist": { "shasum": "869a499fcbc0d34f192934cac11b26d8c3ce75f7", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.7.tgz" }, "_npmVersion": "1.2.14", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.8": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.8", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.6.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.8", "_from": ".", "dist": { "shasum": "006b6142f48552da30de0398479003fa91df38b8", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.8.tgz" }, "_npmVersion": "1.2.14", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.15.9": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.15.9", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.6.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.10.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.2.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.15.9", "_from": ".", "dist": { "shasum": "f97bcfa29992669f88512b60eeeaba81f00c3eb0", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.15.9.tgz" }, "_npmVersion": "1.2.11", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "0.16.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "0.16.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.8.x" }, "dependencies": { "hoek": "0.7.x", "boom": "0.3.x", "joi": "0.2.x", "hawk": "0.11.x", "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.16.x", "formidable": "1.0.x", "mime": "1.2.x", "catbox": "0.4.x", "json-stringify-safe": "3.0.x", "cryptiles": "0.1.x", "iron": "0.2.x", "lru-cache": "2.2.x", "optimist": "0.3.x", "negotiator": "0.2.x" }, "devDependencies": { "lab": "0.0.x", "handlebars": "1.0.x", "jade": "0.28.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@0.16.0", "dist": { "shasum": "fc8aca718572b3391cacf842ffc4d1160f322175", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.16.0.tgz" }, "_from": ".", "_npmVersion": "1.2.14", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.0.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.8.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.5.x", "hawk": "0.13.x", "shot": "0.2.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "request": "2.20.x", "formidable": "1.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@1.0.0", "dist": { "shasum": "a39b490685faa6202a774f125b5511fdffa39172", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.0.0.tgz" }, "_from": ".", "_npmVersion": "1.2.18", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.0.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.8.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.5.x", "hawk": "0.13.x", "shot": "0.2.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "request": "2.21.x", "formidable": "1.0.13", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@1.0.1", "dist": { "shasum": "ab38b4a71e28ee4d7ee2f625152ef8255b375ff4", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.0.1.tgz" }, "_from": ".", "_npmVersion": "1.2.18", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.0.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.0.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.8.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.5.x", "hawk": "0.13.x", "shot": "0.2.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "request": "2.21.x", "formidable": "1.0.13", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.0.2", "dist": { "shasum": "9cc5c35435694b734f74d9456e98b11991780e9e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.0.2.tgz" }, "_from": ".", "_npmVersion": "1.2.19", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.0.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.0.3", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.8.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.5.x", "hawk": "0.13.x", "shot": "0.3.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "request": "2.21.x", "formidable": "1.0.13", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.0.3", "dist": { "shasum": "db4ad59ae788c77c0d04f385b0802d83dd954db8", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.0.3.tgz" }, "_from": ".", "_npmVersion": "1.2.19", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.1.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.8.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.5.x", "hawk": "0.13.x", "shot": "0.3.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "request": "2.21.x", "formidable": "1.0.13", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.1.0", "dist": { "shasum": "631a9558455317d5d1d31ac2d3476c34cef02023", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.1.0.tgz" }, "_from": ".", "_npmVersion": "1.2.19", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.2.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.2.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.5" }, "dependencies": { "hoek": "0.8.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.13.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@1.2.0", "dist": { "shasum": "ffd90ee427a22f928c24b7ef943cc61693cc1bb7", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.2.0.tgz" }, "_from": ".", "_npmVersion": "1.2.18", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.3.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.3.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@1.3.0", "dist": { "shasum": "02a9a6c9b21a62b3ebbef05370adab954844bd6b", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.3.0.tgz" }, "_from": ".", "_npmVersion": "1.2.18", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.4.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.4.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.4.0", "dist": { "shasum": "d2951f2967e08274a3152703743f298da33b2033", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.4.0.tgz" }, "_from": ".", "_npmVersion": "1.2.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.5.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.5.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.5.0", "dist": { "shasum": "55beee98b2eb5def6357e3849124a3670b36dcfe", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.5.0.tgz" }, "_from": ".", "_npmVersion": "1.2.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.6.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.6.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@1.6.0", "dist": { "shasum": "d6b6432ae12e759685c7674dae4fa8e0df0d9c7c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.6.0.tgz" }, "_from": ".", "_npmVersion": "1.2.18", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.6.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.6.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.6.1", "dist": { "shasum": "b0a4c835fc9c60acaa3a026a2be2cba17f34d639", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.6.1.tgz" }, "_from": ".", "_npmVersion": "1.2.23", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.6.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.6.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "_id": "hapi@1.6.2", "dist": { "shasum": "fa5391bdd1a2077cdfd85ee3b0981b5ebca3868c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.6.2.tgz" }, "_from": ".", "_npmVersion": "1.2.18", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.7.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.7.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.7.0", "dist": { "shasum": "72adbff309b4f954f9173293d376c6dcb759fe63", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.7.0.tgz" }, "_from": ".", "_npmVersion": "1.2.24", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.7.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.7.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.7.1", "dist": { "shasum": "07412ce4813badc60e9efb85df1a814047549b57", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.7.1.tgz" }, "_from": ".", "_npmVersion": "1.2.24", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.7.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.7.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.7.2", "dist": { "shasum": "f1baca56aa4ac79150de6f2c4f5741ab520e1577", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.7.2.tgz" }, "_from": ".", "_npmVersion": "1.2.24", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.7.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.7.3", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.7.3", "dist": { "shasum": "6ad18e80832dd593b27e732f2782de05c638e81b", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.7.3.tgz" }, "_from": ".", "_npmVersion": "1.2.23", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.8.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.8.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.8.0", "dist": { "shasum": "2de30af1415b7f8cb17e9a4709b38956c56d2591", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.8.0.tgz" }, "_from": ".", "_npmVersion": "1.2.23", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.8.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.8.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.8.1", "dist": { "shasum": "ef818dbbce0e65a97ba24867edd18247f708c29f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.8.1.tgz" }, "_from": ".", "_npmVersion": "1.2.30", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.8.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.8.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.6" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "0.15.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.4.x", "negotiator": "0.2.x", "semver": "1.1.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.21.x", "handlebars": "1.0.x", "jade": "0.30.x", "complexity-report": "0.x.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.8.2", "dist": { "shasum": "ed4940d0b1ed5a4ef9e9d2203da72766d4b00caa", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.8.2.tgz" }, "_from": ".", "_npmVersion": "1.2.32", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.8.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.8.3", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "1.x.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.8.3", "dist": { "shasum": "31077a025ecccb2e1e762dc86569297506e0bc51", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.8.3.tgz" }, "_from": ".", "_npmVersion": "1.2.32", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.9.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.9.0", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.3.x", "catbox": "0.6.x", "hawk": "1.x.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.1.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.9.0", "dist": { "shasum": "b809278c36ed6e89489af5089a706a860887c9d2", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.9.0.tgz" }, "_from": ".", "_npmVersion": "1.2.32", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.9.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.9.1", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.4.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.9.1", "dist": { "shasum": "96cda90c339196e6113988a2f10998231c56e04d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.9.1.tgz" }, "_from": ".", "_npmVersion": "1.3.5", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.9.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.9.2", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.4.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.9.2", "dist": { "shasum": "22f8c09edfabec4976040ae34900a29d97d3165c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.9.2.tgz" }, "_from": ".", "_npmVersion": "1.3.5", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.9.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.9.3", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.4.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.9.3", "dist": { "shasum": "5ffdd19551ed1960c6724872e23a2fbdfc9fe568", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.9.3.tgz" }, "_from": ".", "_npmVersion": "1.3.5", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.9.4": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.9.4", "author": { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com" } ], "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "0.9.x", "boom": "0.4.x", "joi": "0.4.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "0.4.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.9.4", "dist": { "shasum": "5932774b9f4511d3e4c40a99e8c46ce633ea21b4", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.9.4.tgz" }, "_from": ".", "_npmVersion": "1.3.5", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.9.5": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.9.5", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.0.x", "boom": "1.0.x", "joi": "1.1.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "1.0.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.9.5", "dist": { "shasum": "eb851035f6ab06208f786b89b3aec51ff8fd78f4", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.9.5.tgz" }, "_from": ".", "_npmVersion": "1.3.5", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.9.6": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.9.6", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.0.x", "boom": "1.0.x", "joi": "1.1.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "1.0.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.9.6", "dist": { "shasum": "3b58fc341de7c61e1a77daba8226659e3e84f0e9", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.9.6.tgz" }, "_from": ".", "_npmVersion": "1.3.5", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.9.7": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.9.7", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.0.x", "boom": "1.0.x", "joi": "1.1.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "1.1.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.9.7", "dist": { "shasum": "b54eb8ed49fa6658839d8c9de6ed765de718f4f5", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.9.7.tgz" }, "_from": ".", "_npmVersion": "1.3.5", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.10.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.10.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.0.x", "boom": "1.0.x", "joi": "1.1.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "1.1.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.10.0", "dist": { "shasum": "f033274f9bec25e394f7b3665a48bf28ad40310c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.10.0.tgz" }, "_from": ".", "_npmVersion": "1.3.8", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.11.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.11.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.0.x", "boom": "1.0.x", "joi": "1.1.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "1.1.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.11.0", "dist": { "shasum": "6e0f5a744b2c9c4250d9e52e7662ddb72d592b1c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.11.0.tgz" }, "_from": ".", "_npmVersion": "1.3.5", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.11.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.11.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.0.x", "boom": "1.0.x", "joi": "1.1.x", "catbox": "1.0.x", "hawk": "1.x.x", "shot": "1.1.x", "cryptiles": "0.2.x", "iron": "0.3.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "0.2.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.11.1", "dist": { "shasum": "a11faa96fa069c2b582fca17e4002ee7297fa441", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.11.1.tgz" }, "_from": ".", "_npmVersion": "1.3.8", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.12.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.12.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.12.0", "dist": { "shasum": "b8c3f224ae7dfeb1bf406b57c58e6fb044748a1a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.12.0.tgz" }, "_from": ".", "_npmVersion": "1.3.8", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.13.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.13.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.13.0", "dist": { "shasum": "3d83bf637706b1eeb8db55e4d8c82c37596a05c1", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.13.0.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "wyatt", "email": "wpreul@gmail.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.14.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.14.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "2.1.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.14.0", "dist": { "shasum": "d15e59f9a4dd429653f938d40799beb57242e451", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.14.0.tgz" }, "_from": ".", "_npmVersion": "1.3.8", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.15.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.15.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.15.0", "dist": { "shasum": "27fcec6485cd79c332cba87eaed480ff6b2ab8ce", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.15.0.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.16.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.16.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.0.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.16.0", "dist": { "shasum": "f578b64860263f2333041294e124478f03593063", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.16.0.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.16.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.16.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.16.1", "dist": { "shasum": "e81cf98c1fd9bb46d2f96ec76de1f5cfe3dcfc4d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.16.1.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.17.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.17.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.17.0", "dist": { "shasum": "c3a7abfc9f121f8ad6016bed7b569fbaf3ada51a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.17.0.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.18.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.18.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.18.0", "dist": { "shasum": "0ae1cd7a01a29fbac56abb54aa81c935507f70f9", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.18.0.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.19.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.19.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.19.0", "dist": { "shasum": "5866589093c77fc265f2f5499f63290460b4fe0f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.19.0.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.19.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.19.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.19.1", "dist": { "shasum": "f2585f1fa738d4fc8bf86afa0f4f8df0d94793b4", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.19.1.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.19.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.19.2", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.19.2", "dist": { "shasum": "91e57668c37b26b0b4425debf1f85d9d955372a6", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.19.2.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.19.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.19.3", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.19.3", "dist": { "shasum": "420996fac6139065187357e737c7f7e16d135b2d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.19.3.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.19.4": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.19.4", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.19.4", "dist": { "shasum": "d3928bc81fe8dac9db604fb4d8271c833883ba66", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.19.4.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.19.5": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.19.5", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.19.5", "dist": { "shasum": "e6c0584019bafc53a481ca03171b0a6133d37979", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.19.5.tgz" }, "_from": ".", "_npmVersion": "1.3.11", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "1.20.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "1.20.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "1.x.x", "joi": "2.x.x", "joi-v1": "1.x.x", "catbox": "1.x.x", "hawk": "1.x.x", "shot": "1.x.x", "cryptiles": "1.x.x", "iron": "1.x.x", "confidence": "0.8.x", "async": "0.2.x", "multiparty": "3.0.x", "mime": "1.2.x", "lru-cache": "2.3.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.0.x", "alce": "1.0.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.22.x", "handlebars": "1.1.x", "jade": "0.33.x", "hapi-plugin-test": "1.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@1.20.0", "dist": { "shasum": "c35b8ec66309249deae31c96127f0e55ca2b1828", "tarball": "http://registry.npmjs.org/hapi/-/hapi-1.20.0.tgz" }, "_from": ".", "_npmVersion": "1.3.14", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ], "directories": { } }, "2.0.0-preview": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.0.0-preview", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "2.x.x", "joi": "2.x.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.1.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.30.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.0.0-preview", "dist": { "shasum": "1a94e59f782b81b501927e20c14ecc515b199352", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.0.0-preview.tgz" }, "_from": ".", "_npmVersion": "1.3.22", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "0.5.1-a": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.5.1-a", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.1.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "redis": "0.x.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4" }, "scripts": { "test": "make test && make unit" }, "_id": "hapi@0.5.1-a", "dist": { "shasum": "b1ed7d988c720b3a5f033ddfa15f25e7caa3eb99", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.5.1a.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.5.1-b": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.5.1-b", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.1.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "redis": "0.x.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4" }, "scripts": { "test": "make test && make unit" }, "_id": "hapi@0.5.1-b", "dist": { "shasum": "244171c78613402aa36fb0863e7d97aebbd826c1", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.5.1b.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.5.1-b2": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.5.1-b2", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.1.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "redis": "0.x.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4" }, "scripts": { "test": "make test && make unit" }, "_id": "hapi@0.5.1-b2", "dist": { "shasum": "fd8fadc6923dc091956ef3a30e17a1fb3e512bad", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.5.1b2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "0.5.1-c": { "name": "hapi", "description": "HTTP API Server framework", "version": "0.5.1-c", "author": { "name": "Eran Hammer-Lahav", "email": "eran@hueniverse.com" }, "repository": { "type": "git", "url": "git://github.com/walmartlabs/hapi" }, "main": "index", "keywords": [ "http", "mac", "authentication", "oauth", "api", "director" ], "engines": { "node": ">=0.6.0" }, "dependencies": { "async": "0.1.18", "director": "1.1.x", "mac": "0.x.x", "validator": "0.x.x", "emailjs": "0.x.x", "request": "2.9.x", "redis": "0.x.x" }, "devDependencies": { "mocha": "1.x.x", "should": "1.x.x", "sinon": "1.3.4" }, "scripts": { "test": "make test && make unit" }, "_id": "hapi@0.5.1-c", "dist": { "shasum": "0b56b505cb57d6293553c6d4156cf72a15c15048", "tarball": "http://registry.npmjs.org/hapi/-/hapi-0.5.1c.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" } ], "directories": { } }, "2.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.0.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "2.x.x", "joi": "2.x.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.1.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "request": "2.30.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.0.0", "dist": { "shasum": "317e898487621efbc6ed7ffd3340456e6bfc13b4", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.0.0.tgz" }, "_from": ".", "_npmVersion": "1.3.23", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "2.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.1.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "2.x.x", "joi": "2.x.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.1.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.1.0", "dist": { "shasum": "63ec72bd219d45b192738a731db22a8655106fe5", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.1.0.tgz" }, "_from": ".", "_npmVersion": "1.3.24", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "2.1.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.1.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "2.x.x", "joi": "2.x.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.1.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.1.1", "dist": { "shasum": "161d01d22e7f5d102198bf85ad95b24bc7872f73", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.1.1.tgz" }, "_from": ".", "_npmVersion": "1.3.24", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "directories": { } }, "2.1.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.1.2", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "1.x.x", "boom": "2.x.x", "joi": "2.x.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.1.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.1.2", "dist": { "shasum": "66f60d74705da6f526519287aa7038c5c0ef1657", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.1.2.tgz" }, "_from": ".", "_npmVersion": "1.3.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "2.2.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.2.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "^1.4.x", "boom": "2.x.x", "joi": "^2.7.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.1.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.2.0", "dist": { "shasum": "21703e73730768b22665bc33770fc25d84aa7e72", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.2.0.tgz" }, "_from": ".", "_npmVersion": "1.3.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "2.3.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.3.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "^1.4.x", "boom": "^2.2.x", "joi": "^2.7.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.1.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.2.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.3.0", "dist": { "shasum": "3c579c5292593ccab174a847c690c539c9068e37", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.3.0.tgz" }, "_from": ".", "_npmVersion": "1.3.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "2.4.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.4.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "^1.4.x", "boom": "^2.2.x", "joi": "^2.7.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.4.0", "dist": { "shasum": "bfe7c6792ec720ff0d187bf912f78275cd82bfd4", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.4.0.tgz" }, "_from": ".", "_npmVersion": "1.3.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "2.5.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.5.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "^1.4.x", "boom": "^2.2.x", "joi": "^2.7.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.5.0", "dist": { "shasum": "6acb6e52775814a679184d5ffe85c74d9fe5cdeb", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.5.0.tgz" }, "_from": ".", "_npmVersion": "1.4.0", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "2.6.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "2.6.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": "0.10.x" }, "dependencies": { "hoek": "^1.5.x", "boom": "^2.2.x", "joi": "^2.7.x", "catbox": "1.x.x", "shot": "1.x.x", "nipple": "2.x.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "dtrace-provider": "0.2.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@2.6.0", "dist": { "shasum": "0af9140df22dbe5c1728e97da565da015f068134", "tarball": "http://registry.npmjs.org/hapi/-/hapi-2.6.0.tgz" }, "_from": ".", "_npmVersion": "1.4.4", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "3.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "3.0.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^1.5.x", "boom": "^2.2.x", "joi": "^2.8.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@3.0.0", "dist": { "shasum": "9a4462e8a0fe8988e16d32313945dd946abced4b", "tarball": "http://registry.npmjs.org/hapi/-/hapi-3.0.0.tgz" }, "_from": ".", "_npmVersion": "1.4.4", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "3.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "3.0.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^1.5.x", "boom": "^2.2.x", "joi": "^2.8.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@3.0.1", "dist": { "shasum": "121fa3cf8fe95113e7bb5dd0707ada3dde598fc2", "tarball": "http://registry.npmjs.org/hapi/-/hapi-3.0.1.tgz" }, "_from": ".", "_npmVersion": "1.4.4", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "3.0.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "3.0.2", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^1.5.x", "boom": "^2.2.x", "joi": "^2.8.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@3.0.2", "dist": { "shasum": "fd2c0f0ac2655896d899d1b9ec9dfd8e3135aab7", "tarball": "http://registry.npmjs.org/hapi/-/hapi-3.0.2.tgz" }, "_from": ".", "_npmVersion": "1.4.4", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "3.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "3.1.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^1.5.x", "boom": "^2.4.x", "joi": "^2.9.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "1.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@3.1.0", "dist": { "shasum": "b4fad1719ef025789655d9b17f3bba81c9f2c496", "tarball": "http://registry.npmjs.org/hapi/-/hapi-3.1.0.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "4.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.0.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "3.x.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.0.0", "dist": { "shasum": "ec761412c986137e336aa666447d57987d74a74f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.0.0.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" }, { "name": "thegoleffect", "email": "thegoleffect@gmail.com" }, { "name": "wyatt", "email": "wpreul@gmail.com" } ] }, "4.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.0.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^3.1.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.0.1", "dist": { "shasum": "f630331514aa247ea0cdc1de9bae8e5e53c4defe", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.0.1.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "4.0.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.0.2", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^3.1.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.0.2", "dist": { "shasum": "cdb390b6338d7a4a7df1c0ed2c190657ab343e03", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.0.2.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "4.0.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.0.3", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^3.1.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.2.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.0.3", "dist": { "shasum": "9a268ad107cd2b7b5bdda31bb3ed6f9fc35069a5", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.0.3.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "4.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.1.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^3.1.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.1.0", "dist": { "shasum": "d7a199fb0801e008f6b77896e37e71485a15d0f9", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.1.0.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "4.1.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.1.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^3.1.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.1.1", "dist": { "shasum": "01022fd5d728265be3f0db365bb56256b4e74676", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.1.1.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "4.1.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.1.2", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^3.1.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.1.2", "dist": { "shasum": "234668424e124a13d08fa32eeb01248820fe94fc", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.1.2.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "4.1.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.1.3", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^3.1.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.1.3", "dist": { "shasum": "437e4bdbf1256cb8197610b5931cba37d4c94a78", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.1.3.tgz" }, "_from": ".", "_npmVersion": "1.4.6", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "4.1.4": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "4.1.4", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^3.1.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.2.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@4.1.4", "_shasum": "b5e999d7b26d75b8582fc91346bcf5b43a173300", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "b5e999d7b26d75b8582fc91346bcf5b43a173300", "tarball": "http://registry.npmjs.org/hapi/-/hapi-4.1.4.tgz" } }, "5.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "5.0.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^4.2.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@5.0.0", "_shasum": "284cecc3e86f9aa1b3e25a513b5d2d7d20b0e42e", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "284cecc3e86f9aa1b3e25a513b5d2d7d20b0e42e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-5.0.0.tgz" } }, "5.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "5.1.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "2.x.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "hapi-plugin-test": "2.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@5.1.0", "_shasum": "9e09f2eabc8f4b6a59732d55c0fad369d32e7a21", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "9e09f2eabc8f4b6a59732d55c0fad369d32e7a21", "tarball": "http://registry.npmjs.org/hapi/-/hapi-5.1.0.tgz" } }, "6.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.0.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@6.0.0", "_shasum": "7c8d65947d0273a35efc702e352b57a062f2c69b", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "7c8d65947d0273a35efc702e352b57a062f2c69b", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.0.0.tgz" } }, "6.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.0.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@6.0.1", "_shasum": "4c1dd0b1f20a1be3fd741bbf33fe72d567c3d3c3", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "4c1dd0b1f20a1be3fd741bbf33fe72d567c3d3c3", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.0.1.tgz" } }, "6.0.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.0.2", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@6.0.2", "_shasum": "172b00f35c3f4b0d8cc28bbba118114c7065e5f7", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "172b00f35c3f4b0d8cc28bbba118114c7065e5f7", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.0.2.tgz" } }, "6.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.1.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@6.1.0", "_shasum": "37ccdc1126f6a86b3dfc060e5f0c1a4356e7e4f5", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "37ccdc1126f6a86b3dfc060e5f0c1a4356e7e4f5", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.1.0.tgz" } }, "6.2.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.2.0", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "^2.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.8.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@6.2.0", "_shasum": "70724851ffc12394535b8e3b90a97461091450de", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "70724851ffc12394535b8e3b90a97461091450de", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.2.0.tgz" } }, "6.2.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.2.1", "repository": { "type": "git", "url": "git://github.com/spumko/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.22" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "3.x.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.9.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/spumko/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Eran Hammer", "email": "eran@hueniverse.com", "url": "http://hueniverse.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "bugs": { "url": "https://github.com/spumko/hapi/issues" }, "_id": "hapi@6.2.1", "_shasum": "b86f2abb07023e7af0b81a4e8ddd4ac79662f89a", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "b86f2abb07023e7af0b81a4e8ddd4ac79662f89a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.2.1.tgz" } }, "6.2.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.2.2", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "3.x.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.9.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "16a4b30306134a20a0c486bf3865da923289985a", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.2.2", "_shasum": "74ea181cca9cb4492465bec2125debf0c96a1ec3", "_from": ".", "_npmVersion": "1.4.14", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "74ea181cca9cb4492465bec2125debf0c96a1ec3", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.2.2.tgz" } }, "6.3.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.3.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "^3.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.9.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "0.6.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "84bc2bf137e625e0e27f088bc74bcdd022c53735", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.3.0", "_shasum": "d720ddba724f98a521d4af90e2df52672838d24e", "_from": ".", "_npmVersion": "1.4.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "d720ddba724f98a521d4af90e2df52672838d24e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.3.0.tgz" } }, "6.4.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.4.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "hoek": "^2.3.x", "boom": "^2.4.x", "joi": "^4.4.x", "catbox": "^3.1.x", "catbox-memory": "1.x.x", "shot": "1.x.x", "nipple": "^2.4.x", "cryptiles": "2.x.x", "iron": "2.x.x", "topo": "1.x.x", "kilt": "^1.1.x", "async": "0.9.x", "multiparty": "3.2.x", "mime": "1.2.x", "lru-cache": "2.5.x", "optimist": "0.6.x", "negotiator": "0.4.x", "semver": "2.3.x", "qs": "1.x.x" }, "devDependencies": { "lab": "3.x.x", "handlebars": "1.2.x", "jade": "1.0.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "ac04e5197671c25477356e9b521d9771b8b61907", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.4.0", "_shasum": "1c0b1874ec1b919e42b75dc76d8ccde774b25e2e", "_from": ".", "_npmVersion": "1.4.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "1c0b1874ec1b919e42b75dc76d8ccde774b25e2e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.4.0.tgz" } }, "6.5.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.5.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "boom": "^2.4.x", "catbox": "^3.1.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "hoek": "^2.3.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "nipple": "^2.4.x", "shot": "1.x.x", "topo": "1.x.x", "qs": "1.x.x", "lru-cache": "2.5.x", "mime-types": "1.0.x", "multiparty": "3.2.x", "negotiator": "0.4.x", "optimist": "0.6.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "jade": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "5dc8d4b44ba0d2760481fc9d8f189b05661273d6", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.5.0", "_shasum": "dd0365ea3cc59fbea202ef2d2353d6d9376f6b09", "_from": ".", "_npmVersion": "1.4.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "dd0365ea3cc59fbea202ef2d2353d6d9376f6b09", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.5.0.tgz" } }, "6.5.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.5.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "boom": "^2.4.x", "catbox": "^3.1.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "hoek": "^2.3.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "nipple": "^2.4.x", "shot": "1.x.x", "topo": "1.x.x", "qs": "1.x.x", "lru-cache": "2.5.x", "mime-types": "1.0.x", "multiparty": "3.2.x", "negotiator": "0.4.x", "optimist": "0.6.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "jade": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "7cc8996802d6e2243db85a1e5f0d0421971f34de", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.5.1", "_shasum": "ad093b19a430434bb2749f73e2fc96205a87c4b7", "_from": ".", "_npmVersion": "1.4.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "ad093b19a430434bb2749f73e2fc96205a87c4b7", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.5.1.tgz" } }, "6.6.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.6.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "boom": "^2.4.x", "catbox": "^3.1.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "hoek": "^2.3.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "wreck": "3.x.x", "shot": "1.x.x", "statehood": "1.x.x", "topo": "1.x.x", "qs": "1.x.x", "lru-cache": "2.5.x", "mime-types": "1.0.x", "multiparty": "3.2.x", "negotiator": "0.4.x", "optimist": "0.6.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "jade": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "9ade47eb5ea1382525b47ea87a7645e85e9fde0b", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.6.0", "_shasum": "3bdbc3570950fac3eee43bd8a4b73c9518b2138a", "_from": ".", "_npmVersion": "1.4.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "3bdbc3570950fac3eee43bd8a4b73c9518b2138a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.6.0.tgz" } }, "6.7.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.7.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "boom": "^2.4.x", "catbox": "^3.1.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "hoek": "^2.3.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "wreck": "3.x.x", "shot": "1.x.x", "statehood": "1.x.x", "topo": "1.x.x", "qs": "2.x.x", "lru-cache": "2.5.x", "mime-types": "1.0.x", "multiparty": "3.2.x", "negotiator": "0.4.x", "optimist": "0.6.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "jade": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "99e4f86ed9bbe74f6f2e5fdb9841274c67257a72", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.7.0", "_shasum": "89a335d4242d76ff533d66186f4d268c25ce2c83", "_from": ".", "_npmVersion": "1.4.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "89a335d4242d76ff533d66186f4d268c25ce2c83", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.7.0.tgz" } }, "6.7.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.7.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "boom": "^2.4.x", "catbox": "^3.1.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "hoek": "^2.3.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "wreck": "3.x.x", "shot": "1.x.x", "statehood": "1.x.x", "topo": "1.x.x", "qs": "2.x.x", "lru-cache": "2.5.x", "mime-types": "1.0.x", "multiparty": "3.2.x", "negotiator": "0.4.x", "optimist": "0.6.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "jade": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "12fa3864d1de8503098c1b5fa0a7cfcb44164043", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.7.1", "_shasum": "ff86db790367b553430cad9414cfd4f8e9687838", "_from": ".", "_npmVersion": "1.4.21", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "ff86db790367b553430cad9414cfd4f8e9687838", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.7.1.tgz" } }, "6.8.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.8.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "boom": "^2.5.x", "catbox": "^3.3.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "hoek": "^2.4.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "wreck": "5.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "topo": "1.x.x", "qs": "2.x.x", "lru-cache": "2.5.x", "mime-db": "1.0.x", "multiparty": "3.2.x", "negotiator": "0.4.x", "optimist": "0.6.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "jade": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "b6c7358f5f3fc659f87c2abac64b9a9f2cdc0ccb", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.8.0", "_shasum": "72e8edfc254f85a0c5507c7846dfb8c1a9e98a4e", "_from": ".", "_npmVersion": "1.4.23", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "72e8edfc254f85a0c5507c7846dfb8c1a9e98a4e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.8.0.tgz" } }, "6.8.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.8.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "boom": "^2.5.x", "catbox": "^3.3.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "hoek": "^2.4.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "wreck": "5.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "topo": "1.x.x", "qs": "2.x.x", "lru-cache": "2.5.x", "mime-db": "1.0.x", "multiparty": "3.2.x", "negotiator": "0.4.x", "optimist": "0.6.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "jade": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "f8100160115b15f067f93cf28967a67c982dd03e", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.8.1", "_shasum": "7ee76e4875e5eae433587e74ac26a52777cb2f90", "_from": ".", "_npmVersion": "1.4.23", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "7ee76e4875e5eae433587e74ac26a52777cb2f90", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.8.1.tgz" } }, "6.9.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.9.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.30" }, "dependencies": { "boom": "^2.5.x", "call": "1.x.x", "catbox": "^3.3.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "1.x.x", "hoek": "^2.4.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x", "lru-cache": "2.5.x", "multiparty": "3.2.x", "negotiator": "0.4.x", "optimist": "0.6.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "contributors": [ { "name": "Eran Hammer", "email": "eran@hammer.io", "url": "http://hueniverse.com" }, { "name": "Van Nguyen", "email": "the.gol.effect@gmail.com" }, { "name": "Wyatt Preul", "email": "wpreul@gmail.com", "url": "http://jsgeek.com" } ], "gitHead": "83201d29bcc8c8edc46d9ecf4f1d51b7f3a3a4ff", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.9.0", "_shasum": "bd70482595b5ac3ac0f48869f730e8e651e86b32", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "bd70482595b5ac3ac0f48869f730e8e651e86b32", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.9.0.tgz" } }, "6.10.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.10.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "boom": "^2.5.x", "bossy": "1.x.x", "call": "1.x.x", "catbox": "^3.3.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "1.x.x", "hoek": "^2.4.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x", "lru-cache": "2.5.x", "negotiator": "0.4.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "fff431f1ed934a73c2dd07aefa8c8a4f550fbb46", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.10.0", "_shasum": "2f3cf876438fb69ec001e05a5e343cea6d499e07", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "2f3cf876438fb69ec001e05a5e343cea6d499e07", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.10.0.tgz" } }, "6.11.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.11.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "bossy": "1.x.x", "call": "1.x.x", "catbox": "^3.3.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "1.x.x", "hoek": "^2.4.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x", "lru-cache": "2.5.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "c47828e335fc47c51f2564c9a02e5324f74cc47a", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.11.0", "_shasum": "015810c297c35e07d2c0003876d85568e9b5abe5", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "015810c297c35e07d2c0003876d85568e9b5abe5", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.11.0.tgz" } }, "6.11.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "6.11.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "bossy": "1.x.x", "call": "1.x.x", "catbox": "^3.3.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "1.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x", "lru-cache": "2.5.x", "semver": "2.3.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "4922578ec0d567ffb9b668e23cea15af63a8a187", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@6.11.1", "_shasum": "c7a6e9d81420367473b7f67018158a28c3a9d8cc", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "c7a6e9d81420367473b7f67018158a28c3a9d8cc", "tarball": "http://registry.npmjs.org/hapi/-/hapi-6.11.1.tgz" } }, "7.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.0.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "bossy": "1.x.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "inert": "1.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x", "lru-cache": "2.5.x" }, "devDependencies": { "lab": "4.x.x", "handlebars": "1.x.x", "form-data": "0.1.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "3702e1739357b2fe923e90327c77e164c877ed0d", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.0.0", "_shasum": "26f6e018c4a028893a3821497a0865389437dc3f", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "26f6e018c4a028893a3821497a0865389437dc3f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.0.0.tgz" } }, "7.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.0.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "145cc9eec8ebd9bb4246556eb2b5f776164de66b", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.0.1", "_shasum": "0cf1fc65c818d7b5455135d7375db222dc29038a", "_from": ".", "_npmVersion": "2.1.4", "_nodeVersion": "0.10.32", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "0cf1fc65c818d7b5455135d7375db222dc29038a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.0.1.tgz" } }, "7.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.1.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "e30bb51d7151f791e76a3dcf364cdb9456320436", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.1.0", "_shasum": "07272d9d950f4ca687375e048d3161883358c28e", "_from": ".", "_npmVersion": "2.1.4", "_nodeVersion": "0.10.32", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "07272d9d950f4ca687375e048d3161883358c28e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.1.0.tgz" } }, "7.1.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.1.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "a59c810cfe642ac7232605d9371ba66fd32e7842", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.1.1", "_shasum": "6ccd4a78f116f2afce3a6fcc58d7619bf7f0280c", "_from": ".", "_npmVersion": "2.1.4", "_nodeVersion": "0.10.32", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "6ccd4a78f116f2afce3a6fcc58d7619bf7f0280c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.1.1.tgz" } }, "7.2.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.2.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "glue": "1.x.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "2d296c1be4ed54cb636c1a83c760a5f86a7f74a5", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.2.0", "_shasum": "a26a021ebe23647869fdf609c63c9dd3c7c95218", "_from": ".", "_npmVersion": "2.1.4", "_nodeVersion": "0.10.32", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "a26a021ebe23647869fdf609c63c9dd3c7c95218", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.2.0.tgz" } }, "7.3.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.3.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "glue": "1.x.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "6a9f0a633fe86743c474afb41ae3367a4a619b90", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.3.0", "_shasum": "847ead616dea355da3f605f5c527b868534c56fa", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "847ead616dea355da3f605f5c527b868534c56fa", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.3.0.tgz" } }, "7.4.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.4.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "glue": "1.x.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "c734dbc1f77e84745e90bf2cd96eb4c362f2fe49", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.4.0", "_shasum": "ab4c0845baf2904d79373241aecfeec72d07f9bf", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "ab4c0845baf2904d79373241aecfeec72d07f9bf", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.4.0.tgz" } }, "7.5.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.5.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "glue": "1.x.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "8af6338ed842c616214ed2ee1fb8668390f83afc", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.5.0", "_shasum": "0b10d2dfe772e5b35e6643add81467d3d1971f62", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "0b10d2dfe772e5b35e6643add81467d3d1971f62", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.5.0.tgz" } }, "7.5.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.5.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.4.x", "glue": "1.x.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "0fbbb14564a1eaa0282877ec6baed45bfc989099", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.5.1", "_shasum": "c0cb41dc5d67f1f887ec17d3277876354995980c", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "c0cb41dc5d67f1f887ec17d3277876354995980c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.5.1.tgz" } }, "7.5.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.5.2", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.9.x", "glue": "1.x.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "21ab5bb840f9f4cd43a356ac97a668926d853771", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.5.2", "_shasum": "f7cab1e83ce270ce50acc2f1f54453a2315c4f0d", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "f7cab1e83ce270ce50acc2f1f54453a2315c4f0d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.5.2.tgz" } }, "8.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.0.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.10.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "5.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x", "wreck": "5.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "4432badc9bca0f009c86df9290628b0e47b078d7", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.0.0", "_shasum": "55cf985dc9cea4746e87730b041357cfa594dc93", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "55cf985dc9cea4746e87730b041357cfa594dc93", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.0.0.tgz" } }, "7.5.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "7.5.3", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "boom": "^2.5.x", "call": "1.x.x", "catbox": "4.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "2.x.x", "heavy": "1.x.x", "hoek": "^2.9.x", "glue": "1.x.x", "inert": "^1.1.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^4.4.x", "kilt": "^1.1.x", "mimos": "1.x.x", "qs": "2.x.x", "rejoice": "1.x.x", "shot": "1.x.x", "statehood": "^1.2.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "1.x.x", "wreck": "5.x.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "1.x.x", "form-data": "0.1.x", "lab": "5.x.x" }, "bin": { "hapi": "./bin/hapi" }, "scripts": { "test": "make test-cov", "test-tap": "make test-tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "cafe73d69202b792ab69ae33bccac4e9140988b6", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@7.5.3", "_shasum": "83a4c7cdde5b595a72b4d21041f72232021ec16f", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "83a4c7cdde5b595a72b4d21041f72232021ec16f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-7.5.3.tgz" } }, "8.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.1.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.10.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "5.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x", "wreck": "5.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x" }, "scripts": { "test": "node node_modules/lab/bin/lab -a code -t 100 -L", "test-tap": "node node_modules/lab/bin/lab -a code -r tap -o tests.tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "f58d899a701dd5018fad947775bc01434ba753a6", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.1.0", "_shasum": "908a64eb954c97057dc0d4f72531fc23ffa4565b", "_from": ".", "_npmVersion": "1.4.28", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "908a64eb954c97057dc0d4f72531fc23ffa4565b", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.1.0.tgz" } }, "8.2.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.2.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.10.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "5.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x", "wreck": "5.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x" }, "scripts": { "test": "node node_modules/lab/bin/lab -a code -t 100 -L", "test-tap": "node node_modules/lab/bin/lab -a code -r tap -o tests.tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "da21e9e2a5248e130e95c026acd95977538cd4c8", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.2.0", "_shasum": "7c67527da6abb4b70f0b1a1926d0aeb5d9229a76", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "7c67527da6abb4b70f0b1a1926d0aeb5d9229a76", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.2.0.tgz" } }, "8.3.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.3.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.10.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "node node_modules/lab/bin/lab -a code -t 100 -L", "test-tap": "node node_modules/lab/bin/lab -a code -r tap -o tests.tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "a172b95fbad97985aeae19b70000b2654c4c6061", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.3.0", "_shasum": "a357534d85186b41747502dc9640972cffab49c1", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "a357534d85186b41747502dc9640972cffab49c1", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.3.0.tgz" } }, "8.3.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.3.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.10.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "node node_modules/lab/bin/lab -a code -t 100 -L", "test-tap": "node node_modules/lab/bin/lab -a code -r tap -o tests.tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "2fc97fcaa909bed8596531740c0acf33fc7239a2", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.3.1", "_shasum": "62595948fca1d5d44fdf1555a01c779d175cfbbb", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "62595948fca1d5d44fdf1555a01c779d175cfbbb", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.3.1.tgz" } }, "8.4.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.4.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi" }, "main": "index", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.10.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "node node_modules/lab/bin/lab -a code -t 100 -L", "test-tap": "node node_modules/lab/bin/lab -a code -r tap -o tests.tap" }, "licenses": [ { "type": "BSD", "url": "http://github.com/hapijs/hapi/raw/master/LICENSE" } ], "gitHead": "22b87a307d1cddb9ea1451abfc7ddf9351851263", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.4.0", "_shasum": "14237847ac107076d4b32eb864de60f4bbdeb5f9", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "hueniverse", "email": "eran@hueniverse.com" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "dist": { "shasum": "14237847ac107076d4b32eb864de60f4bbdeb5f9", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.4.0.tgz" } }, "8.5.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.5.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.10.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "node node_modules/lab/bin/lab -a code -t 100 -L", "test-tap": "node node_modules/lab/bin/lab -a code -r tap -o tests.tap", "test-cov-html": "node node_modules/lab/bin/lab -a code -r html -o coverage.html", "changelog": "mdchangelog --no-prologue --no-orphan-issues --overwrite --order-milestones semver --order-issues closed_at --dependents --remote hapijs/hapi --same-org --timeout 120000" }, "license": "BSD-3-Clause", "gitHead": "5a2f8f6b7e35c47caf1be0ed7f864583d6040f6f", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.5.0", "_shasum": "cf978fbefd4e892ba85f090c002aae5759fa848e", "_from": ".", "_npmVersion": "2.10.0", "_nodeVersion": "0.10.38", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "cf978fbefd4e892ba85f090c002aae5759fa848e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.5.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "8.5.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.5.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "node node_modules/lab/bin/lab -a code -t 100 -L", "test-tap": "node node_modules/lab/bin/lab -a code -r tap -o tests.tap", "test-cov-html": "node node_modules/lab/bin/lab -a code -r html -o coverage.html", "changelog": "mdchangelog --no-prologue --no-orphan-issues --overwrite --order-milestones semver --order-issues closed_at --dependents --remote hapijs/hapi --same-org --timeout 120000" }, "license": "BSD-3-Clause", "gitHead": "a92a2542197a99aa54f82013c322f5d235ab4678", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.5.1", "_shasum": "18063589ddc95a2dc09c1794017994cf484d98a2", "_from": ".", "_npmVersion": "2.10.0", "_nodeVersion": "0.10.38", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "18063589ddc95a2dc09c1794017994cf484d98a2", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.5.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "8.5.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.5.2", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "node node_modules/lab/bin/lab -a code -t 100 -L", "test-tap": "node node_modules/lab/bin/lab -a code -r tap -o tests.tap", "test-cov-html": "node node_modules/lab/bin/lab -a code -r html -o coverage.html", "changelog": "mdchangelog --no-prologue --no-orphan-issues --overwrite --order-milestones semver --order-issues closed_at --dependents --remote hapijs/hapi --same-org --timeout 120000" }, "license": "BSD-3-Clause", "gitHead": "b22fa2f936ec4d5ca73f04fe915c4ffa0ab41d37", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.5.2", "_shasum": "db664375c37f83a6fc52edd027c50610943df7ac", "_from": ".", "_npmVersion": "2.10.0", "_nodeVersion": "0.10.38", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "db664375c37f83a6fc52edd027c50610943df7ac", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.5.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "8.5.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.5.3", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html", "changelog": "mdchangelog --no-prologue --no-orphan-issues --overwrite --order-milestones semver --order-issues closed_at --dependents --remote hapijs/hapi --same-org --timeout 120000" }, "license": "BSD-3-Clause", "gitHead": "a17e98de3b0f5811e8fda59f3593ef3e73917885", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.5.3", "_shasum": "34940e3bbab901a1542fc77251d2ceff967f572a", "_from": ".", "_npmVersion": "2.10.0", "_nodeVersion": "0.10.38", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "34940e3bbab901a1542fc77251d2ceff967f572a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.5.3.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "8.6.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.6.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html", "changelog": "mdchangelog --no-prologue --no-orphan-issues --overwrite --order-milestones semver --order-issues closed_at --dependents --remote hapijs/hapi --same-org --timeout 120000" }, "license": "BSD-3-Clause", "gitHead": "72b97a501969e8f088e9cfd42ea06ce2ccf7c8be", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.6.0", "_shasum": "064ba591455b1aefadf99b282efbf50571d4a1de", "_from": ".", "_npmVersion": "2.10.0", "_nodeVersion": "0.10.38", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "064ba591455b1aefadf99b282efbf50571d4a1de", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.6.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "8.6.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.6.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "2.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "5.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html", "changelog": "mdchangelog --no-prologue --no-orphan-issues --overwrite --order-milestones semver --order-issues closed_at --dependents --remote hapijs/hapi --same-org --timeout 120000" }, "license": "BSD-3-Clause", "gitHead": "6002768446cd3feca80c2460d196b380f3455990", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.6.1", "_shasum": "3ba7e245f79a5d54eea3ff5f70e32e86a4f2bc4d", "_from": ".", "_npmVersion": "2.10.0", "_nodeVersion": "0.10.38", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "3ba7e245f79a5d54eea3ff5f70e32e86a4f2bc4d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.6.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "8.8.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.8.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html", "changelog": "mdchangelog --no-prologue --no-orphan-issues --overwrite --order-milestones semver --order-issues closed_at --dependents --remote hapijs/hapi --same-org --timeout 120000" }, "license": "BSD-3-Clause", "gitHead": "daab96af7b0aa07ea7226702ee374c8cdc82d98f", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.8.0", "_shasum": "87e37a06e9b499e89790e2dc111aa9668b6e617f", "_from": ".", "_npmVersion": "2.10.0", "_nodeVersion": "0.10.38", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "87e37a06e9b499e89790e2dc111aa9668b6e617f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.8.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "8.8.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "8.8.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "router" ], "engines": { "node": ">=0.10.32" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "^4.2.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "h2o2": "4.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "inert": "2.x.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "1.x.x", "topo": "1.x.x", "vision": "2.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "lab": "5.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html", "changelog": "mdchangelog --no-prologue --sanitize --no-orphan-issues --overwrite --order-milestones semver --order-issues closed_at --dependents --remote hapijs/hapi --same-org --timeout 120000" }, "license": "BSD-3-Clause", "gitHead": "bc722ef68407c398178e72b104c4ee7e8eb4c696", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@8.8.1", "_shasum": "c7066fe9322e41b9e0e08315fd79f2d9985fa2ea", "_from": ".", "_npmVersion": "2.10.0", "_nodeVersion": "0.10.38", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "c7066fe9322e41b9e0e08315fd79f2d9985fa2ea", "tarball": "http://registry.npmjs.org/hapi/-/hapi-8.8.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.0.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "10451d2ca10cb5681cc3bc38100e5bd0091b39b1", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.0.0", "_shasum": "4a184c055baa451d7ee4ee51e27f0f279e02a32a", "_from": ".", "_npmVersion": "2.13.4", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "4a184c055baa451d7ee4ee51e27f0f279e02a32a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.0.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.0.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "8a6d38b05bfaec3b4a36ebd5a666cbe4675c81ad", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.0.1", "_shasum": "aa444331a087d060a07db3fb99bb4cd19add158a", "_from": ".", "_npmVersion": "2.13.4", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "aa444331a087d060a07db3fb99bb4cd19add158a", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.0.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.0.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.0.2", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "e3d59c0520e1fff340904ba0a2ae11fc220052b6", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.0.2", "_shasum": "bc249876635c7371fa018601ca5994d17854f784", "_from": ".", "_npmVersion": "2.13.4", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "bc249876635c7371fa018601ca5994d17854f784", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.0.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.0.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.0.3", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "1a541472da4b00bb72f528916b6b339b3ffc402d", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.0.3", "_shasum": "b02fc0f12f4a8e5fbc71859153be01fbf4d2e8d0", "_from": ".", "_npmVersion": "2.13.4", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "b02fc0f12f4a8e5fbc71859153be01fbf4d2e8d0", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.0.3.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.0.4": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.0.4", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "5a54937f1f4c683a4c047a825baa6b98bf8fd4c4", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.0.4", "_shasum": "ad7284447cad554254339826c24a3a85d4680f39", "_from": ".", "_npmVersion": "2.14.1", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "ad7284447cad554254339826c24a3a85d4680f39", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.0.4.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.1.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "66730f979f05525c61e28d8fb0dca45f2004b426", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.1.0", "_shasum": "d4e4d13296168628651be9376cb81fc1ad10733d", "_from": ".", "_npmVersion": "2.14.1", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "d4e4d13296168628651be9376cb81fc1ad10733d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.1.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.2.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.2.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "5b02c3dc027f478e4720ba16789261e7d350c22c", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.2.0", "_shasum": "6816b59d387012ea7ce1ce336655b02b460ae346", "_from": ".", "_npmVersion": "2.14.1", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "6816b59d387012ea7ce1ce336655b02b460ae346", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.2.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.3.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.3.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "69c9d737e21477c89a243802b44ac967eecbdcc0", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.3.0", "_shasum": "7e27cf9056bc9211ba53e6a13fa14d3340f56d77", "_from": ".", "_npmVersion": "2.14.1", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "7e27cf9056bc9211ba53e6a13fa14d3340f56d77", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.3.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.3.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.3.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.40" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "a4247390ae2291cc8f1a26ffd784133774353654", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.3.1", "_shasum": "fd32046e0c2cadc07b3e776b94da3c2e9e7628a2", "_from": ".", "_npmVersion": "2.14.1", "_nodeVersion": "0.10.40", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "fd32046e0c2cadc07b3e776b94da3c2e9e7628a2", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.3.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "10.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "10.0.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "10220e1bc435d54aac7fd659262fb28ebfb646fd", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@10.0.0", "_shasum": "d3bb8cdbd786693f550188b15afba1433c6e4ba9", "_from": ".", "_npmVersion": "2.14.2", "_nodeVersion": "4.0.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "d3bb8cdbd786693f550188b15afba1433c6e4ba9", "tarball": "http://registry.npmjs.org/hapi/-/hapi-10.0.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "10.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "10.0.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "9f1a2a1bd80c26bcffd9a2fea5683bd30e6a42eb", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@10.0.1", "_shasum": "a2ad9f70ce3700064a2861e226eef508f5ce2e8e", "_from": ".", "_npmVersion": "3.3.2", "_nodeVersion": "4.1.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "a2ad9f70ce3700064a2861e226eef508f5ce2e8e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-10.0.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "10.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "10.1.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "6.x.x", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "5.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "c2f67521561d63610b2ab3e031d895dd049c1dbb", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@10.1.0", "_shasum": "520a5edb45c19f728aac4ff6e20054a11f5cbd9e", "_from": ".", "_npmVersion": "3.3.2", "_nodeVersion": "4.1.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "520a5edb45c19f728aac4ff6e20054a11f5cbd9e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-10.1.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "10.2.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "10.2.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "1.x.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "1.x.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "6.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "fc2f49de5895963af494d5fa3a3f7010ffb294b5", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@10.2.1", "_shasum": "c2ac63b39bbd37fe484fd429382c2f82066755ed", "_from": ".", "_npmVersion": "3.3.4", "_nodeVersion": "4.1.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "c2ac63b39bbd37fe484fd429382c2f82066755ed", "tarball": "http://registry.npmjs.org/hapi/-/hapi-10.2.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "10.4.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "10.4.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "^1.7.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "^1.1.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "6.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "21983e082780968736936c0e5f50e362d631f36a", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@10.4.0", "_shasum": "a8c56f93e0347763f447e1bae1ed5003cdf6bec6", "_from": ".", "_npmVersion": "3.3.4", "_nodeVersion": "4.1.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "a8c56f93e0347763f447e1bae1ed5003cdf6bec6", "tarball": "http://registry.npmjs.org/hapi/-/hapi-10.4.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "10.4.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "10.4.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "^1.7.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "^1.1.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "6.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "6e61eedf98d2c6d796021ac84c463553cb237128", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@10.4.1", "_shasum": "e545394c201e6b12fe98d95b8096d34e17fed732", "_from": ".", "_npmVersion": "3.3.4", "_nodeVersion": "4.1.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "e545394c201e6b12fe98d95b8096d34e17fed732", "tarball": "http://registry.npmjs.org/hapi/-/hapi-10.4.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "10.5.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "10.5.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "^1.7.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "^1.1.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "6.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "c841ffd7d7c07d942b05b5670cc79566d1b88629", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@10.5.0", "_shasum": "ca3853d550a3a19dafb45daf2c6169b6b717e09c", "_from": ".", "_npmVersion": "3.3.4", "_nodeVersion": "4.1.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "ca3853d550a3a19dafb45daf2c6169b6b717e09c", "tarball": "http://registry.npmjs.org/hapi/-/hapi-10.5.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.0.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "5.x.x", "shot": "^1.7.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "^1.1.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "6.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "6b59790f25d62ca7084a4c24aaf6895637eac609", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.0.0", "_shasum": "0973737aacfc81e13bb5c360c813caf8e2adb032", "_from": ".", "_npmVersion": "3.3.4", "_nodeVersion": "4.1.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "0973737aacfc81e13bb5c360c813caf8e2adb032", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.0.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.0.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "5.x.x", "shot": "^1.7.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "^1.1.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "6.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "fa224130f779b8a04e166f20ca427f4ee4fda447", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.0.1", "_shasum": "b0eb286a3df961f9e291b3c34f451a24f51e1647", "_from": ".", "_npmVersion": "3.3.7", "_nodeVersion": "4.1.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "b0eb286a3df961f9e291b3c34f451a24f51e1647", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.0.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.0.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.0.2", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "5.x.x", "shot": "^1.7.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "^1.1.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "6.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "99c1c4cfccafc36b596313b89e73e44ddeb115be", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.0.2", "_shasum": "55cd3fcbe7ddf8e6ca641a000fdb8847b4d2f256", "_from": ".", "_npmVersion": "3.3.4", "_nodeVersion": "4.1.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "55cd3fcbe7ddf8e6ca641a000fdb8847b4d2f256", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.0.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.0.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.0.3", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "5.x.x", "shot": "^1.7.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "^1.1.x" }, "devDependencies": { "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "7.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "fc503f82f885e31bea9175d06f758243c2cecbe7", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.0.3", "_shasum": "7cc47dcae38a209ff9d8880a98e5d50a72899872", "_from": ".", "_npmVersion": "3.3.9", "_nodeVersion": "4.2.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "7cc47dcae38a209ff9d8880a98e5d50a72899872", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.0.3.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.0.4": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.0.4", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "qs": "6.x.x", "shot": "2.x.x", "statehood": "3.x.x", "subtext": "3.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "7.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "c4593b67ef00b0e4cba87794d83e5d80f858514b", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.0.4", "_shasum": "83904af938bae5a7f65cebf89a24941742da92e3", "_from": ".", "_npmVersion": "3.3.9", "_nodeVersion": "4.2.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "83904af938bae5a7f65cebf89a24941742da92e3", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.0.4.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.0.5": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.0.5", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "qs": "6.x.x", "shot": "2.x.x", "statehood": "3.x.x", "subtext": "3.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "7.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "47de66655155eac663787db5232885d8ba8fecf3", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.0.5", "_shasum": "0e6da07a93d1a7dfdcd404e094d9916fcdb00e7f", "_from": ".", "_npmVersion": "3.3.9", "_nodeVersion": "4.2.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "0e6da07a93d1a7dfdcd404e094d9916fcdb00e7f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.0.5.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.1.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "qs": "6.x.x", "shot": "2.x.x", "statehood": "3.x.x", "subtext": "3.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "7.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "109d0e9fd39b34e13f3b2e465274589b22887bb8", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.1.0", "_shasum": "fae3f263686df31f18cde1e8ed75ad58f14ec699", "_from": ".", "_npmVersion": "3.3.12", "_nodeVersion": "5.0.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "fae3f263686df31f18cde1e8ed75ad58f14ec699", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.1.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.1.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.1.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "qs": "6.x.x", "shot": "2.x.x", "statehood": "3.x.x", "subtext": "3.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "7.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "2dccac296c3d9da45139f5293c9d8640abf7a8c1", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.1.1", "_shasum": "ce641ffbe090e728d17e26d1d7ec55abdde564c5", "_from": ".", "_npmVersion": "3.3.12", "_nodeVersion": "5.0.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "ce641ffbe090e728d17e26d1d7ec55abdde564c5", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.1.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.1.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.1.2", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "qs": "6.x.x", "shot": "2.x.x", "statehood": "3.x.x", "subtext": "3.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "7.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "ca24ad7ec69b9cbbb46a9eb8b8f69900b8f06b09", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.1.2", "_shasum": "9c1987b388b9b934dc7719f950da587a3893af90", "_from": ".", "_npmVersion": "3.3.12", "_nodeVersion": "5.0.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "9c1987b388b9b934dc7719f950da587a3893af90", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.1.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.1.3": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.1.3", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "qs": "6.x.x", "shot": "2.x.x", "statehood": "3.x.x", "subtext": "3.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "7.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "14ca827cb6501b88a5452054f429a92ee3fe0b6e", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.1.3", "_shasum": "517f2c343764b531ad97a32901b22f48fcb6e937", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "5.2.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "517f2c343764b531ad97a32901b22f48fcb6e937", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.1.3.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "11.1.4": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "11.1.4", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "qs": "6.x.x", "shot": "2.x.x", "statehood": "3.x.x", "subtext": "3.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "7.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "270e9a768b2fbb84ab832869d2de606c865f0e85", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@11.1.4", "_shasum": "a80588d175a1d9489acda0fdd13df5a0766f55ce", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "5.2.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "a80588d175a1d9489acda0fdd13df5a0766f55ce", "tarball": "http://registry.npmjs.org/hapi/-/hapi-11.1.4.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "12.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "12.0.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "2.x.x", "statehood": "3.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "8.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "9cc0eba545fa53e9fd64c41f88cf38a26fde120f", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@12.0.0", "_shasum": "b5914cef81176d8f07fe65a393e4e7d030ece5e6", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "5.2.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "b5914cef81176d8f07fe65a393e4e7d030ece5e6", "tarball": "http://registry.npmjs.org/hapi/-/hapi-12.0.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "12.0.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "12.0.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "3.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "8.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "c22b3c52ff2251c49f7ceee90ba81d6b8cad111e", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@12.0.1", "_shasum": "762760e67249a41e14b42b94417e5f9a072e5b5e", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "5.2.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "762760e67249a41e14b42b94417e5f9a072e5b5e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-12.0.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "12.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "12.1.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "3.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "3.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "8.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "4e78875d30a458d835520a8614e2e43f2137f1e1", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@12.1.0", "_shasum": "9932c63300d247a92caec120aa9fab72a41248f1", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "5.2.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "9932c63300d247a92caec120aa9fab72a41248f1", "tarball": "http://registry.npmjs.org/hapi/-/hapi-12.1.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "9.5.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "9.5.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=0.10.0" }, "dependencies": { "accept": "1.x.x", "ammo": "1.x.x", "boom": "^2.5.x", "call": "2.x.x", "catbox": "6.x.x", "catbox-memory": "1.x.x", "cryptiles": "2.x.x", "heavy": "3.x.x", "hoek": "^2.14.x", "iron": "2.x.x", "items": "1.x.x", "joi": "^6.8.1", "kilt": "^1.1.x", "mimos": "2.x.x", "peekaboo": "1.x.x", "qs": "4.x.x", "shot": "^1.7.x", "statehood": "2.x.x", "subtext": "2.x.x", "topo": "^1.1.x" }, "devDependencies": { "bluebird": "2.x.x", "code": "1.x.x", "handlebars": "2.x.x", "inert": "3.x.x", "lab": "6.x.x", "vision": "2.x.x", "wreck": "6.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "08af1cbd7aac7aca80fce7b1a9620f239e926c3e", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@9.5.1", "_shasum": "8d8ca13e7c220b078465e9a0a7640f26a5afb855", "_from": ".", "_npmVersion": "3.3.12", "_nodeVersion": "5.4.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "8d8ca13e7c220b078465e9a0a7640f26a5afb855", "tarball": "http://registry.npmjs.org/hapi/-/hapi-9.5.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "13.0.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "13.0.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "4.x.x", "items": "2.x.x", "joi": "7.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "4.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "8.x.x", "vision": "2.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "e82e47cf098a1773e369bf167d0802574f40572f", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@13.0.0", "_shasum": "0056e5bb2169165c0c13220f94301b1fdd47e91d", "_from": ".", "_npmVersion": "3.3.12", "_nodeVersion": "5.4.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "0056e5bb2169165c0c13220f94301b1fdd47e91d", "tarball": "http://registry.npmjs.org/hapi/-/hapi-13.0.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ] }, "13.1.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "13.1.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "4.x.x", "items": "2.x.x", "joi": "8.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "4.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "10.x.x", "vision": "4.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "0c8109e1b573528bfebea771da6a83d1f5bf7043", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@13.1.0", "_shasum": "0e0e666d97174db27537d72b70d981adf1cf3895", "_from": ".", "_npmVersion": "3.6.0", "_nodeVersion": "5.7.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "0e0e666d97174db27537d72b70d981adf1cf3895", "tarball": "http://registry.npmjs.org/hapi/-/hapi-13.1.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "_npmOperationalInternal": { "host": "packages-13-west.internal.npmjs.com", "tmp": "tmp/hapi-13.1.0.tgz_1457574636442_0.2828192512970418" } }, "13.2.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "13.2.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "4.x.x", "items": "2.x.x", "joi": "8.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "4.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "10.x.x", "vision": "4.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "23e333e64896fa471ae93d81be0f3504d4904fd0", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@13.2.0", "_shasum": "678a4011ff0153f1a5974080ede526dd6acbf535", "_from": ".", "_npmVersion": "3.6.0", "_nodeVersion": "5.7.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "678a4011ff0153f1a5974080ede526dd6acbf535", "tarball": "http://registry.npmjs.org/hapi/-/hapi-13.2.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/hapi-13.2.0.tgz_1457676358874_0.4965129441116005" } }, "13.2.1": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "13.2.1", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "4.x.x", "items": "2.x.x", "joi": "8.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "4.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "10.x.x", "vision": "4.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "ed195fad213a9da0f0762271c4907f4218e2abaf", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@13.2.1", "_shasum": "6139d8960154e5c56db16ad79fa8a8a1eeeba94e", "_from": ".", "_npmVersion": "3.6.0", "_nodeVersion": "5.7.1", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "6139d8960154e5c56db16ad79fa8a8a1eeeba94e", "tarball": "http://registry.npmjs.org/hapi/-/hapi-13.2.1.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "_npmOperationalInternal": { "host": "packages-13-west.internal.npmjs.com", "tmp": "tmp/hapi-13.2.1.tgz_1457676660774_0.8275901591405272" } }, "13.2.2": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "13.2.2", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "4.x.x", "items": "2.x.x", "joi": "8.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "4.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "10.x.x", "vision": "4.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "ea04005e0b81f79739d6b893068a18e702902c92", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@13.2.2", "_shasum": "e6ca99d5a38bcf10858e51d828b82229322aa60f", "_from": ".", "_npmVersion": "3.8.3", "_nodeVersion": "5.9.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "e6ca99d5a38bcf10858e51d828b82229322aa60f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-13.2.2.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/hapi-13.2.2.tgz_1458924659330_0.6953077977523208" } }, "13.3.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "13.3.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "3.x.x", "iron": "4.x.x", "items": "2.x.x", "joi": "8.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "4.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "10.x.x", "vision": "4.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "526d5eab92a5099052e788c98996d4c18cae2dbc", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@13.3.0", "_shasum": "b20d083ccfe0916e39398748fbb71c5b412ccd2f", "_from": ".", "_npmVersion": "3.8.3", "_nodeVersion": "5.10.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "b20d083ccfe0916e39398748fbb71c5b412ccd2f", "tarball": "http://registry.npmjs.org/hapi/-/hapi-13.3.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/hapi-13.3.0.tgz_1459617747839_0.6574987769126892" } }, "13.4.0": { "name": "hapi", "description": "HTTP Server framework", "homepage": "http://hapijs.com", "version": "13.4.0", "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "main": "lib/index.js", "keywords": [ "framework", "http", "api", "web" ], "engines": { "node": ">=4.0.0" }, "dependencies": { "accept": "2.x.x", "ammo": "2.x.x", "boom": "3.x.x", "call": "3.x.x", "catbox": "7.x.x", "catbox-memory": "2.x.x", "cryptiles": "3.x.x", "heavy": "4.x.x", "hoek": "4.x.x", "iron": "4.x.x", "items": "2.x.x", "joi": "8.x.x", "kilt": "2.x.x", "mimos": "3.x.x", "peekaboo": "2.x.x", "shot": "3.x.x", "statehood": "4.x.x", "subtext": "4.x.x", "topo": "2.x.x" }, "devDependencies": { "code": "2.x.x", "handlebars": "4.x.x", "inert": "3.x.x", "lab": "10.x.x", "vision": "4.x.x", "wreck": "7.x.x" }, "scripts": { "test": "lab -a code -t 100 -L", "test-tap": "lab -a code -r tap -o tests.tap", "test-cov-html": "lab -a code -r html -o coverage.html" }, "license": "BSD-3-Clause", "gitHead": "faacf022488bc30748bb8f35aca71a24343dc0fc", "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "_id": "hapi@13.4.0", "_shasum": "fc1cd3c6ad9d96b8d43dd6b4feb53ce5c46990c8", "_from": ".", "_npmVersion": "3.8.6", "_nodeVersion": "5.11.0", "_npmUser": { "name": "hueniverse", "email": "eran@hammer.io" }, "dist": { "shasum": "fc1cd3c6ad9d96b8d43dd6b4feb53ce5c46990c8", "tarball": "http://registry.npmjs.org/hapi/-/hapi-13.4.0.tgz" }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/hapi-13.4.0.tgz_1462656778107_0.4772025996353477" } } }, "maintainers": [ { "name": "hueniverse", "email": "eran@hueniverse.com" } ], "time": { "modified": "2016-05-07T21:32:58.581Z", "created": "2011-08-06T00:41:58.808Z", "0.0.1": "2011-08-06T00:41:59.373Z", "0.0.2": "2011-11-20T20:46:31.424Z", "0.0.3": "2011-11-20T20:51:32.742Z", "0.0.4": "2011-11-21T00:54:38.933Z", "0.0.5": "2011-11-23T01:12:59.808Z", "0.0.6": "2011-11-29T17:20:49.211Z", "0.1.0": "2012-02-09T16:22:12.986Z", "0.1.1": "2012-02-13T23:05:41.210Z", "0.1.2": "2012-02-15T21:17:24.741Z", "0.1.3": "2012-02-18T01:11:42.544Z", "0.2.0": "2012-02-22T21:34:59.268Z", "0.2.1": "2012-02-29T20:24:46.888Z", "0.3.0": "2012-04-25T20:45:50.530Z", "0.4.0": "2012-05-09T18:48:14.989Z", "0.4.1": "2012-05-09T18:57:41.971Z", "0.4.2": "2012-05-09T21:31:41.918Z", "0.4.3": "2012-05-15T15:17:12.467Z", "0.4.4": "2012-05-16T21:11:36.984Z", "0.5.0": "2012-06-01T21:15:13.423Z", "0.5.1": "2012-07-23T17:27:20.824Z", "0.5.1a": "2012-07-27T18:45:52.423Z", "0.5.1b": "2012-07-31T18:48:01.927Z", "0.5.1b2": "2012-07-31T18:51:10.239Z", "0.5.1c": "2012-08-01T22:52:24.978Z", "0.6.0": "2012-09-06T17:10:27.504Z", "0.6.1": "2012-09-06T17:12:30.972Z", "0.5.2": "2012-09-12T17:05:00.145Z", "0.7.0": "2012-09-21T00:54:25.488Z", "0.7.1": "2012-10-01T20:58:42.760Z", "0.8.0": "2012-10-27T00:21:31.775Z", "0.8.1": "2012-10-31T18:45:46.959Z", "0.8.2": "2012-11-01T22:25:36.850Z", "0.8.3": "2012-11-05T23:23:00.841Z", "0.8.4": "2012-11-07T20:54:10.718Z", "0.9.0": "2012-11-19T22:24:58.297Z", "0.9.1": "2012-11-27T21:47:37.455Z", "0.9.2": "2012-12-04T20:28:34.496Z", "0.10.0": "2012-12-18T08:39:54.824Z", "0.10.1": "2012-12-20T17:38:46.296Z", "0.11.0": "2013-01-08T23:45:03.457Z", "0.11.1": "2013-01-10T02:42:22.451Z", "0.11.2": "2013-01-10T07:03:47.203Z", "0.11.3": "2013-01-14T16:10:54.799Z", "0.12.0": "2013-01-31T18:10:59.786Z", "0.13.0": "2013-02-04T17:53:08.206Z", "0.13.1": "2013-02-04T21:30:24.581Z", "0.13.2": "2013-02-05T00:42:08.898Z", "0.11.4": "2013-02-19T18:09:59.362Z", "0.13.3": "2013-02-20T21:09:24.407Z", "0.14.0": "2013-02-20T22:00:50.485Z", "0.14.1": "2013-02-20T23:20:14.249Z", "0.14.2": "2013-02-26T18:12:02.554Z", "0.15.0": "2013-03-09T01:30:00.576Z", "0.15.1": "2013-03-13T06:14:09.460Z", "0.15.2": "2013-03-14T05:18:53.975Z", "0.15.3": "2013-03-15T21:57:10.827Z", "0.15.4": "2013-03-18T20:13:06.730Z", "0.15.5": "2013-03-18T21:03:48.031Z", "0.15.6": "2013-03-19T05:26:54.850Z", "0.15.7": "2013-03-28T02:14:50.690Z", "0.15.8": "2013-03-29T20:45:14.373Z", "0.15.9": "2013-04-03T02:34:24.986Z", "0.16.0": "2013-04-03T07:46:12.024Z", "1.0.0": "2013-04-30T20:22:11.763Z", "1.0.1": "2013-05-02T22:32:06.263Z", "1.0.2": "2013-05-03T07:26:10.444Z", "1.0.3": "2013-05-06T18:51:22.969Z", "1.1.0": "2013-05-10T16:11:40.472Z", "1.2.0": "2013-05-14T19:00:49.508Z", "1.3.0": "2013-05-23T07:21:31.432Z", "1.4.0": "2013-05-25T16:06:07.327Z", "1.5.0": "2013-05-27T23:00:01.639Z", "1.6.0": "2013-05-29T17:54:22.236Z", "1.6.1": "2013-05-30T19:51:40.955Z", "1.6.2": "2013-05-31T04:45:09.610Z", "1.7.0": "2013-06-04T06:57:59.266Z", "1.7.1": "2013-06-04T16:39:37.883Z", "1.7.2": "2013-06-04T21:25:07.928Z", "1.7.3": "2013-06-07T22:18:29.595Z", "1.8.0": "2013-06-13T18:12:09.574Z", "1.8.1": "2013-06-17T20:50:22.022Z", "1.8.2": "2013-06-26T14:35:04.831Z", "1.8.3": "2013-07-15T20:41:19.251Z", "1.9.0": "2013-07-23T00:34:57.423Z", "1.9.1": "2013-08-15T18:38:38.198Z", "1.9.2": "2013-08-15T19:17:36.763Z", "1.9.3": "2013-08-15T20:16:40.385Z", "1.9.4": "2013-08-15T20:56:48.955Z", "1.9.5": "2013-08-28T23:51:38.420Z", "1.9.6": "2013-08-29T20:25:46.670Z", "1.9.7": "2013-09-04T18:06:31.719Z", "1.10.0": "2013-09-09T22:18:36.346Z", "1.11.0": "2013-09-16T21:10:53.661Z", "1.11.1": "2013-09-18T00:40:32.639Z", "1.12.0": "2013-10-01T19:05:30.775Z", "1.13.0": "2013-10-02T14:57:45.817Z", "1.14.0": "2013-10-04T20:32:24.544Z", "1.15.0": "2013-10-30T19:52:07.053Z", "1.16.0": "2013-11-07T00:51:15.013Z", "1.16.1": "2013-11-09T08:55:18.552Z", "1.17.0": "2013-11-15T17:45:42.777Z", "1.18.0": "2013-11-18T19:53:58.440Z", "1.19.0": "2013-11-19T07:46:14.659Z", "1.19.1": "2013-11-19T21:29:12.329Z", "1.19.2": "2013-11-19T21:42:39.814Z", "1.19.3": "2013-11-19T22:03:12.092Z", "1.19.4": "2013-11-21T08:14:57.353Z", "1.19.5": "2013-11-22T19:47:46.380Z", "1.20.0": "2013-11-24T19:45:28.063Z", "2.0.0-preview": "2014-01-09T08:10:07.135Z", "0.5.1-a": "2014-01-11T03:18:19.304Z", "0.5.1-b": "2014-01-11T03:18:19.304Z", "0.5.1-b2": "2014-01-11T03:18:19.304Z", "0.5.1-c": "2014-01-11T03:18:19.304Z", "2.0.0": "2014-01-17T09:14:39.771Z", "2.1.0": "2014-01-21T00:34:48.280Z", "2.1.1": "2014-01-21T09:11:40.741Z", "2.1.2": "2014-01-27T08:48:08.537Z", "2.2.0": "2014-02-10T22:35:03.378Z", "2.3.0": "2014-02-13T08:08:57.271Z", "2.4.0": "2014-02-17T06:39:11.217Z", "2.5.0": "2014-02-21T07:56:49.772Z", "2.6.0": "2014-02-25T15:48:51.678Z", "3.0.0": "2014-03-12T23:44:08.603Z", "3.0.1": "2014-03-19T02:32:21.587Z", "3.0.2": "2014-03-22T21:22:32.562Z", "3.1.0": "2014-03-29T08:27:09.372Z", "4.0.0": "2014-04-08T07:22:12.702Z", "4.0.1": "2014-04-25T07:39:15.478Z", "4.0.2": "2014-04-26T00:20:48.278Z", "4.0.3": "2014-04-28T21:07:30.705Z", "4.1.0": "2014-05-01T16:38:13.036Z", "4.1.1": "2014-05-13T17:12:04.106Z", "4.1.2": "2014-05-13T20:36:00.336Z", "4.1.3": "2014-05-17T08:20:25.020Z", "4.1.4": "2014-05-17T18:35:16.938Z", "5.0.0": "2014-05-19T19:41:17.090Z", "5.1.0": "2014-05-24T23:32:32.334Z", "6.0.0": "2014-06-12T04:54:37.971Z", "6.0.1": "2014-06-12T17:28:32.812Z", "6.0.2": "2014-06-17T07:25:34.083Z", "6.1.0": "2014-07-16T14:26:57.650Z", "6.2.0": "2014-07-17T12:34:32.351Z", "6.2.1": "2014-07-23T14:07:13.792Z", "6.2.2": "2014-08-01T20:12:29.200Z", "6.3.0": "2014-08-03T20:33:06.184Z", "6.4.0": "2014-08-05T01:10:47.285Z", "6.5.0": "2014-08-13T18:48:56.479Z", "6.5.1": "2014-08-13T20:11:25.983Z", "6.6.0": "2014-08-24T07:02:13.825Z", "6.7.0": "2014-08-27T23:37:01.050Z", "6.7.1": "2014-08-28T00:28:18.035Z", "6.8.0": "2014-09-09T00:54:21.586Z", "6.8.1": "2014-09-09T21:15:34.739Z", "6.9.0": "2014-09-22T20:40:52.789Z", "6.10.0": "2014-10-02T22:15:55.901Z", "6.11.0": "2014-10-04T06:52:41.700Z", "6.11.1": "2014-10-06T19:18:23.180Z", "7.0.0": "2014-10-10T00:26:33.893Z", "7.0.1": "2014-10-22T19:08:41.629Z", "7.1.0": "2014-10-22T19:45:29.809Z", "7.1.1": "2014-10-24T06:20:16.375Z", "7.2.0": "2014-10-30T23:35:51.992Z", "7.3.0": "2014-11-05T03:04:08.861Z", "7.4.0": "2014-11-07T05:03:21.747Z", "7.5.0": "2014-11-07T22:12:09.170Z", "7.5.1": "2014-11-10T20:09:57.262Z", "7.5.2": "2014-11-10T20:23:22.140Z", "8.0.0-rc1": "2014-11-18T20:30:52.355Z", "8.0.0-rc2": "2014-11-18T20:59:36.586Z", "8.0.0-rc3": "2014-11-22T02:25:08.435Z", "8.0.0-rc4": "2014-11-26T05:05:49.331Z", "8.0.0-rc5": "2014-11-28T08:50:20.452Z", "8.0.0-rc6": "2014-12-01T23:42:55.148Z", "8.0.0-rc7": "2014-12-02T09:18:00.490Z", "8.0.0-rc8": "2014-12-03T09:17:46.812Z", "8.0.0-rc9": "2014-12-08T05:55:59.067Z", "8.0.0": "2014-12-09T23:09:13.063Z", "7.5.3": "2014-12-16T02:58:44.742Z", "8.1.0": "2015-01-06T22:31:41.026Z", "8.2.0": "2015-02-09T21:04:56.884Z", "8.3.0": "2015-03-11T00:33:37.322Z", "8.3.1": "2015-03-11T06:36:29.719Z", "8.4.0": "2015-03-13T18:51:10.520Z", "8.5.0": "2015-05-21T19:22:51.085Z", "8.5.1": "2015-05-22T21:54:19.705Z", "8.5.2": "2015-05-27T05:52:32.617Z", "8.5.3": "2015-05-29T05:55:13.656Z", "8.6.0": "2015-05-29T20:12:03.406Z", "8.6.1": "2015-06-05T12:18:24.198Z", "8.8.0": "2015-07-03T22:44:24.311Z", "8.8.1": "2015-07-29T19:31:36.940Z", "9.0.0": "2015-08-12T06:39:22.574Z", "9.0.1": "2015-08-12T14:55:34.103Z", "9.0.2": "2015-08-15T23:50:42.737Z", "9.0.3": "2015-08-19T15:53:13.045Z", "9.0.4": "2015-09-02T07:51:40.368Z", "9.1.0": "2015-09-04T05:34:23.527Z", "9.2.0": "2015-09-05T15:53:31.319Z", "9.3.0": "2015-09-06T17:34:47.511Z", "9.3.1": "2015-09-08T19:16:14.008Z", "10.0.0": "2015-09-11T20:47:37.836Z", "10.0.1": "2015-09-23T01:23:32.384Z", "10.1.0": "2015-09-25T15:35:28.476Z", "10.2.0": "2015-10-03T06:23:14.058Z", "10.2.1": "2015-10-03T19:33:13.376Z", "10.3.0": "2015-10-04T00:05:16.771Z", "10.4.0": "2015-10-05T22:41:43.266Z", "10.4.1": "2015-10-08T16:05:59.698Z", "10.5.0": "2015-10-15T16:00:49.869Z", "11.0.0": "2015-10-16T19:30:34.132Z", "11.0.1": "2015-10-20T04:47:43.541Z", "11.0.2": "2015-10-21T15:42:44.357Z", "11.0.3": "2015-10-30T06:09:59.105Z", "11.0.4": "2015-11-03T08:14:04.603Z", "11.0.5": "2015-11-03T20:53:47.919Z", "11.1.0": "2015-11-05T08:51:05.642Z", "11.1.1": "2015-11-14T17:39:16.327Z", "11.1.2": "2015-11-21T22:30:55.829Z", "11.1.3": "2015-12-23T21:52:56.187Z", "11.1.4": "2015-12-27T16:15:04.251Z", "12.0.0": "2016-01-04T23:10:46.386Z", "12.0.1": "2016-01-06T19:32:29.670Z", "12.1.0": "2016-01-09T22:38:30.347Z", "9.5.1": "2016-01-20T18:27:39.478Z", "13.0.0": "2016-02-01T08:16:27.410Z", "13.1.0": "2016-03-10T01:50:36.879Z", "13.2.0": "2016-03-11T06:07:44.062Z", "13.2.1": "2016-03-11T06:11:01.232Z", "13.2.2": "2016-03-25T16:50:59.799Z", "13.3.0": "2016-04-02T17:22:30.843Z", "13.4.0": "2016-05-07T21:32:58.581Z" }, "repository": { "type": "git", "url": "git://github.com/hapijs/hapi.git" }, "users": { "123": true, "fgribreau": true, "thegoleffect": true, "nvcexploder": true, "kpdecker": true, "pid": true, "paullang": true, "chilts": true, "surui": true, "heskew": true, "leesei": true, "marsup": true, "ruzz311": true, "alanshaw": true, "stongo": true, "gregoj": true, "garthk": true, "poeticninja": true, "didit-tech": true, "cedricziel": true, "adam_baldwin": true, "phuu": true, "capelio": true, "simme": true, "krisb": true, "svnlto": true, "seldo": true, "cilindrox": true, "josecardozo": true, "donnfelker": true, "otodockal": true, "dramors": true, "shijuvar": true, "nagorkin": true, "shindakun": true, "corbinu": true, "gdibble": true, "bausmeier": true, "adityabakle": true, "fourq": true, "d10": true, "juriwiens": true, "toddhickerson": true, "mrlannigan": true, "edalorzo": true, "ejeklint": true, "jaw187": true, "xicombd": true, "randallagordon": true, "ingruz": true, "facundis": true, "kevstev": true, "yoitsro": true, "adamclerk": true, "lindblom": true, "evanlucas": true, "simplydenis": true, "mtt": true, "chrisdickinson": true, "landau": true, "peterblazejewicz": true, "scottcorgan": true, "devenhouse": true, "elmasse": true, "patrickkettner": true, "filearts": true, "anshley": true, "pjbr": true, "nlf": true, "chapel": true, "ubaltaci": true, "allain": true, "maurin.lenglart": true, "kmpm": true, "mkoopajr": true, "julien-f": true, "maxkueng": true, "mcqueenorama": true, "lbenson": true, "adamtait": true, "thunderzhulei": true, "candid": true, "mattjc369": true, "dubban": true, "vanquish": true, "wynn": true, "paed01": true, "robertkowalski": true, "joaocampinhos": true, "ambdxtrch": true, "blakehall": true, "michaeljcalkins": true, "deepflame": true, "ugate": true, "aayalur": true, "pauldenotter": true, "old9": true, "vincentmac": true, "vikramggg": true, "gabeio": true, "gchao": true, "daviddias": true, "arb": true, "davidchase": true, "wyatt": true, "ruiquelhas": true, "fampinheiro": true, "marcuspoehls": true, "jits": true, "jeltok": true, "devin": true, "uipoet": true, "swayf": true, "jstrimpel": true, "Marsup": true, "mitchelkuijpers": true, "steeevec": true, "dkolba": true, "z0mt3c": true, "windhamdavid": true, "kylemathews": true, "ellell": true, "guumaster": true, "codeofzen": true, "juliusrickert": true, "thyforhtian": true, "jbramesh": true, "sir79": true, "jnath": true, "mananvaghasiya": true, "sasquatch": true, "skopat": true, "oakley349": true, "jhabdas": true, "yuvalziegler": true, "dbrockman": true, "g33k5z": true, "omnijeff": true, "ivangaravito": true, "devinivy": true, "gdbtek": true, "sunnylost": true, "psalaets": true, "lvegerano": true, "chaoyi.chen": true, "paulovieira": true, "pmilan": true, "mac-": true, "rhrn": true, "johnbrett": true, "devinclark": true, "waltercarvalho": true, "zonak": true, "jjrosent": true, "gergoerdosi": true, "benjaminverble": true, "bendrucker": true, "jnetto": true, "hankmccoy78": true, "minichiello": true, "caleb.boyd": true, "markbradshaw": true, "bbrown": true, "romanenko": true, "jardakotesovec": true, "evanmarkhopkins": true, "stevenweathers": true, "bryanwood": true, "fyockm": true, "shortbreaks": true, "felipeleusin": true, "kanongil": true, "nnt1289": true, "cdubois": true, "joepindar": true, "hekike": true, "thomask33": true, "yury": true, "mrbri": true, "clarkie": true, "glukki": true, "danielhuisman": true, "dr-benton": true, "corintho": true, "blakmatrix": true, "hueniverse": true, "jory": true, "brianjmiller": true, "mahpah": true, "stuligan": true, "peteut": true, "pnevares": true, "joeybaker": true, "nickleefly": true, "wheredevel": true, "saidgeek": true, "sobering": true, "indigo0086": true, "kulakowka": true, "jelhaouchi": true, "srl": true, "ljon": true, "plord": true, "mdrobny": true, "seanjh": true, "markthethomas": true, "rsp": true, "plechazunga": true, "sanketss84": true, "itonyyo": true, "agtlucas": true, "rogier.spieker": true, "sfabriece": true, "sjnnr": true, "paulj": true, "jerrywu": true, "lupomontero": true, "mjaczynski": true, "tzsiga": true, "program247365": true, "gregvanbrug": true, "fansgentle": true, "nukisman": true, "jbpionnier": true, "kontrax": true, "nackjicholson": true, "kraim88": true, "deryk": true, "makay": true, "gnimuc": true, "jalcine": true, "panlw": true, "bplabombarda": true, "nickeltobias": true, "nathanbuchar": true, "alectic": true, "vwal": true, "sakai135": true, "illustratordavid": true, "lassevolkmann": true, "favasconcelos": true, "eventhorizon": true, "nick_mcg": true, "minchnew": true, "nelix": true, "antanst": true, "urbantumbleweed": true, "programmer.severson": true, "stany": true, "ziflex": true, "salar": true, "pixlab": true, "saravananr": true, "tobiasnickel": true, "lekosfmi": true, "dosevader": true, "cfleschhut": true, "empurium": true, "027720": true, "danielb": true, "timdp": true, "dankle": true, "mhaidarh": true, "pigiuz": true, "zayyar.phone": true, "brend": true, "andrefreitas": true, "roman-io": true, "pruettti": true, "guidoschmidt": true, "a3.ivanenko": true, "tribou": true, "nocomment17": true, "glenngeenen": true, "fiws": true, "wukaidong": true, "dainov": true, "leonardorb": true, "rexpan": true, "ahadb": true, "james3299": true }, "readme": "\n\n### Web and services application framework\n\n\n\nLead Maintainer: [Eran Hammer](https://github.com/hueniverse)\n\n**hapi** is sponsored by [Sideway](https://sideway.com).\n\n**hapi** is a simple to use configuration-centric framework with built-in support for input validation, caching,\nauthentication, and other essential facilities for building web and services applications. **hapi** enables\ndevelopers to focus on writing reusable application logic in a highly modular and prescriptive approach. \n\nDevelopment version: **13.4.x** ([release notes](https://github.com/hapijs/hapi/issues?labels=release+notes&page=1&state=closed)) \n[![Build Status](https://secure.travis-ci.org/hapijs/hapi.svg)](http://travis-ci.org/hapijs/hapi)\n\nFor the latest updates, [change log](http://hapijs.com/updates), and release information visit [hapijs.com](http://hapijs.com) and follow [@hapijs](https://twitter.com/hapijs) on twitter. If you have questions, please open an issue in the\n[discussion forum](https://github.com/hapijs/discuss).\n", "readmeFilename": "README.md", "homepage": "http://hapijs.com", "keywords": [ "framework", "http", "api", "web" ], "bugs": { "url": "https://github.com/hapijs/hapi/issues" }, "license": "BSD-3-Clause" } ================================================ FILE: test/fixtures/analyze/collect/modules/hapi/expected-source.json ================================================ { "files": { "readmeSize": 1213, "testsSize": 959339, "hasShrinkwrap": true }, "badges": [ { "urls": { "original": "https://secure.travis-ci.org/hapijs/hapi.svg", "service": "https://api.travis-ci.org/hapijs/hapi.svg", "shields": "https://img.shields.io/travis/hapijs/hapi.svg", "content": "https://img.shields.io/travis/hapijs/hapi.json" }, "info": { "service": "travis", "type": "build" } } ] } ================================================ FILE: test/fixtures/analyze/collect/modules/planify/data.json ================================================ { "name": "planify", "description": "Plan a series of steps and display the output in a beautiful way", "dist-tags": { "latest": "1.2.0" }, "versions": { "1.0.0": { "name": "planify", "version": "1.0.0", "description": "Plan a series of steps and display the output in a beautiful way", "main": "index.js", "scripts": { "test": "mocha --bail", "test-cov": "istanbul cover --dir test/coverage _mocha -- --bail && echo Coverage lies in test/coverage/lcov-report/index.html", "test-travis": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --bail && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" }, "bugs": { "url": "https://github.com/IndigoUnited/node-planify/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-planify.git" }, "keywords": [ "plan", "step", "steps", "phase", "phases", "cli", "task", "runner", "run" ], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "ansi-escapes": "^1.1.0", "bluebird": "^3.1.1", "chalk": "^1.1.1", "cli-progress-bar": "^1.0.0", "indent-string": "^2.1.0", "lodash": "^4.0.0" }, "devDependencies": { "@satazor/eslint-config": "^1.0.6", "chai": "^3.4.1", "cli-character-set": "^0.1.0", "coveralls": "^2.11.6", "expect.js": "^0.3.1", "glob": "^6.0.4", "istanbul": "^0.4.1", "mocha": "^2.3.4", "require-directory": "^2.1.1" }, "gitHead": "470398d0b5412ac3ee276e33498bf382748b8da1", "homepage": "https://github.com/IndigoUnited/node-planify#readme", "_id": "planify@1.0.0", "_shasum": "85cc83912fd817992f1fe799c8a865f4d28e35ab", "_from": ".", "_npmVersion": "3.3.12", "_nodeVersion": "5.4.1", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [ { "name": "satazor", "email": "andremiguelcruz@msn.com" } ], "dist": { "shasum": "85cc83912fd817992f1fe799c8a865f4d28e35ab", "tarball": "http://registry.npmjs.org/planify/-/planify-1.0.0.tgz" } }, "1.0.1": { "name": "planify", "version": "1.0.1", "description": "Plan a series of steps and display the output in a beautiful way", "main": "index.js", "scripts": { "test": "mocha --bail", "test-cov": "istanbul cover --dir test/coverage _mocha -- --bail && echo Coverage lies in test/coverage/lcov-report/index.html", "test-travis": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --bail && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" }, "bugs": { "url": "https://github.com/IndigoUnited/node-planify/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-planify.git" }, "keywords": [ "plan", "step", "steps", "phase", "phases", "cli", "task", "runner", "run" ], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "ansi-escapes": "^1.1.0", "bluebird": "^3.1.1", "chalk": "^1.1.1", "cli-progress-bar": "^1.0.0", "indent-string": "^2.1.0", "lodash": "^4.0.0" }, "devDependencies": { "@satazor/eslint-config": "^1.0.6", "chai": "^3.4.1", "cli-character-set": "^0.1.0", "coveralls": "^2.11.6", "expect.js": "^0.3.1", "glob": "^6.0.4", "istanbul": "^0.4.1", "mocha": "^2.3.4", "require-directory": "^2.1.1" }, "gitHead": "9c1c49af97f3210fad44fde3cde648705dc0c6a0", "homepage": "https://github.com/IndigoUnited/node-planify#readme", "_id": "planify@1.0.1", "_shasum": "49dcd0cf4167331c294ee1c62d04c674fd4952b9", "_from": ".", "_npmVersion": "3.3.12", "_nodeVersion": "5.4.1", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [ { "name": "satazor", "email": "andremiguelcruz@msn.com" } ], "dist": { "shasum": "49dcd0cf4167331c294ee1c62d04c674fd4952b9", "tarball": "http://registry.npmjs.org/planify/-/planify-1.0.1.tgz" } }, "1.0.2": { "name": "planify", "version": "1.0.2", "description": "Plan a series of steps and display the output in a beautiful way", "main": "index.js", "scripts": { "test": "mocha --bail", "test-cov": "istanbul cover --dir test/coverage _mocha -- --bail && echo Coverage lies in test/coverage/lcov-report/index.html", "test-travis": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --bail && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" }, "bugs": { "url": "https://github.com/IndigoUnited/node-planify/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-planify.git" }, "keywords": [ "plan", "step", "steps", "phase", "phases", "cli", "task", "runner", "run" ], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "ansi-escapes": "^1.1.0", "bluebird": "^3.1.1", "chalk": "^1.1.1", "cli-progress-bar": "^1.0.0", "indent-string": "^2.1.0", "lodash": "^4.0.0" }, "devDependencies": { "@satazor/eslint-config": "^1.0.6", "chai": "^3.4.1", "cli-character-set": "^0.1.0", "coveralls": "^2.11.6", "expect.js": "^0.3.1", "glob": "^6.0.4", "istanbul": "^0.4.1", "mocha": "^2.3.4", "require-directory": "^2.1.1" }, "gitHead": "20d855ddd29a8a8eb9c05042f927370a6207adc7", "homepage": "https://github.com/IndigoUnited/node-planify#readme", "_id": "planify@1.0.2", "_shasum": "36258660b4a9dddc2f8c40d1ba18adc8d220ff67", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.3", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [ { "name": "satazor", "email": "andremiguelcruz@msn.com" } ], "dist": { "shasum": "36258660b4a9dddc2f8c40d1ba18adc8d220ff67", "tarball": "http://registry.npmjs.org/planify/-/planify-1.0.2.tgz" } }, "1.0.3": { "name": "planify", "version": "1.0.3", "description": "Plan a series of steps and display the output in a beautiful way", "main": "index.js", "scripts": { "test": "mocha --bail", "test-cov": "istanbul cover --dir test/coverage _mocha -- --bail && echo Coverage lies in test/coverage/lcov-report/index.html", "test-travis": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --bail && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" }, "bugs": { "url": "https://github.com/IndigoUnited/node-planify/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-planify.git" }, "keywords": [ "plan", "step", "steps", "phase", "phases", "cli", "task", "runner", "run" ], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "ansi-escapes": "^1.1.0", "bluebird": "^3.1.1", "chalk": "^1.1.1", "cli-progress-bar": "^1.0.0", "indent-string": "^2.1.0", "lodash": "^4.0.0" }, "devDependencies": { "@satazor/eslint-config": "^1.0.6", "chai": "^3.4.1", "cli-character-set": "^0.1.0", "coveralls": "^2.11.6", "expect.js": "^0.3.1", "glob": "^6.0.4", "istanbul": "^0.4.1", "mocha": "^2.3.4", "require-directory": "^2.1.1" }, "gitHead": "6566da9cd1368ca81ffe5c720acec89659eb8696", "homepage": "https://github.com/IndigoUnited/node-planify#readme", "_id": "planify@1.0.3", "_shasum": "892137251656b3244df039072d0d860a71fa395c", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.3", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [ { "name": "satazor", "email": "andremiguelcruz@msn.com" } ], "dist": { "shasum": "892137251656b3244df039072d0d860a71fa395c", "tarball": "http://registry.npmjs.org/planify/-/planify-1.0.3.tgz" } }, "1.0.4": { "name": "planify", "version": "1.0.4", "description": "Plan a series of steps and display the output in a beautiful way", "main": "index.js", "scripts": { "test": "mocha --bail", "test-cov": "istanbul cover --dir test/coverage _mocha -- --bail && echo Coverage lies in test/coverage/lcov-report/index.html", "test-travis": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --bail && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" }, "bugs": { "url": "https://github.com/IndigoUnited/node-planify/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-planify.git" }, "keywords": [ "plan", "step", "steps", "phase", "phases", "cli", "task", "runner", "run" ], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "ansi-escapes": "^1.1.0", "bluebird": "^3.1.1", "chalk": "^1.1.1", "cli-progress-bar": "^1.0.0", "indent-string": "^2.1.0", "lodash": "^4.0.0" }, "devDependencies": { "@satazor/eslint-config": "^1.0.6", "chai": "^3.4.1", "cli-character-set": "^0.1.0", "coveralls": "^2.11.6", "expect.js": "^0.3.1", "glob": "^6.0.4", "istanbul": "^0.4.1", "mocha": "^2.3.4", "require-directory": "^2.1.1" }, "gitHead": "30092240bcb2d96bf13a76bca57234ff1265eef9", "homepage": "https://github.com/IndigoUnited/node-planify#readme", "_id": "planify@1.0.4", "_shasum": "adc202bb1e3bda60a109bd98fbcdf6130c3a006b", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.3", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [ { "name": "satazor", "email": "andremiguelcruz@msn.com" } ], "dist": { "shasum": "adc202bb1e3bda60a109bd98fbcdf6130c3a006b", "tarball": "http://registry.npmjs.org/planify/-/planify-1.0.4.tgz" } }, "1.0.5": { "name": "planify", "version": "1.0.5", "description": "Plan a series of steps and display the output in a beautiful way", "main": "index.js", "scripts": { "test": "mocha --bail", "test-cov": "istanbul cover --dir test/coverage _mocha -- --bail && echo Coverage lies in test/coverage/lcov-report/index.html", "test-travis": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --bail && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" }, "bugs": { "url": "https://github.com/IndigoUnited/node-planify/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-planify.git" }, "keywords": [ "plan", "step", "steps", "phase", "phases", "cli", "task", "runner", "run" ], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "ansi-escapes": "^1.1.0", "bluebird": "^3.1.1", "chalk": "^1.1.1", "cli-progress-bar": "^1.0.0", "indent-string": "^2.1.0", "lodash": "^4.0.0" }, "devDependencies": { "@satazor/eslint-config": "^1.0.6", "chai": "^3.4.1", "cli-character-set": "^0.1.0", "coveralls": "^2.11.6", "expect.js": "^0.3.1", "glob": "^6.0.4", "istanbul": "^0.4.1", "mocha": "^2.3.4", "require-directory": "^2.1.1" }, "engines": { "node": ">=4.0.0" }, "gitHead": "97172f2bba41b810956d914b6ba95510be45e4e7", "homepage": "https://github.com/IndigoUnited/node-planify#readme", "_id": "planify@1.0.5", "_shasum": "59706be4632186ec97e87a88e811c40c55b998f1", "_from": ".", "_npmVersion": "2.14.7", "_nodeVersion": "4.2.3", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [ { "name": "satazor", "email": "andremiguelcruz@msn.com" } ], "dist": { "shasum": "59706be4632186ec97e87a88e811c40c55b998f1", "tarball": "http://registry.npmjs.org/planify/-/planify-1.0.5.tgz" } }, "1.2.0": { "name": "planify", "version": "1.2.0", "description": "Plan a series of steps and display the output in a beautiful way", "main": "index.js", "scripts": { "test": "mocha --bail", "test-cov": "istanbul cover --dir test/coverage _mocha -- --bail && echo Coverage lies in test/coverage/lcov-report/index.html", "test-travis": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --bail && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js" }, "bugs": { "url": "https://github.com/IndigoUnited/node-planify/issues/" }, "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-planify.git" }, "keywords": [ "plan", "step", "steps", "phase", "phases", "cli", "task", "runner", "run" ], "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "license": "MIT", "dependencies": { "ansi-escapes": "^1.1.0", "bluebird": "^3.1.1", "chalk": "^1.1.1", "cli-progress-bar": "^1.0.0", "indent-string": "^2.1.0", "lodash": "^4.0.0" }, "devDependencies": { "@satazor/eslint-config": "^1.0.6", "chai": "^3.4.1", "cli-character-set": "^0.1.0", "coveralls": "^2.11.6", "expect.js": "^0.3.1", "glob": "^6.0.4", "istanbul": "^0.4.1", "mocha": "^2.3.4", "require-directory": "^2.1.1" }, "engines": { "node": ">=4.0.0" }, "gitHead": "b978ab1afd96cd9c5b41a642f2821c453ec35ba7", "homepage": "https://github.com/IndigoUnited/node-planify", "_id": "planify@1.2.0", "_shasum": "235a622eadea1809e2232bab7bb0c1d11c69cc7f", "_from": ".", "_npmVersion": "2.14.12", "_nodeVersion": "4.2.4", "_npmUser": { "name": "satazor", "email": "andremiguelcruz@msn.com" }, "maintainers": [ { "name": "satazor", "email": "andremiguelcruz@msn.com" } ], "dist": { "shasum": "235a622eadea1809e2232bab7bb0c1d11c69cc7f", "tarball": "http://registry.npmjs.org/planify/-/planify-1.2.0.tgz" } } }, "readme": "# planify\n\n[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coverage Status][coveralls-image]][coveralls-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url]\n\n[npm-url]:https://npmjs.org/package/planify\n[downloads-image]:http://img.shields.io/npm/dm/planify.svg\n[npm-image]:http://img.shields.io/npm/v/planify.svg\n[travis-url]:https://travis-ci.org/IndigoUnited/node-planify\n[travis-image]:http://img.shields.io/travis/IndigoUnited/node-planify.svg\n[coveralls-url]:https://coveralls.io/r/IndigoUnited/node-planify\n[coveralls-image]:https://img.shields.io/coveralls/IndigoUnited/node-planify.svg\n[david-dm-url]:https://david-dm.org/IndigoUnited/node-planify\n[david-dm-image]:https://img.shields.io/david/IndigoUnited/node-planify.svg\n[david-dm-dev-url]:https://david-dm.org/IndigoUnited/node-planify#info=devDependencies\n[david-dm-dev-image]:https://img.shields.io/david/dev/IndigoUnited/node-planify.svg\n\nPlan a series of concrete steps and display their output in a beautiful way.\n\nEver wanted to write a simple CLI that run a series of tasks with beautiful output? I did and I always ended up doing a thin wrapper repeatedly. This library provides a concise way to define these tasks while offering a handful of reporters to output the progress in a variety of ways.\n\n\n## Installation\n\n`$ npm install planify`\n\n\n## Usage\n\nThe API is very simple, yet very powerful:\n\n```js\nconst planify = require('planify');\n\nplanify({ reporter: 'blocks' }) // 'blocks' is the default reporter\n.step('Synchronous step', (data) => {\n console.log('A sync step in which data is', data);\n data.foz = 'baz'; // Set some data to the next step\n})\n.step('Callback step', (data, done) => {\n console.log('A callback step in which data is', data);\n setTimeout(done, 500);\n})\n.step('Promise step', (data) => {\n console.log('A promise step in which data is', data);\n return new Promise((resolve) => {\n setTimeout(resolve, 500);\n });\n})\n.phase('Some group of steps', (phase) => {\n phase.step('Synchronous step inside a phase', (data) => {\n console.log('A sync step inside a phase in which data is', data);\n });\n})\n.run({ foo: 'bar' })\n// Run returns a promise but callback style is also supported\n.then(() => process.exit(), (err) => process.exit(1));\n```\n\nYou can build as many nested phases as you wish. API is chainable to make it easier to build your plan.\n\nRunning this would look like this:\n\n\n\nBut changing the reporter to `spec` would look like this:\n\n\n\nThis is very similar to the [mocha](https://github.com/mochajs/mocha)'s spec reporter isn't it? In fact a lot of the API was inspired in it. Finally, changing the reporter to `progress` would show a beautiful progress bar instead:\n\n\n\nAs you can see, changing the appearance of the output is very easy. You may even allow your CLI users to choose the reporter by mapping `--reporter` to `options.reporter` by using [yargs](https://github.com/bcoe/yargs) or something similar. Cool huh?\n\n\n### Reporters\n\nThe are several built-in reporters:\n\n- `blocks`: blocks is the default reporter and it outputs everything, including stuff printed to the stdout and stderr.\n- `spec`: spec reporter is very similar to mocha's spec reporter but stuff written to the stdout and stderr are hidden.\n- `progress`: progress reporter shows a beautiful progress bar showing the overall progress of the plan; stuff written to the stdout and stderr are hidden.\n- `json`: json reporter outputs a machine readable object with all the plan lifecycle events.\n- `silent`: silent reporter which simply outputs nothing.\n- `spinner`: a simple reporter which prints errors or a spinner when the process is running.\n\nYou can easily make your own reporter. Take a look at the [json](./reporters/json.js) reporter implementation for an example. You may use a custom reporter like this:\n\n```js\n// my-reporter.js\nfunction myReporter(options) {\n /* ... */\n\n return {\n plan: {\n start() { /* ... */ },\n },\n };\n}\n\nmodule.exports = myReporter;\n\n// example.js\nconst planify = require('planify');\nconst myReporter = require('./my-reporter');\n\nconst plan = planify({\n reporter: myReporter({ /* reporter options if any */ })\n});\n\n/* ... */\n```\n\nOne cool feature of the reporters is that they can be async. You may return promises or use callbacks to do async reporting (.e.g.: save stuff to a database).\n\nFeel free to make a PR to add your reporter to the built-in reporters.\n\n\n### Full API\n\n#### planify([options])\n\nCreates a plan with the `given` options.\n\nAvailable options:\n\n- `reporter`: The reporter to be used which can be a string or a reporter object, defaults to `blocks`.\n- `exit`: True to exit automatically after running, defaults to `false`. If the plan fails with an error that has `err.exitCode`, the program will exit with that code.\n\n\n```js\nconst planify = require('planify');\nconst plan = planify({ exit: true, reporter: 'spec' });\n```\n\n#### .step(label, [options], fn)\n\nAdds a step with `label`, executing `fn` when it's time for the step to run.\n\nThe `fn` function will receive the plan `data` as the first argument which allows you to pass data to other steps.\nAs show above, `fn` may return a promise or use callbacks to do asynchronous stuff.\n\nAvailable options:\n\n- `fatal`: False to continue executing if this step fails, defaults to `true`.\n- `mute`: True to mute stdout and stderr completely during the execution of this step independently of the reporter being used , defaults to `false`; stdout and stderr can be muted independently by passing an object, e.g.: `{ stdout: true, stderr: false }`.\n- `slow`: Amount of time in ms to consider this step slow, defaults to `200`.\n\n\n```js\nconst planify = require('planify');\nconst plan = planify();\n\nplan.step('Some cool step', { fatal: false }, (data) => {\n throw new Error('This will fail but continue to the next step');\n});\nplan.step('Some cool step', { mute: true }, (data) => {\n console.log('This will not be logged');\n});\nplan.step('Some cool step', { slow: 500 }, (data, done) => {\n // Will be considered slow\n setTimeout(done, 600);\n});\n```\n\n#### .phase(label, fn)\n\nAdds a phase with `label` to the plan, executing `fn` with a `phase` object to define the phase plan.\n\nThe `phase` object has the `step` and `phase` methods, allowing you to build a hierarchy of other phases and steps.\n\n\n```js\nconst planify = require('planify');\nconst plan = planify();\n\nplan.phase('Phase 1', (phase) => {\n phase.step('Inner step', () => {});\n phase.phase('Inner phase', () => {});\n});\n```\n\n#### .run([data])\n\nRuns the plan.\nReturns a promise that will be resolved when the plan succeeds or rejected if any of the steps failed.\nYou may pass a callback as the second argument instead.\n\n\n```js\nconst planify = require('planify');\nconst plan = planify();\n\nplan.step('Some cool step', (data) => {\n /* ... */\n});\n\nplan.run({ initial: 'data' })\n.then(() => process.exit(0), () => process.exit(1));\n\n// or you may use callback style\nplan.run({ initial: 'data' }, (err) => {\n process.exit(err ? 1 : 0);\n});\n```\n\n#### .getReporter()\n\nReturns the configured reporter.\n\n#### .getNode()\n\nReturns the plan node, giving access to the plan tree. Use this at your own risk.\n\n\n### Caveats\n\n`planify` hooks into `process.stdout.write` and `process.stderr.write` to allow reporters to style or mute output done inside steps.\nThought, it's impossible to do that when using `child_process#spawn` or `child_process#exec` with `options.stdio` set to `inherit`. Please avoid it and listen to `data` events from stdout and stderr instead:\n\n```js\n// Example using child_process#spawn\nconst spawn = require('cross-spawn-async');\nconst planify = require('planify');\n\nplanify({ exit: true })\n.step('Executing npm install', (done) => {\n const npm = spawn('npm', ['install']); // Use cross-spawn to make this work on Windows\n\n npm.stdout.on('data', (buffer) => process.stdout.write(buffer));\n npm.stderr.on('data', (buffer) => process.stderr.write(buffer));\n\n npm.on('error', done);\n npm.on('exit', (code) => {\n done(code ? new Error('npm exited with code ' + code) : null);\n });\n})\n.run();\n```\n\n```js\n// Example using child_process#exec\nconst cp = require('child_process');\nconst planify = require('planify');\n\nplanify({ exit: true })\n.step('Executing npm install', (done) => {\n // Note that output is buffered :(\n cp.exec('npm install', (err, stdout, stderr) => {\n stdout && process.stdout.write(stdout);\n stderr && process.stderr.write(stderr);\n done(err);\n });\n})\n.run();\n```\n\n\n## Tests\n\n`$ npm test` \n`$ npm test-cov` to get coverage report\n\n\n## License\n\nReleased under the [MIT License](http://www.opensource.org/licenses/mit-license.php).\n", "maintainers": [ { "name": "satazor", "email": "andremiguelcruz@msn.com" } ], "time": { "modified": "2016-02-01T10:30:32.605Z", "created": "2016-01-14T01:31:14.599Z", "1.0.0": "2016-01-14T01:31:14.599Z", "1.0.1": "2016-01-14T02:03:52.483Z", "1.0.2": "2016-01-14T08:18:46.400Z", "1.0.3": "2016-01-14T09:15:01.124Z", "1.0.4": "2016-01-15T09:34:54.510Z", "1.0.5": "2016-01-15T23:05:49.134Z", "1.2.0": "2016-02-01T10:30:32.605Z" }, "homepage": "https://github.com/IndigoUnited/node-planify", "keywords": [ "plan", "step", "steps", "phase", "phases", "cli", "task", "runner", "run" ], "repository": { "type": "git", "url": "git://github.com/IndigoUnited/node-planify.git" }, "author": { "name": "IndigoUnited", "email": "hello@indigounited.com", "url": "http://indigounited.com" }, "bugs": { "url": "https://github.com/IndigoUnited/node-planify/issues/" }, "license": "MIT", "readmeFilename": "README.md", "users": { "carsy": true } } ================================================ FILE: test/fixtures/analyze/collect/modules/planify/expected-source.json ================================================ { "files": { "readmeSize": 9014, "testsSize": 140994 }, "linters": [ "editorconfig", "eslint" ], "coverage": 0.98, "badges": [ { "urls": { "original": "http://img.shields.io/npm/dm/planify.svg", "shields": "https://img.shields.io/npm/dm/planify.svg", "content": "https://img.shields.io/npm/dm/planify.json" }, "info": { "service": "npm", "type": "downloads", "modifiers": { "type": "dm" } } }, { "urls": { "original": "http://img.shields.io/npm/v/planify.svg", "shields": "https://img.shields.io/npm/v/planify.svg", "content": "https://img.shields.io/npm/v/planify.json" }, "info": { "service": "npm", "type": "version", "modifiers": { "type": "v" } } }, { "urls": { "original": "http://img.shields.io/travis/IndigoUnited/node-planify.svg", "service": "https://api.travis-ci.org/IndigoUnited/node-planify.svg", "shields": "https://img.shields.io/travis/IndigoUnited/node-planify.svg", "content": "https://img.shields.io/travis/IndigoUnited/node-planify.json" }, "info": { "service": "travis", "type": "build" } }, { "urls": { "original": "https://img.shields.io/coveralls/IndigoUnited/node-planify.svg", "service": "https://coveralls.io/repos/IndigoUnited/node-planify/badge.svg", "shields": "https://img.shields.io/coveralls/IndigoUnited/node-planify.svg", "content": "https://img.shields.io/coveralls/IndigoUnited/node-planify.json" }, "info": { "service": "coveralls", "type": "coverage" } }, { "urls": { "original": "https://img.shields.io/david/IndigoUnited/node-planify.svg", "service": "https://david-dm.org/IndigoUnited/node-planify.svg", "shields": "https://img.shields.io/david/IndigoUnited/node-planify.svg", "content": "https://img.shields.io/david/IndigoUnited/node-planify.json" }, "info": { "service": "david", "type": "dependencies", "modifiers": { "statusType": "normal" } } }, { "urls": { "original": "https://img.shields.io/david/dev/IndigoUnited/node-planify.svg", "service": "https://david-dm.org/IndigoUnited/node-planify/dev-status.svg", "shields": "https://img.shields.io/david/dev/IndigoUnited/node-planify.svg", "content": "https://img.shields.io/david/dev/IndigoUnited/node-planify.json" }, "info": { "service": "david", "type": "dependencies", "modifiers": { "statusType": "dev" } } } ] } ================================================ FILE: test/fixtures/analyze/collect/modules/react/data.json ================================================ { "_id": "react", "_rev": "145-228ca42672da2fe6f9f5b5fc3bccb4da", "name": "react", "description": "React is a JavaScript library for building user interfaces.", "dist-tags": { "latest": "15.4.2", "0.10.0-rc1": "0.10.0-rc1", "0.11.0-rc1": "0.11.0-rc1", "next": "16.0.0-alpha.6" }, "versions": { "0.0.1": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.0.1", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "~v0.4.12" }, "dependencies": {}, "devDependencies": {}, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.0.1", "_engineSupported": true, "_npmVersion": "1.0.103", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "c84d3dbff0c65577a52f0bfe431f8bcc155fa365", "tarball": "http://registry.npmjs.org/react/-/react-0.0.1.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.0.2": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.0.2", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "~v0.4.12" }, "dependencies": {}, "devDependencies": {}, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.0.2", "_engineSupported": true, "_npmVersion": "1.0.103", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "3cf0fbb146714879c0de7069e8cabb21f2cb523f", "tarball": "http://registry.npmjs.org/react/-/react-0.0.2.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.0.3": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.0.3", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "~v0.4.12" }, "dependencies": {}, "devDependencies": {}, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.0.3", "_engineSupported": true, "_npmVersion": "1.0.103", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "b48724d68047a09ab726d066b4290e53a7d94a6d", "tarball": "http://registry.npmjs.org/react/-/react-0.0.3.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.1.2": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.1.2", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.1.2", "_engineSupported": true, "_npmVersion": "1.0.106", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "036bfebd9748309772b79753d2e9924af7707d00", "tarball": "http://registry.npmjs.org/react/-/react-0.1.2.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.2.0": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.2.0", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.2.0", "_engineSupported": true, "_npmVersion": "1.0.106", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "770c2c548cf41e2bb676f86d55732966f83b0183", "tarball": "http://registry.npmjs.org/react/-/react-0.2.0.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.2.1": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.2.1", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.2.1", "_engineSupported": true, "_npmVersion": "1.0.106", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "9b079278e61ca59b05341abd675286f7508568b0", "tarball": "http://registry.npmjs.org/react/-/react-0.2.1.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.2.2": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.2.2", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.2.2", "_engineSupported": true, "_npmVersion": "1.0.106", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "09925e7afb8fceab6df5af07e1622581334070e2", "tarball": "http://registry.npmjs.org/react/-/react-0.2.2.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.2.3": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.2.3", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.2.3", "_engineSupported": true, "_npmVersion": "1.0.106", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "827f7ee5a9648ab56ab22ccbddfd6c051bfbec7c", "tarball": "http://registry.npmjs.org/react/-/react-0.2.3.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.2.4": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.2.4", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.2.4", "_engineSupported": true, "_npmVersion": "1.0.106", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "39aebe956fc1ad52322bf4fad458d3b41ce33bcc", "tarball": "http://registry.npmjs.org/react/-/react-0.2.4.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.2.5": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.2.5", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.2.5", "_engineSupported": true, "_npmVersion": "1.0.106", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "c44ae3de5d2fd3e2bf0d4617c3109988b9281a83", "tarball": "http://registry.npmjs.org/react/-/react-0.2.5.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.2.6": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.2.6", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.2.6", "_engineSupported": true, "_npmVersion": "1.0.106", "_nodeVersion": "v0.4.12", "_defaultsLoaded": true, "dist": { "shasum": "31dd975de23b2d514f9e34bd3b35a806208bf6f4", "tarball": "http://registry.npmjs.org/react/-/react-0.2.6.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.3.0": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.3.0", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0", "promised-io": "~0.3.0", "Deferred": "~0.1.1" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.3.0", "_engineSupported": true, "_npmVersion": "1.1.0-beta-10", "_nodeVersion": "v0.6.7", "_defaultsLoaded": true, "dist": { "shasum": "64f73e67ad01c068ead6576cb779611b6ba40746", "tarball": "http://registry.npmjs.org/react/-/react-0.3.0.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.3.4": { "name": "react", "description": "React is a javascript module to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.", "version": "0.3.4", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0", "promised-io": "~0.3.0", "Deferred": "~0.1.1" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.3.4", "_engineSupported": true, "_npmVersion": "1.1.0-beta-10", "_nodeVersion": "v0.6.7", "_defaultsLoaded": true, "dist": { "shasum": "9ef9cc87f380a3d4232506f1f8bda519aa0b0e83", "tarball": "http://registry.npmjs.org/react/-/react-0.3.4.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.3.5": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.3.5", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0", "promised-io": "~0.3.0", "Deferred": "~0.1.1" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.3.5", "_engineSupported": true, "_npmVersion": "1.1.0-beta-10", "_nodeVersion": "v0.6.7", "_defaultsLoaded": true, "dist": { "shasum": "363b85fa62d6258d449fce394366028f9727321d", "tarball": "http://registry.npmjs.org/react/-/react-0.3.5.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.5.0": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.5.0", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0", "promised-io": "~0.3.0", "Deferred": "~0.1.1" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.5.0", "_engineSupported": true, "_npmVersion": "1.1.0-beta-10", "_nodeVersion": "v0.6.7", "_defaultsLoaded": true, "dist": { "shasum": "6c1c76a1627b793ace4b961ed29bb32e6452f8cf", "tarball": "http://registry.npmjs.org/react/-/react-0.5.0.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.5.1": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.5.1", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0", "promised-io": "~0.3.0", "Deferred": "~0.1.1" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.5.1", "_engineSupported": true, "_npmVersion": "1.1.0-beta-10", "_nodeVersion": "v0.6.7", "_defaultsLoaded": true, "dist": { "shasum": "aae9f621d3503018406cc86189d3b040aa1173bf", "tarball": "http://registry.npmjs.org/react/-/react-0.5.1.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.5.2": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.5.2", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "react", "engines": { "node": "*" }, "dependencies": { "eventemitter2": "~0.4.1", "sprintf": "~0.1.1", "ensure-array": "~0.0.2" }, "devDependencies": { "tap": "~0.1.0", "tapr": "~0.1.0", "promised-io": "~0.3.0", "Deferred": "~0.1.1" }, "scripts": { "test": "node_modules/.bin/tapr test" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.5.2", "_engineSupported": true, "_npmVersion": "1.1.0-beta-10", "_nodeVersion": "v0.6.11", "_defaultsLoaded": true, "dist": { "shasum": "5f77c6eab101d965fb98785c68940c6e17c0b7b6", "tarball": "http://registry.npmjs.org/react/-/react-0.5.2.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.6.0": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.6.0", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "lib/react", "engines": { "node": ">=0.6" }, "dependencies": { "amdefine": "~0.0.2", "eventemitter2": "~0.4.1", "sprint": "~0.3.0", "ensure-array": "~0.0.5" }, "devDependencies": { "requirejs": "~1.0.7", "mocha": "~0.14.1", "chai": "~0.5.2", "jake": "~0.2.31", "Deferred": "~0.1.1" }, "scripts": { "test": "./node_modules/mocha/bin/mocha ./test/*.mocha.js" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.6.0", "optionalDependencies": {}, "_engineSupported": true, "_npmVersion": "1.1.12", "_nodeVersion": "v0.6.12", "_defaultsLoaded": true, "dist": { "shasum": "ad4ba0cff733a24d104e58b0cbfdef66c9b8a65f", "tarball": "http://registry.npmjs.org/react/-/react-0.6.0.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.6.1": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.6.1", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "lib/react", "engines": { "node": ">=0.6" }, "dependencies": { "amdefine": "~0.0.2", "eventemitter2": "~0.4.1", "ensure-array": "~0.0.5" }, "devDependencies": { "requirejs": "~1.0.7", "mocha": "~0.14.1", "chai": "~0.5.2", "jake": "~0.2.31", "Deferred": "~0.1.1" }, "scripts": { "test": "./node_modules/mocha/bin/mocha ./test/*.mocha.js" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.6.1", "optionalDependencies": {}, "_engineSupported": true, "_npmVersion": "1.1.12", "_nodeVersion": "v0.6.12", "_defaultsLoaded": true, "dist": { "shasum": "8a68961f0da0bf41d67e35f8ccda4161b9ba9e22", "tarball": "http://registry.npmjs.org/react/-/react-0.6.1.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.6.2": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.6.2", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "lib/react", "engines": { "node": ">=0.6" }, "dependencies": { "amdefine": "~0.0.2", "eventemitter2": "~0.4.1", "ensure-array": "~0.0.5" }, "devDependencies": { "requirejs": "~2.0.6", "mocha": "~1.4.2", "chai": "~1.2.0", "jake": "~0.3.16", "Deferred": "~0.1.1" }, "scripts": { "test": "./node_modules/mocha/bin/mocha ./test/*.mocha.js" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.6.2", "optionalDependencies": {}, "_engineSupported": true, "_npmVersion": "1.1.12", "_nodeVersion": "v0.8.8", "_defaultsLoaded": true, "dist": { "shasum": "9d2d0c241a94c526663ccec605cb53c429ccea9e", "tarball": "http://registry.npmjs.org/react/-/react-0.6.2.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.6.3": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.6.3", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "git://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "lib/react", "engines": { "node": ">=0.6" }, "dependencies": { "amdefine": "~0.0.2", "eventemitter2": "~0.4.1", "ensure-array": "~0.0.5" }, "devDependencies": { "requirejs": "~2.0.6", "mocha": "~1.4.2", "chai": "~1.2.0", "jake": "~0.3.16", "Deferred": "~0.1.1" }, "scripts": { "test": "./node_modules/mocha/bin/mocha ./test/*.mocha.js" }, "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "_id": "react@0.6.3", "optionalDependencies": {}, "_engineSupported": true, "_npmVersion": "1.1.12", "_nodeVersion": "v0.8.8", "_defaultsLoaded": true, "dist": { "shasum": "87b89ccac78deecdd148c93989b0ba08da8c127f", "tarball": "http://registry.npmjs.org/react/-/react-0.6.3.tgz" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.7.0": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.7.0", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "http://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "lib/react", "engines": { "node": ">=0.6" }, "dependencies": { "amdefine": "~0.0.5", "eventemitter2": "~0.4.11", "ensure-array": "~0.0.5" }, "devDependencies": { "requirejs": "~2.1.6", "mocha": "~1.10.0", "chai": "~1.6.0", "jake": "~0.5.15", "Deferred": "~0.1.1" }, "scripts": { "test": "./node_modules/mocha/bin/mocha ./test/*.mocha.js" }, "_id": "react@0.7.0", "dist": { "shasum": "8b4713aa18d019f0a72d7d935954aec9779aa389", "tarball": "http://registry.npmjs.org/react/-/react-0.7.0.tgz" }, "_from": ".", "_npmVersion": "1.2.18", "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {} }, "0.7.1": { "name": "react", "description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow", "version": "0.7.1", "author": { "name": "Jeff Barczewski", "email": "jeff.barczewski@gmail.com" }, "repository": { "type": "git", "url": "http://github.com/jeffbski/react.git" }, "bugs": { "url": "http://github.com/jeffbski/react/issues" }, "licenses": [ { "type": "MIT", "url": "http://github.com/jeffbski/react/raw/master/LICENSE" } ], "main": "lib/react", "engines": { "node": ">=0.6" }, "dependencies": { "amdefine": "~0.0.5", "eventemitter2": "~0.4.11", "ensure-array": "~0.0.5" }, "devDependencies": { "requirejs": "~2.1.6", "mocha": "~1.10.0", "chai": "~1.6.0", "jake": "~0.5.15", "Deferred": "~0.1.1" }, "keywords": [ "flow", "flow control", "control flow", "dataflow", "reactive", "deferred", "promise", "async" ], "scripts": { "test": "./node_modules/mocha/bin/mocha ./test/*.mocha.js" }, "_id": "react@0.7.1", "dist": { "shasum": "5975afe741f977ba3dcd26faca432a832c0c7b04", "tarball": "http://registry.npmjs.org/react/-/react-0.7.1.tgz" }, "_from": ".", "_npmVersion": "1.2.18", "_npmUser": { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" } ], "directories": {}, "deprecated": "The jeffbski/react module has been renamed to 'autoflow'. Please update your dependencies to point to autoflow. react@0.8.0+ will now refer to facebook/react" }, "0.8.0": { "name": "react", "version": "0.8.0", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "ReactJSErrors.js", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { "envify": "~0.2.0" }, "browserify": { "transform": [ "envify" ] }, "description": "An npm package to get you immediate access to [React](http://facebook.github.io/react/), without also requiring the JSX transformer. This is especially useful for cases where you want to [`browserify`](https://github.com/substack/node-browserify) your mod", "_id": "react@0.8.0", "dist": { "shasum": "9aef0dbc3e05b44d96139cdbdaa5d727b0506e1e", "tarball": "http://registry.npmjs.org/react/-/react-0.8.0.tgz" }, "_resolved": "react-0.8.0.tgz", "_from": "react-0.8.0.tgz", "scripts": {}, "_npmVersion": "1.3.14", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "directories": {} }, "0.9.0-rc1": { "name": "react", "version": "0.9.0-rc1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { "envify": "~1.0.1" }, "browserify": { "transform": [ "envify" ] }, "description": "An npm package to get you immediate access to [React](http://facebook.github.io/react/), without also requiring the JSX transformer. This is especially useful for cases where you want to [`browserify`](https://github.com/substack/node-browserify) your mod", "_id": "react@0.9.0-rc1", "dist": { "shasum": "44f830c1a506bdc4f042be940c638728ea5eb2f5", "tarball": "http://registry.npmjs.org/react/-/react-0.9.0-rc1.tgz" }, "_from": ".", "_npmVersion": "1.3.21", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "jeffbski", "email": "jeff.barczewski@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "directories": {} }, "0.9.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.9.0", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { "envify": "~1.2.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.9.0", "dist": { "shasum": "c1c91e19fe391f997012791839ddffded20c68fd", "tarball": "http://registry.npmjs.org/react/-/react-0.9.0.tgz" }, "_resolved": "react.tgz", "_from": "react.tgz", "scripts": {}, "_npmVersion": "1.3.14", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "directories": {} }, "0.10.0-rc1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.10.0-rc1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { "envify": "~1.2.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.10.0-rc1", "dist": { "shasum": "04c3ed833fb72249e2dce7dee33f63e0f781e010", "tarball": "http://registry.npmjs.org/react/-/react-0.10.0-rc1.tgz" }, "_from": ".", "_npmVersion": "1.4.3", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "directories": {} }, "0.10.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.10.0", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { "envify": "~1.2.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.10.0", "dist": { "shasum": "8c82753593d3f325ca99d820f7400ab02f1ee1f8", "tarball": "http://registry.npmjs.org/react/-/react-0.10.0.tgz" }, "_resolved": "react.tgz", "_from": "react.tgz", "scripts": {}, "_npmVersion": "1.4.3", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "directories": {} }, "0.11.0-rc1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.11.0-rc1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^2.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.11.0-rc1", "_shasum": "584eb0d2f4c23fa5e44185837d75a24d19fd6877", "_resolved": "react.tgz", "_from": "react.tgz", "scripts": {}, "_npmVersion": "1.4.20", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "584eb0d2f4c23fa5e44185837d75a24d19fd6877", "tarball": "http://registry.npmjs.org/react/-/react-0.11.0-rc1.tgz" }, "directories": {} }, "0.11.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.11.0", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^2.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.11.0", "_shasum": "110428587ef97a28d9525df148e4ceffeb0be37b", "_resolved": "react.tgz", "_from": "react.tgz", "scripts": {}, "_npmVersion": "1.4.20", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "110428587ef97a28d9525df148e4ceffeb0be37b", "tarball": "http://registry.npmjs.org/react/-/react-0.11.0.tgz" }, "directories": {} }, "0.11.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.11.1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^2.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.11.1", "_shasum": "201190712f69bc451e2c83946653384d7448aaff", "_resolved": "react.tgz", "_from": "react.tgz", "scripts": {}, "_npmVersion": "1.4.14", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "201190712f69bc451e2c83946653384d7448aaff", "tarball": "http://registry.npmjs.org/react/-/react-0.11.1.tgz" }, "directories": {} }, "0.11.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.11.2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "licenses": [ { "type": "Apache-2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^2.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.11.2", "_shasum": "eaeb787e9b1e266a3540c07c06f4ea80fe1e3766", "_resolved": "react.tgz", "_from": "react.tgz", "scripts": {}, "_npmVersion": "1.4.23", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "eaeb787e9b1e266a3540c07c06f4ea80fe1e3766", "tarball": "http://registry.npmjs.org/react/-/react-0.11.2.tgz" }, "directories": {} }, "0.12.0-rc1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.12.0-rc1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.12.0-rc1", "_shasum": "de56afc07e834fdf2f988a9c1026c25b93a61636", "_resolved": "/Users/poshannessy/FB/code/react/build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.1.3", "_nodeVersion": "0.10.31", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "de56afc07e834fdf2f988a9c1026c25b93a61636", "tarball": "http://registry.npmjs.org/react/-/react-0.12.0-rc1.tgz" }, "directories": {} }, "0.12.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.12.0", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.12.0", "_shasum": "4361809e9fc234fc89db4ebc087bdda07908a56b", "_resolved": "/Users/poshannessy/FB/code/react/build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.1.4", "_nodeVersion": "0.10.32", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "4361809e9fc234fc89db4ebc087bdda07908a56b", "tarball": "http://registry.npmjs.org/react/-/react-0.12.0.tgz" }, "directories": {} }, "0.12.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.12.1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.12.1", "_shasum": "b73836f4f1888ce79c9372208398a3fb5483bc35", "_resolved": "react.tgz", "_from": "react.tgz", "scripts": {}, "_npmVersion": "1.4.21", "_npmUser": { "name": "jeffmo", "email": "jeff@anafx.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "b73836f4f1888ce79c9372208398a3fb5483bc35", "tarball": "http://registry.npmjs.org/react/-/react-0.12.1.tgz" }, "directories": {} }, "0.12.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.12.2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.12.2", "_shasum": "1c4f0b08818146eeab4f0ab39257e0aa52027e00", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.1.11", "_nodeVersion": "0.10.32", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "1c4f0b08818146eeab4f0ab39257e0aa52027e00", "tarball": "http://registry.npmjs.org/react/-/react-0.12.2.tgz" }, "directories": {} }, "0.13.0-alpha.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.0-alpha.1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.0-alpha.1", "_shasum": "3f456c28218911536bb331f95f293ac4983ebcd3", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.1.11", "_nodeVersion": "0.10.32", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "3f456c28218911536bb331f95f293ac4983ebcd3", "tarball": "http://registry.npmjs.org/react/-/react-0.13.0-alpha.1.tgz" }, "directories": {} }, "0.13.0-alpha.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.0-alpha.2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.0-alpha.2", "_shasum": "ef16c2018564cf12560543abdde2425f995761f8", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.1.11", "_nodeVersion": "0.10.32", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "ef16c2018564cf12560543abdde2425f995761f8", "tarball": "http://registry.npmjs.org/react/-/react-0.13.0-alpha.2.tgz" }, "directories": {} }, "0.13.0-beta.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.0-beta.1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.0-beta.1", "_shasum": "3116a1a088a10f7c758b26d0b4cbc3c13d6a8f29", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.1.11", "_nodeVersion": "0.10.32", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "3116a1a088a10f7c758b26d0b4cbc3c13d6a8f29", "tarball": "http://registry.npmjs.org/react/-/react-0.13.0-beta.1.tgz" }, "directories": {} }, "0.13.0-beta.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.0-beta.2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.0-beta.2", "_shasum": "94495988d861802afb9e4dc36acf387463c98614", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.4.1", "_nodeVersion": "0.10.32", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "94495988d861802afb9e4dc36acf387463c98614", "tarball": "http://registry.npmjs.org/react/-/react-0.13.0-beta.2.tgz" }, "directories": {} }, "0.13.0-rc1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.0-rc1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.0-rc1", "_shasum": "1773c4cf6b4f422b665eceb276345cfc030678ac", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.4.1", "_nodeVersion": "0.10.32", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "1773c4cf6b4f422b665eceb276345cfc030678ac", "tarball": "http://registry.npmjs.org/react/-/react-0.13.0-rc1.tgz" }, "directories": {} }, "0.13.0-rc2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.0-rc2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.0-rc2", "_shasum": "34e13467a0a198d44a5862bb7471177379129570", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.6.1", "_nodeVersion": "0.10.36", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" } ], "dist": { "shasum": "34e13467a0a198d44a5862bb7471177379129570", "tarball": "http://registry.npmjs.org/react/-/react-0.13.0-rc2.tgz" }, "directories": {} }, "0.13.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.0", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.0", "_shasum": "34e0c78014589ed56884bb835282b0acd3fc57d7", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.6.1", "_nodeVersion": "0.10.36", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "34e0c78014589ed56884bb835282b0acd3fc57d7", "tarball": "http://registry.npmjs.org/react/-/react-0.13.0.tgz" }, "directories": {} }, "0.13.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.1", "_shasum": "d38b700cdf7b33eeb0cefd7b8ca98e0fe8e5339d", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.7.1", "_nodeVersion": "0.10.36", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "d38b700cdf7b33eeb0cefd7b8ca98e0fe8e5339d", "tarball": "http://registry.npmjs.org/react/-/react-0.13.1.tgz" }, "directories": {} }, "0.13.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.2", "_shasum": "a1c7cec5e7be080c4e249b20740d4d4cd18880ca", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.7.3", "_nodeVersion": "0.10.38", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "a1c7cec5e7be080c4e249b20740d4d4cd18880ca", "tarball": "http://registry.npmjs.org/react/-/react-0.13.2.tgz" }, "directories": {} }, "0.13.3": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.13.3", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues?labels=react-core" }, "license": "BSD-3-Clause", "files": [ "README.md", "addons.js", "react.js", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.13.3", "_shasum": "a2dfa85335d7dc02b82b482f089582e64cc13356", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.7.3", "_nodeVersion": "0.10.38", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "a2dfa85335d7dc02b82b482f089582e64cc13356", "tarball": "http://registry.npmjs.org/react/-/react-0.13.3.tgz" }, "directories": {} }, "0.14.0-alpha1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.0-alpha1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.0-alpha1", "_shasum": "46f662c635240e3974028d83945ba696a22d0092", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.7.3", "_nodeVersion": "0.10.38", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "46f662c635240e3974028d83945ba696a22d0092", "tarball": "http://registry.npmjs.org/react/-/react-0.14.0-alpha1.tgz" }, "directories": {} }, "0.14.0-alpha2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.0-alpha2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.0-alpha2", "_shasum": "1afa693e4040f8395b2a2f32b0b0c6df4fc354e0", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.6.1", "_nodeVersion": "0.10.38", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "1afa693e4040f8395b2a2f32b0b0c6df4fc354e0", "tarball": "http://registry.npmjs.org/react/-/react-0.14.0-alpha2.tgz" }, "directories": {} }, "0.14.0-alpha3": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.0-alpha3", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.0-alpha3", "_shasum": "b3b656bdac224e9e01ca68c1f0efd6d3ebb3dd34", "_resolved": "file:build/react.tgz", "_from": "build/react.tgz", "scripts": {}, "_npmVersion": "2.2.0", "_nodeVersion": "0.10.35", "_npmUser": { "name": "spicyj", "email": "ben@benalpert.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "b3b656bdac224e9e01ca68c1f0efd6d3ebb3dd34", "tarball": "http://registry.npmjs.org/react/-/react-0.14.0-alpha3.tgz" }, "directories": {} }, "0.14.0-beta1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.0-beta1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.0-beta1", "_shasum": "51db95e84bff59cc5205472c8f633d814ee5cd8f", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.2.0", "_nodeVersion": "0.10.35", "_npmUser": { "name": "spicyj", "email": "ben@benalpert.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "51db95e84bff59cc5205472c8f633d814ee5cd8f", "tarball": "http://registry.npmjs.org/react/-/react-0.14.0-beta1.tgz" }, "directories": {} }, "0.14.0-beta2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.0-beta2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "0.1.0-alpha.4" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.0-beta2", "_shasum": "818a9aac1d397a60c9046013060cfd6c361a104e", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.13.2", "_nodeVersion": "0.10.40", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "818a9aac1d397a60c9046013060cfd6c361a104e", "tarball": "http://registry.npmjs.org/react/-/react-0.14.0-beta2.tgz" }, "directories": {} }, "0.14.0-beta3": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.0-beta3", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "0.1.0-alpha.4" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.0-beta3", "_shasum": "668763b03fc5c531f56a3788f00d35d12170fe5d", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.13.2", "_nodeVersion": "0.10.40", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "668763b03fc5c531f56a3788f00d35d12170fe5d", "tarball": "http://registry.npmjs.org/react/-/react-0.14.0-beta3.tgz" }, "directories": {} }, "0.14.0-rc1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.0-rc1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "https://github.com/facebook/react" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.2.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.0-rc1", "_shasum": "46f27951a4b01becea607d7a51970a654bb6f867", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.2.0", "_nodeVersion": "0.10.35", "_npmUser": { "name": "spicyj", "email": "ben@benalpert.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "46f27951a4b01becea607d7a51970a654bb6f867", "tarball": "http://registry.npmjs.org/react/-/react-0.14.0-rc1.tgz" }, "directories": {} }, "0.14.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.0", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.3.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.0", "_shasum": "72e7c69233b082e37e1bbd3674a943db72d8f407", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.3", "_nodeVersion": "4.1.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "72e7c69233b082e37e1bbd3674a943db72d8f407", "tarball": "http://registry.npmjs.org/react/-/react-0.14.0.tgz" }, "directories": {} }, "0.14.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.3.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.1", "_shasum": "38382f8a683e24d0ef0c2a0e204b7b18723cb11b", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.8", "_nodeVersion": "4.2.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "38382f8a683e24d0ef0c2a0e204b7b18723cb11b", "tarball": "http://registry.npmjs.org/react/-/react-0.14.1.tgz" }, "directories": {} }, "0.14.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.2", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.3.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.2", "_shasum": "694d3eabdfde56ec2ba1b4db7d160c9a6fe9ce6a", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.9", "_nodeVersion": "4.2.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "694d3eabdfde56ec2ba1b4db7d160c9a6fe9ce6a", "tarball": "http://registry.npmjs.org/react/-/react-0.14.2.tgz" }, "directories": {} }, "0.14.3": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.3", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.3.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.3", "_shasum": "b82e7b049ee3e1e264d24ae7ea20d76e51126778", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.7", "_nodeVersion": "4.2.2", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "b82e7b049ee3e1e264d24ae7ea20d76e51126778", "tarball": "http://registry.npmjs.org/react/-/react-0.14.3.tgz" }, "directories": {} }, "0.14.4": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.4", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.3.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.4", "_shasum": "9c727f02c8bda2b8fde74748da5274e5517dd5af", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.4", "_nodeVersion": "4.1.0", "_npmUser": { "name": "spicyj", "email": "ben@benalpert.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "9c727f02c8bda2b8fde74748da5274e5517dd5af", "tarball": "http://registry.npmjs.org/react/-/react-0.14.4.tgz" }, "directories": {} }, "0.14.5": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.5", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.6.0" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.5", "_shasum": "4250649db2b3047c01dc2f60098388a60eab6681", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.4", "_nodeVersion": "4.1.0", "_npmUser": { "name": "spicyj", "email": "ben@benalpert.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "4250649db2b3047c01dc2f60098388a60eab6681", "tarball": "http://registry.npmjs.org/react/-/react-0.14.5.tgz" }, "directories": {} }, "0.14.6": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.6", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.6.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.6", "_shasum": "2a57c2cf8747b483759ad8de0fa47fb0c5cf5c6a", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.15", "_nodeVersion": "4.2.2", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "2a57c2cf8747b483759ad8de0fa47fb0c5cf5c6a", "tarball": "http://registry.npmjs.org/react/-/react-0.14.6.tgz" }, "directories": {} }, "0.15.0-alpha.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.15.0-alpha.1", "keywords": [ "react" ], "homepage": "https://github.com/facebook/react/tree/master/npm-react", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.6.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.15.0-alpha.1", "_shasum": "860edb7f09cc6f4cbbedc919bf1bca4937268a0e", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.15", "_nodeVersion": "4.2.2", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "zpao", "email": "paul@oshannessy.com" }, { "name": "jeffmo", "email": "jeff@anafx.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" } ], "dist": { "shasum": "860edb7f09cc6f4cbbedc919bf1bca4937268a0e", "tarball": "http://registry.npmjs.org/react/-/react-0.15.0-alpha.1.tgz" }, "directories": {} }, "0.14.7": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.7", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.6.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.7", "_shasum": "76c4e5cfa204caa5aaf42b13008f0d3f6d58a133", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.12", "_nodeVersion": "4.2.6", "_npmUser": { "name": "graue", "email": "scott@oceanbase.org" }, "dist": { "shasum": "76c4e5cfa204caa5aaf42b13008f0d3f6d58a133", "tarball": "http://registry.npmjs.org/react/-/react-0.14.7.tgz" }, "maintainers": [ { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "directories": {} }, "15.0.0-rc.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.0-rc.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.8.0-alpha.2" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@15.0.0-rc.1", "_shasum": "66cd711c0ce41f1eecde8f014529a215ff636403", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.12", "_nodeVersion": "4.3.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "66cd711c0ce41f1eecde8f014529a215ff636403", "tarball": "http://registry.npmjs.org/react/-/react-15.0.0-rc.1.tgz" }, "_npmOperationalInternal": { "host": "packages-13-west.internal.npmjs.com", "tmp": "tmp/react-15.0.0-rc.1.tgz_1457399244933_0.5052846136968583" }, "directories": {} }, "15.0.0-rc.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.0-rc.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.8.0-alpha.2" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@15.0.0-rc.2", "_shasum": "acfb768af86deb06b5bbb676778d5ec90661faa3", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.8.1", "_nodeVersion": "5.1.1", "_npmUser": { "name": "gaearon", "email": "dan.abramov@gmail.com" }, "dist": { "shasum": "acfb768af86deb06b5bbb676778d5ec90661faa3", "tarball": "http://registry.npmjs.org/react/-/react-15.0.0-rc.2.tgz" }, "maintainers": [ { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-13-west.internal.npmjs.com", "tmp": "tmp/react-15.0.0-rc.2.tgz_1458166772989_0.39132320368662477" }, "directories": {} }, "0.14.8": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "0.14.8", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "envify": "^3.0.0", "fbjs": "^0.6.1" }, "browserify": { "transform": [ "envify" ] }, "_id": "react@0.14.8", "_shasum": "078dfa454d4745bcc54a9726311c2bf272c23684", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.7", "_nodeVersion": "4.2.1", "_npmUser": { "name": "gaearon", "email": "dan.abramov@gmail.com" }, "dist": { "shasum": "078dfa454d4745bcc54a9726311c2bf272c23684", "tarball": "http://registry.npmjs.org/react/-/react-0.14.8.tgz" }, "maintainers": [ { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-0.14.8.tgz_1459268381371_0.8583754827268422" }, "directories": {} }, "15.0.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.0", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.0.1" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.0", "_shasum": "3c7e16531d630e15c1a50a947f14ba61746af8a7", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.3", "_nodeVersion": "4.4.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "3c7e16531d630e15c1a50a947f14ba61746af8a7", "tarball": "http://registry.npmjs.org/react/-/react-15.0.0.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.0.0.tgz_1460064342394_0.2830837108194828" }, "directories": {} }, "15.0.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.0.1" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.1", "_shasum": "262d4f073a384c2a0421afb82d97c8f7df581c09", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.0", "_nodeVersion": "4.4.2", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "262d4f073a384c2a0421afb82d97c8f7df581c09", "tarball": "http://registry.npmjs.org/react/-/react-15.0.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.0.1.tgz_1460139841427_0.5669335899874568" }, "directories": {} }, "15.0.2-alpha.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.2-alpha.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.0.1" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.2-alpha.1", "_shasum": "4133eaa18b944493b74c258432092d3b4f5d1afe", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.3", "_nodeVersion": "4.4.2", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "4133eaa18b944493b74c258432092d3b4f5d1afe", "tarball": "http://registry.npmjs.org/react/-/react-15.0.2-alpha.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.0.2-alpha.1.tgz_1461176270714_0.33574754116125405" }, "directories": {} }, "15.0.2-alpha.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.2-alpha.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.0.1" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.2-alpha.2", "_shasum": "89c280856f0b0887f5f9a11d436b74fd2bb82b6f", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.14.19", "_nodeVersion": "4.1.0", "_npmUser": { "name": "spicyj", "email": "ben@benalpert.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "89c280856f0b0887f5f9a11d436b74fd2bb82b6f", "tarball": "http://registry.npmjs.org/react/-/react-15.0.2-alpha.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.0.2-alpha.2.tgz_1461277327038_0.6486006544437259" }, "directories": {} }, "15.0.2-alpha.3": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.2-alpha.3", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.0.1" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.2-alpha.3", "_shasum": "a38920a7eed8fe917f33479759859db113f1079b", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.3", "_nodeVersion": "4.4.2", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "a38920a7eed8fe917f33479759859db113f1079b", "tarball": "http://registry.npmjs.org/react/-/react-15.0.2-alpha.3.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.0.2-alpha.3.tgz_1461614642498_0.8830359973944724" }, "directories": {} }, "15.0.2-alpha.4": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.2-alpha.4", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.0.1" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.2-alpha.4", "_shasum": "aeba1890df372facc65b9a004e8613cce45325e9", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.3", "_nodeVersion": "4.4.2", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "aeba1890df372facc65b9a004e8613cce45325e9", "tarball": "http://registry.npmjs.org/react/-/react-15.0.2-alpha.4.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.0.2-alpha.4.tgz_1461827530020_0.8679555198177695" }, "directories": {} }, "15.0.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.0.1" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.2", "_shasum": "63b95dfda563018a20c182300651ed933e0dd30c", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.1", "_nodeVersion": "4.4.3", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "63b95dfda563018a20c182300651ed933e0dd30c", "tarball": "http://registry.npmjs.org/react/-/react-15.0.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.0.2.tgz_1461976706320_0.04675518674775958" }, "directories": {} }, "15.0.3-alpha.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.3-alpha.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.3-alpha.1", "_shasum": "53b6cd71937f1012aa08a819d43275346ed58442", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.1", "_nodeVersion": "4.4.3", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "53b6cd71937f1012aa08a819d43275346ed58442", "tarball": "http://registry.npmjs.org/react/-/react-15.0.3-alpha.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.0.3-alpha.1.tgz_1462304430912_0.07903718855232" }, "directories": {} }, "15.0.3-alpha.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.0.3-alpha.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.0.3-alpha.2", "_shasum": "37ffa7dbd0af1f97ed443e6205ff97e7deef92f4", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.1", "_nodeVersion": "4.4.3", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "37ffa7dbd0af1f97ed443e6205ff97e7deef92f4", "tarball": "http://registry.npmjs.org/react/-/react-15.0.3-alpha.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.0.3-alpha.2.tgz_1462855084959_0.35946066956967115" }, "directories": {} }, "15.1.0-alpha.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.1.0-alpha.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.1.0-alpha.1", "_shasum": "b40884cf9629bb7cba197334b4c6c90e2ae31a8b", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.1", "_nodeVersion": "4.4.3", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "b40884cf9629bb7cba197334b4c6c90e2ae31a8b", "tarball": "http://registry.npmjs.org/react/-/react-15.1.0-alpha.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.1.0-alpha.1.tgz_1462858117767_0.19979739608243108" }, "directories": {} }, "15.1.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.1.0", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.0", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.1.0", "_shasum": "5f7a9f085a00509898efd2b24cb12ea1dfaf8b40", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.1", "_nodeVersion": "4.4.3", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "5f7a9f085a00509898efd2b24cb12ea1dfaf8b40", "tarball": "http://registry.npmjs.org/react/-/react-15.1.0.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.1.0.tgz_1463785583737_0.3351648454554379" }, "directories": {} }, "15.2.0-rc.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.2.0-rc.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.2.0-rc.1", "_shasum": "4eea4965918eda010610a20a235991ef6d564a9f", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.5", "_nodeVersion": "4.4.5", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "4eea4965918eda010610a20a235991ef6d564a9f", "tarball": "http://registry.npmjs.org/react/-/react-15.2.0-rc.1.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.2.0-rc.1.tgz_1465954216788_0.6071536028757691" }, "directories": {} }, "15.2.0-rc.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.2.0-rc.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.2.0-rc.2", "_shasum": "4d8fce569da24d3e43d2df56223c96f2f08e45c1", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.5", "_nodeVersion": "4.4.5", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "4d8fce569da24d3e43d2df56223c96f2f08e45c1", "tarball": "http://registry.npmjs.org/react/-/react-15.2.0-rc.2.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.2.0-rc.2.tgz_1467354728656_0.9496972488705069" }, "directories": {} }, "15.2.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.2.0", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.2.0", "_shasum": "cb85449b10c74ba8cd4bde0cd2867b5eee09a974", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.5", "_nodeVersion": "4.4.5", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "cb85449b10c74ba8cd4bde0cd2867b5eee09a974", "tarball": "http://registry.npmjs.org/react/-/react-15.2.0.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.2.0.tgz_1467399143970_0.045634721172973514" }, "directories": {} }, "15.2.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.2.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.2.1", "_shasum": "e458df700bae72900ba32673b7e42e8dbd05a393", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.5", "_nodeVersion": "4.4.5", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "e458df700bae72900ba32673b7e42e8dbd05a393", "tarball": "http://registry.npmjs.org/react/-/react-15.2.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.2.1.tgz_1468017069863_0.4487692511174828" }, "directories": {} }, "15.3.0-rc.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.0-rc.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.0-rc.1", "_shasum": "7043c0347f70d78d92d3f6e8f40f0fc3959b2bb2", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.9.6", "_nodeVersion": "6.2.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "7043c0347f70d78d92d3f6e8f40f0fc3959b2bb2", "tarball": "http://registry.npmjs.org/react/-/react-15.3.0-rc.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.3.0-rc.1.tgz_1468436313261_0.705962639534846" }, "directories": {} }, "15.3.0-rc.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.0-rc.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.0-rc.2", "_shasum": "f0f6aee4d4d04ce6fff5c4b734b51bf596d8d4e4", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.9.6", "_nodeVersion": "6.2.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "f0f6aee4d4d04ce6fff5c4b734b51bf596d8d4e4", "tarball": "http://registry.npmjs.org/react/-/react-15.3.0-rc.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.3.0-rc.2.tgz_1468443732698_0.17692823754623532" }, "directories": {} }, "15.3.0-rc.3": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.0-rc.3", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.0-rc.3", "_shasum": "d4bff138110be7b5657bf27bd9dc3eaaa6756ceb", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.9.6", "_nodeVersion": "6.2.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "d4bff138110be7b5657bf27bd9dc3eaaa6756ceb", "tarball": "http://registry.npmjs.org/react/-/react-15.3.0-rc.3.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.3.0-rc.3.tgz_1469141953170_0.883343250490725" }, "directories": {} }, "15.3.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.0", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.0", "_shasum": "b06a26d26e5613888acb196aa93e9c082a9c21fa", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.9.6", "_nodeVersion": "6.2.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "b06a26d26e5613888acb196aa93e9c082a9c21fa", "tarball": "http://registry.npmjs.org/react/-/react-15.3.0.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.3.0.tgz_1469817499689_0.703904666705057" }, "directories": {} }, "15.3.1-rc.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.1-rc.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.1-rc.1", "_shasum": "0127a596230105f3d563f9092092209d179f0bbf", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.5", "_nodeVersion": "4.4.5", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "0127a596230105f3d563f9092092209d179f0bbf", "tarball": "http://registry.npmjs.org/react/-/react-15.3.1-rc.1.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.3.1-rc.1.tgz_1471044928432_0.904218602925539" }, "directories": {} }, "15.3.1-rc.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.1-rc.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.1", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.1-rc.2", "_shasum": "dd862bfe8b18b81543671bd9f6e660bcf3d9b9f1", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.5", "_nodeVersion": "4.4.5", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "dd862bfe8b18b81543671bd9f6e660bcf3d9b9f1", "tarball": "http://registry.npmjs.org/react/-/react-15.3.1-rc.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.3.1-rc.2.tgz_1471301792299_0.9451233274303377" }, "directories": {} }, "15.3.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.1", "_shasum": "f78501ed8c2ec6e6e31c3223652e97f1369d2bd6", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "2.15.5", "_nodeVersion": "4.4.5", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "f78501ed8c2ec6e6e31c3223652e97f1369d2bd6", "tarball": "http://registry.npmjs.org/react/-/react-15.3.1.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.3.1.tgz_1471632623070_0.8903805704321712" }, "directories": {} }, "15.3.2-rc.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.2-rc.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.2-rc.1", "_shasum": "d24556bde92d981f44189e76c60b27b07f5b0117", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.3", "_nodeVersion": "6.5.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "d24556bde92d981f44189e76c60b27b07f5b0117", "tarball": "http://registry.npmjs.org/react/-/react-15.3.2-rc.1.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.3.2-rc.1.tgz_1473983021742_0.07579111633822322" }, "directories": {} }, "15.3.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.3.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.3.2", "_shasum": "a7bccd2fee8af126b0317e222c28d1d54528d09e", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.3", "_nodeVersion": "6.5.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "a7bccd2fee8af126b0317e222c28d1d54528d09e", "tarball": "http://registry.npmjs.org/react/-/react-15.3.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.3.2.tgz_1474307224453_0.9796286460477859" }, "directories": {} }, "15.4.0-rc.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.4.0-rc.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.4.0-rc.1", "_shasum": "fb6edab37cb6d6cfc2788aee079478f7deebb453", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.3", "_nodeVersion": "6.7.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "fb6edab37cb6d6cfc2788aee079478f7deebb453", "tarball": "http://registry.npmjs.org/react/-/react-15.4.0-rc.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.4.0-rc.1.tgz_1475620542387_0.897912819404155" }, "directories": {} }, "15.4.0-rc.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.4.0-rc.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.4.0-rc.2", "_shasum": "e70ee35c85fc8390b60106440d7f55a56d00e8ff", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.3", "_nodeVersion": "6.7.0", "_npmUser": { "name": "zpao", "email": "paul@oshannessy.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "e70ee35c85fc8390b60106440d7f55a56d00e8ff", "tarball": "http://registry.npmjs.org/react/-/react-15.4.0-rc.2.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.4.0-rc.2.tgz_1475707866845_0.657080645672977" }, "directories": {} }, "15.4.0-rc.3": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.4.0-rc.3", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.4.0-rc.3", "_shasum": "2e8b011ae31282a28f8fd1e94a8ec35e1598348e", "_resolved": "file:packages/react.tgz", "_from": "packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.3", "_nodeVersion": "6.3.1", "_npmUser": { "name": "gaearon", "email": "dan.abramov@gmail.com" }, "dist": { "shasum": "2e8b011ae31282a28f8fd1e94a8ec35e1598348e", "tarball": "http://registry.npmjs.org/react/-/react-15.4.0-rc.3.tgz" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.4.0-rc.3.tgz_1476472655799_0.8196369777433574" }, "directories": {} }, "15.4.0-rc.4": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.4.0-rc.4", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.4.0-rc.4", "scripts": {}, "_shasum": "09d08dd266a9088db963399dfdf814377e9a74dc", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.6.0", "_npmUser": { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "09d08dd266a9088db963399dfdf814377e9a74dc", "tarball": "http://registry.npmjs.org/react/-/react-15.4.0-rc.4.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-15.4.0-rc.4.tgz_1476482397453_0.7822290377225727" }, "directories": {} }, "15.4.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.4.0", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.4.0", "_shasum": "736c1c7c542e8088127106e1f450b010f86d172b", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.8", "_nodeVersion": "6.9.1", "_npmUser": { "name": "tomocchino", "email": "tomocchino@gmail.com" }, "dist": { "shasum": "736c1c7c542e8088127106e1f450b010f86d172b", "tarball": "http://registry.npmjs.org/react/-/react-15.4.0.tgz" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-15.4.0.tgz_1479306785093_0.7718154781032354" }, "directories": {} }, "15.4.1": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.4.1", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.4.1", "_shasum": "498e918602677a3983cd0fd206dfe700389a0dd6", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.8", "_nodeVersion": "6.9.0", "_npmUser": { "name": "spicyj", "email": "ben@benalpert.com" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "498e918602677a3983cd0fd206dfe700389a0dd6", "tarball": "http://registry.npmjs.org/react/-/react-15.4.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.4.1.tgz_1479866354701_0.6043999863322824" }, "directories": {} }, "15.4.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "15.4.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@15.4.2", "_shasum": "41f7991b26185392ba9bae96c8889e7e018397ef", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.8", "_nodeVersion": "6.3.1", "_npmUser": { "name": "gaearon", "email": "dan.abramov@gmail.com" }, "dist": { "shasum": "41f7991b26185392ba9bae96c8889e7e018397ef", "tarball": "http://registry.npmjs.org/react/-/react-15.4.2.tgz" }, "maintainers": [ { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "graue", "email": "scott@oceanbase.org" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-15.4.2.tgz_1483733783282_0.8693782053887844" }, "directories": {} }, "16.0.0-alpha": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "16.0.0-alpha", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@16.0.0-alpha", "_shasum": "bd24eb7e44a4989874dbb68e46dc918c48a3c6f1", "_resolved": "file:../../../react/build/packages/react.tgz", "_from": "../../../react/build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.8", "_nodeVersion": "6.9.1", "_npmUser": { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, "dist": { "shasum": "bd24eb7e44a4989874dbb68e46dc918c48a3c6f1", "tarball": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.tgz" }, "maintainers": [ { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-16.0.0-alpha.tgz_1484008272723_0.8987705395556986" } }, "16.0.0-alpha.0": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "16.0.0-alpha.0", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.4", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@16.0.0-alpha.0", "_shasum": "2b9dc3d508f10aa4398ee1e6c40903982b5891f2", "_resolved": "file:packages/react.tgz", "_from": "packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.8", "_nodeVersion": "6.9.1", "_npmUser": { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, "dist": { "shasum": "2b9dc3d508f10aa4398ee1e6c40903982b5891f2", "tarball": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.0.tgz" }, "maintainers": [ { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-16.0.0-alpha.0.tgz_1485374699989_0.848859439836815" } }, "16.0.0-alpha.2": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "16.0.0-alpha.2", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.9", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@16.0.0-alpha.2", "_shasum": "9c81ac487d2795e1fba1bcc3bdff702c6267b42f", "_resolved": "file:packages/react.tgz", "_from": "packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.3", "_nodeVersion": "6.3.1", "_npmUser": { "name": "gaearon", "email": "dan.abramov@gmail.com" }, "dist": { "shasum": "9c81ac487d2795e1fba1bcc3bdff702c6267b42f", "tarball": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.2.tgz" }, "maintainers": [ { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-16.0.0-alpha.2.tgz_1486657155722_0.9478306951932609" } }, "16.0.0-alpha.3": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "16.0.0-alpha.3", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.9", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@16.0.0-alpha.3", "_shasum": "addfd7ae9d801fd20c6244142354ae0cb7b1fe00", "_resolved": "file:build/packages/react.tgz", "_from": "build/packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.10", "_nodeVersion": "6.10.0", "_npmUser": { "name": "acdlite", "email": "acdlite@me.com" }, "dist": { "shasum": "addfd7ae9d801fd20c6244142354ae0cb7b1fe00", "tarball": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.3.tgz" }, "maintainers": [ { "name": "acdlite", "email": "acdlite@me.com" }, { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-16.0.0-alpha.3.tgz_1487894597634_0.4687214170116931" } }, "16.0.0-alpha.4": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "16.0.0-alpha.4", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.9", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@16.0.0-alpha.4", "_shasum": "1c25369aeee934df86466cf4f09144c7f6e3fac2", "_resolved": "file:packages/react.tgz", "_from": "packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.8", "_nodeVersion": "6.9.0", "_npmUser": { "name": "spicyj", "email": "ben@benalpert.com" }, "maintainers": [ { "name": "acdlite", "email": "acdlite@me.com" }, { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "dist": { "shasum": "1c25369aeee934df86466cf4f09144c7f6e3fac2", "tarball": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.4.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-16.0.0-alpha.4.tgz_1489420663373_0.7233397434465587" } }, "16.0.0-alpha.5": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "16.0.0-alpha.5", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.9", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@16.0.0-alpha.5", "_shasum": "ba5ca2058e7f39b010661497286e37133eb1c9fa", "_resolved": "file:packages/react.tgz", "_from": "packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.8", "_nodeVersion": "6.9.1", "_npmUser": { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, "dist": { "shasum": "ba5ca2058e7f39b010661497286e37133eb1c9fa", "tarball": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.5.tgz" }, "maintainers": [ { "name": "acdlite", "email": "acdlite@me.com" }, { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-16.0.0-alpha.5.tgz_1490126570027_0.2919567779172212" } }, "16.0.0-alpha.6": { "name": "react", "description": "React is a JavaScript library for building user interfaces.", "version": "16.0.0-alpha.6", "keywords": [ "react" ], "homepage": "https://facebook.github.io/react/", "bugs": { "url": "https://github.com/facebook/react/issues" }, "license": "BSD-3-Clause", "files": [ "LICENSE", "PATENTS", "addons.js", "react.js", "addons/", "dist/", "lib/" ], "main": "react.js", "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "engines": { "node": ">=0.10.0" }, "dependencies": { "fbjs": "^0.8.9", "loose-envify": "^1.1.0", "object-assign": "^4.1.0" }, "browserify": { "transform": [ "loose-envify" ] }, "_id": "react@16.0.0-alpha.6", "_shasum": "2ccb1afb4425ccc12f78a123a666f2e4c141adb9", "_resolved": "file:packages/react.tgz", "_from": "packages/react.tgz", "scripts": {}, "_npmVersion": "3.10.8", "_nodeVersion": "6.9.1", "_npmUser": { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, "dist": { "shasum": "2ccb1afb4425ccc12f78a123a666f2e4c141adb9", "tarball": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.6.tgz" }, "maintainers": [ { "name": "acdlite", "email": "acdlite@me.com" }, { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "trueadm", "email": "dg@domgan.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-16.0.0-alpha.6.tgz_1490395643637_0.6775550364982337" } } }, "maintainers": [ { "name": "acdlite", "email": "acdlite@me.com" }, { "name": "brianvaughn", "email": "briandavidvaughn@gmail.com" }, { "name": "fb", "email": "opensource+npm@fb.com" }, { "name": "gaearon", "email": "dan.abramov@gmail.com" }, { "name": "jeffmo", "email": "lbljeffmo@gmail.com" }, { "name": "sebmarkbage", "email": "sebastian@calyptus.eu" }, { "name": "spicyj", "email": "ben@benalpert.com" }, { "name": "tomocchino", "email": "tomocchino@gmail.com" }, { "name": "trueadm", "email": "dg@domgan.com" }, { "name": "zpao", "email": "paul@oshannessy.com" } ], "time": { "modified": "2017-03-29T05:24:22.100Z", "created": "2011-10-26T17:46:21.942Z", "0.0.1": "2011-10-26T17:46:22.746Z", "0.0.2": "2011-10-28T22:40:36.115Z", "0.0.3": "2011-10-29T13:40:41.073Z", "0.1.2": "2011-12-21T20:56:27.003Z", "0.2.0": "2012-01-10T18:58:59.882Z", "0.2.1": "2012-01-10T19:36:17.074Z", "0.2.2": "2012-01-10T20:44:37.670Z", "0.2.3": "2012-01-10T23:15:07.894Z", "0.2.4": "2012-01-11T15:44:12.287Z", "0.2.5": "2012-01-11T19:55:24.505Z", "0.2.6": "2012-01-11T20:58:23.590Z", "0.3.0": "2012-01-14T06:06:46.726Z", "0.3.4": "2012-01-17T14:59:12.449Z", "0.3.5": "2012-01-17T20:13:08.100Z", "0.5.0": "2012-01-18T06:49:43.631Z", "0.5.1": "2012-01-18T18:07:11.608Z", "0.5.2": "2012-03-13T14:01:11.641Z", "0.6.0": "2012-03-28T22:14:37.758Z", "0.6.1": "2012-04-25T16:57:02.959Z", "0.6.2": "2012-09-12T21:14:33.270Z", "0.6.3": "2012-10-18T04:24:03.381Z", "0.7.0": "2013-05-23T18:23:29.579Z", "0.7.1": "2013-05-23T19:48:26.316Z", "0.8.0": "2013-12-19T18:46:02.355Z", "0.9.0-rc1": "2014-02-17T03:31:05.147Z", "0.9.0": "2014-02-20T18:47:54.841Z", "0.10.0-rc1": "2014-03-19T18:28:04.636Z", "0.10.0": "2014-03-21T21:48:06.915Z", "0.11.0-rc1": "2014-07-13T04:41:23.857Z", "0.11.0": "2014-07-17T20:51:00.913Z", "0.11.1": "2014-07-25T18:36:36.918Z", "0.11.2": "2014-09-16T18:33:57.956Z", "0.12.0-rc1": "2014-10-16T22:24:04.601Z", "0.12.0": "2014-10-28T18:40:33.643Z", "0.12.1": "2014-11-18T06:56:11.863Z", "0.12.2": "2014-12-18T20:51:41.024Z", "0.13.0-alpha.1": "2014-12-23T20:08:42.636Z", "0.13.0-alpha.2": "2015-01-16T19:09:02.924Z", "0.13.0-beta.1": "2015-01-28T05:19:01.230Z", "0.13.0-beta.2": "2015-02-14T02:37:43.316Z", "0.13.0-rc1": "2015-02-22T21:36:01.461Z", "0.13.0-rc2": "2015-03-03T19:52:41.430Z", "0.13.0": "2015-03-10T21:51:43.816Z", "0.13.1": "2015-03-17T00:01:25.829Z", "0.13.2": "2015-04-18T22:38:01.925Z", "0.13.3": "2015-05-08T23:40:52.344Z", "0.14.0-alpha1": "2015-05-11T05:37:34.808Z", "0.14.0-alpha2": "2015-05-20T20:38:30.743Z", "0.14.0-alpha3": "2015-05-27T23:49:08.232Z", "0.14.0-beta1": "2015-07-03T08:50:06.815Z", "0.14.0-beta2": "2015-07-31T05:31:14.850Z", "0.14.0-beta3": "2015-08-03T21:33:47.972Z", "0.14.0-rc1": "2015-09-10T16:00:44.142Z", "0.14.0": "2015-10-07T17:27:39.042Z", "0.14.1": "2015-10-28T21:36:14.876Z", "0.14.2": "2015-11-02T19:55:21.088Z", "0.14.3": "2015-11-19T02:26:57.036Z", "0.14.4": "2015-12-29T22:00:21.565Z", "0.14.5": "2015-12-29T22:39:56.148Z", "0.14.6": "2016-01-06T23:52:45.571Z", "0.15.0-alpha.1": "2016-01-21T04:16:30.061Z", "0.14.7": "2016-01-28T19:59:29.509Z", "15.0.0-rc.1": "2016-03-08T01:07:27.078Z", "15.0.0-rc.2": "2016-03-16T22:19:35.759Z", "0.14.8": "2016-03-29T16:19:44.344Z", "15.0.0": "2016-04-07T21:25:42.928Z", "15.0.1": "2016-04-08T18:24:01.947Z", "15.0.2-alpha.1": "2016-04-20T18:17:51.152Z", "15.0.2-alpha.2": "2016-04-21T22:22:07.642Z", "15.0.2-alpha.3": "2016-04-25T20:04:05.908Z", "15.0.2-alpha.4": "2016-04-28T07:12:12.709Z", "15.0.2": "2016-04-30T00:38:26.753Z", "15.0.3-alpha.1": "2016-05-03T19:40:31.408Z", "15.0.3-alpha.2": "2016-05-10T04:38:08.171Z", "15.1.0-alpha.1": "2016-05-10T05:28:41.025Z", "15.1.0": "2016-05-20T23:06:26.234Z", "15.2.0-rc.1": "2016-06-15T01:30:22.163Z", "15.2.0-rc.2": "2016-07-01T06:32:12.488Z", "15.2.0": "2016-07-01T18:52:24.535Z", "15.2.1": "2016-07-08T22:31:10.383Z", "15.3.0-rc.1": "2016-07-13T18:58:33.786Z", "15.3.0-rc.2": "2016-07-13T21:02:13.320Z", "15.3.0-rc.3": "2016-07-21T22:59:16.416Z", "15.3.0": "2016-07-29T18:38:21.959Z", "15.3.1-rc.1": "2016-08-12T23:35:31.733Z", "15.3.1-rc.2": "2016-08-15T22:56:32.596Z", "15.3.1": "2016-08-19T18:50:25.665Z", "15.3.2-rc.1": "2016-09-15T23:43:44.694Z", "15.3.2": "2016-09-19T17:47:04.705Z", "15.4.0-rc.1": "2016-10-04T22:35:42.618Z", "15.4.0-rc.2": "2016-10-05T22:51:07.111Z", "15.4.0-rc.3": "2016-10-14T19:17:37.819Z", "15.4.0-rc.4": "2016-10-14T22:00:00.474Z", "15.4.0": "2016-11-16T14:33:05.693Z", "15.4.1": "2016-11-23T01:59:14.936Z", "15.4.2": "2017-01-06T20:16:25.738Z", "16.0.0-alpha": "2017-01-10T00:31:14.798Z", "16.0.0-alpha.0": "2017-01-25T20:05:02.202Z", "16.0.0-alpha.2": "2017-02-09T16:19:16.372Z", "16.0.0-alpha.3": "2017-02-24T00:03:19.901Z", "16.0.0-alpha.4": "2017-03-13T15:57:45.616Z", "16.0.0-alpha.5": "2017-03-21T20:02:52.084Z", "16.0.0-alpha.6": "2017-03-24T22:47:23.922Z" }, "repository": { "type": "git", "url": "git+https://github.com/facebook/react.git" }, "readme": "# react\n\nAn npm package to get you immediate access to [React](https://facebook.github.io/react/),\nwithout also requiring the JSX transformer. This is especially useful for cases where you\nwant to [`browserify`](https://github.com/substack/node-browserify) your module using\n`React`.\n\n**Note:** by default, React will be in development mode. The development version includes extra warnings about common mistakes, whereas the production version includes extra performance optimizations and strips all error messages.\n\nTo use React in production mode, set the environment variable `NODE_ENV` to `production`. A minifier that performs dead-code elimination such as [UglifyJS](https://github.com/mishoo/UglifyJS2) is recommended to completely remove the extra code present in development mode.\n\n## Example Usage\n\n```js\nvar React = require('react');\n\n// Addons are in separate packages:\nvar createFragment = require('react-addons-create-fragment');\nvar immutabilityHelpers = require('react-addons-update');\nvar CSSTransitionGroup = require('react-addons-css-transition-group');\n```\n\nFor a complete list of addons visit the [addons documentation page](https://facebook.github.io/react/docs/addons.html).\n", "readmeFilename": "README.md", "homepage": "https://facebook.github.io/react/", "keywords": [ "react" ], "bugs": { "url": "https://github.com/facebook/react/issues" }, "users": { "dubban": true, "3boll": true, "bausmeier": true, "axelav": true, "joakin": true, "ruffle1986": true, "abalandin": true, "koorchik": true, "nikunjchapadia": true, "z5h": true, "dozoisch": true, "treycordova": true, "xanderiel": true, "sroccaserra": true, "david.herse": true, "andrezsanchez": true, "ich": true, "laiff": true, "erikvold": true, "spicyj": true, "jkkramer": true, "mhaidarh": true, "womjoy": true, "azaviruha": true, "insin": true, "dimitriwalters": true, "chrisayn": true, "justinanastos": true, "devonbl": true, "kewah": true, "robbschiller": true, "rifat": true, "codematix": true, "agtlucas": true, "stuligan": true, "jackson7am": true, "jehoshua02": true, "shanewholloway": true, "haeck": true, "leebyron": true, "mehditup": true, "ahmedelgabri": true, "mathieuancelin": true, "pughpugh": true, "sobering": true, "wambulance": true, "pburtchaell": true, "kulakowka": true, "pensierinmusica": true, "goodacre.liam": true, "dbrockman": true, "onestone": true, "jarib": true, "tchcxp": true, "arnold-almeida": true, "gentlecat": true, "yodairish": true, "jamesulph": true, "markthethomas": true, "byoigres": true, "koulmomo": true, "geilt": true, "borjes": true, "neaton": true, "simplyianm": true, "enet4": true, "aleclarson": true, "leonardorb": true, "tjwebb": true, "mchampi": true, "orlenka": true, "oheard": true, "zchee": true, "hmazter": true, "kogai": true, "dac2205": true, "moimikey": true, "charlespeters": true, "sua": true, "goblindegook": true, "hpherzog": true, "chriscalo": true, "tomdanvers": true, "gabrielsanterre": true, "season19840122": true, "program247365": true, "modao": true, "danieljjh": true, "damianof": true, "chrisjordanme": true, "prabhash1785": true, "theveil": true, "qqqppp9998": true, "kai_": true, "kriswallsmith": true, "jabbrwcky": true, "rocalayo": true, "mfunkie": true, "drabinowitz": true, "nak2k": true, "keeyanajones": true, "bplabombarda": true, "tinyhill": true, "alexcoady": true, "sergiodxa": true, "huangdawei": true, "chicagoan": true, "yxqme": true, "tcskrovseth": true, "octoo": true, "nicastelo": true, "attomos": true, "buzuli": true, "clholzin": true, "h.kamitomo": true, "hyzhak": true, "gilbarbara": true, "freshlogic": true, "itonyyo": true, "qiming": true, "aahz": true, "icestone": true, "ugarz": true, "cypark": true, "manny": true, "courington": true, "enriquecaballero": true, "sjnnr": true, "pjb3": true, "bernardhamann": true, "isik": true, "fleeting": true, "sume0805": true, "narven": true, "tuiteraz": true, "arkanciscan": true, "wkaifang": true, "famousgarkin": true, "asa": true, "jovenbarola": true, "monjer": true, "nice_body": true, "yhui02": true, "lova": true, "arulkumar": true, "devdebonair": true, "tandysean": true, "tarex": true, "knoja4": true, "cpojer": true, "antouank": true, "sammyteahan": true, "dongguangming": true, "draganhr": true, "xgqfrms": true, "iolo": true, "nickeltobias": true, "yangxiaoqiang": true, "kuakman": true, "wzbg": true, "jimmyking": true, "szlegradi": true, "allthingssmitty": true, "leyyinad": true, "onheiron": true, "edloidas": true, "ddgromit": true, "igreulich": true, "vincetardy": true, "stefanof": true, "prisme": true, "vbv": true, "jordansrowles": true, "nalindak": true, "luckyulin": true, "unitetheclans": true, "hosomichi": true, "davidchubbs": true, "almccann": true, "martin.toma": true, "shelling": true, "urbantumbleweed": true, "heinzmuller": true, "junjiansyu": true, "corintho": true, "stany": true, "js3692": true, "keberox": true, "lavir": true, "ambdxtrch": true, "vwal": true, "leahcimic": true, "zhiquan.yu": true, "epickris": true, "moxiaohe": true, "oka-hide": true, "geese98": true, "moogus": true, "zhoutk": true, "amobiz": true, "rpnna": true, "evan2x": true, "kevinsuttle": true, "cfleschhut": true, "benstr": true, "jtsky": true, "tobiasnickel": true, "rhaynel": true, "rbartoli": true, "sternelee": true, "victorquinn": true, "daniele_cammarata": true, "barbarosh": true, "brandonccx": true, "kytart": true, "ferrari": true, "liugenbin": true, "acterce": true, "kevinoneill": true, "feedm3": true, "sergeymakoveev": true, "tomazzaman": true, "graubnla": true, "artursgirons": true, "fistynuts": true, "lourenzo": true, "hugojosefson": true, "lcdss": true, "zoey1990": true, "kratyk": true, "alexlukin": true, "aoki": true, "chris-me": true, "nexume": true, "apehead": true, "minfrank": true, "ricardoj": true, "joannerpena": true, "orkisz": true, "highlanderkev": true, "richie_south": true, "panlw": true, "boterom89": true, "philiiiiiipp": true, "feyzee": true, "dubielzyk": true, "lex_nel": true, "vasz": true, "subhojit777": true, "brunolemos": true, "ajaegle": true, "dmitry-lobanov": true, "huibean": true, "apita-cc": true, "tribou": true, "sakura": true, "th3brink": true, "katy": true, "krishaamer": true, "bhsiung": true, "ferchoriverar": true, "wouter_vdb": true, "zhouanbo": true, "dbobrov": true, "jeffboyus": true, "giioaj": true, "hypersprite": true, "princetoad": true, "reekdeb": true, "strokirk": true, "riteshg": true, "rokeyzki": true, "mrmartineau": true, "amattbryan": true, "wangfei": true, "shuoshubao": true, "asm2hex": true, "walkercz": true, "dskecse": true, "bcoe": true, "walkah": true, "dmitryscaletta": true, "freddieridell": true, "justinjung04": true, "mhetrerajat": true, "javascriptismagic": true, "guypeer": true, "gindis": true, "kaapex": true, "booleanhunter": true, "alexjsdev": true, "bogdanvlviv": true, "tyus512": true, "saravntbe": true, "xile611": true, "kimmohintikka": true, "bpatel": true, "chuck0523": true, "tigefa": true, "emarcs": true, "marcobiedermann": true, "goatandsheep": true, "septs": true, "fsgdez": true, "hyteer": true, "digitalblake": true, "mluberry": true, "ibartholomew": true, "leocreatini": true, "scotchulous": true, "bshackelford": true, "kenjisan4u": true, "evegreen": true, "razr9": true, "onufrienko": true, "john-goldsmith": true, "robertgonzales": true, "akarem": true, "apopek": true, "wirehive": true, "arulsakthiprakasam": true, "akarpov": true, "bsesic": true, "sozonov": true, "vpal": true, "ironmaniiith": true, "pgabronis": true, "tonyseek": true, "wanngxiao": true, "kwhitley": true, "enzoferey": true, "maninacan": true, "sasquatch": true, "reneweb": true, "natforyou": true, "fchienvuhoang": true, "darklake": true, "v3rron": true, "hydra": true, "pris54": true, "lencioni": true, "cssachse": true, "avanthikameenakshi": true, "yanrivera": true, "morewry": true, "easimonenko": true, "degouville": true, "tmurngon": true, "danielbayley": true, "pkhotpanya": true, "wayhome": true, "rwaness": true, "djorg83": true, "kudakv": true, "mrmaxmeranda": true, "coot": true, "theramey": true, "lucaskatayama": true, "amdsouza92": true, "morogasper": true, "prbsas": true, "lavysh": true, "mindrudan": true, "vespaccio": true, "fenrir": true, "serkonyc": true, "muroc": true, "fahadjadoon": true, "igorsetsfire": true, "dzhou777": true, "womcauliff": true, "romelperez": true, "kontrax": true, "rhomnickcoloma": true, "ramavarsh": true, "jetbug123": true, "jankanty": true, "oleblaesing": true, "federico-garcia": true, "timjk": true, "dice-k": true, "davequick": true, "adamdreszer": true, "bapinney": true, "mlv521": true, "rylan_yan": true, "hhnj": true, "austinbillings": true, "wearevilla": true, "rogeriera": true, "norlando": true, "mkstix6": true, "blizz": true, "asmattic": true, "panos277": true, "azuma": true, "vmleon": true, "atulmy": true, "guzgarcia": true, "coolhanddev": true, "shooteram": true, "outofcoffee": true, "maxieduncan": true, "tcrowe": true, "tonstwo": true, "xaxim": true, "mimshwright": true, "jasonleewilson": true, "npmlincq": true, "soulchainer": true, "sigmat": true, "tehdb": true, "doc.gunthrop": true, "filipdanic": true, "evdokimovm": true, "goldencrow": true, "cmtegner": true, "estuck306": true, "eimaj": true, "kevinagin": true, "ptrevethan": true, "sgnh": true, "jaxx2104": true, "isa424": true, "a-dabrowski": true, "pimkle": true, "suemcnab": true, "fpigeon": true, "sbekrin": true, "jacobmischka": true, "mr-bat": true, "mattattaque": true, "uncledick": true, "gberto": true, "aquiandres": true, "n3gu": true, "kconner": true, "s.well": true, "escapeimagery": true, "ramsaybell": true, "serge-nikitin": true, "sprybear": true, "chinawolf_wyp": true, "ktrysmt": true, "nate-river": true, "vinnyfonseca": true, "chirag8642": true, "abpeinado": true, "qafir": true, "junos": true, "chrisakakay": true, "oandrelopes": true, "kaufmo": true, "smshin7": true, "jal": true, "jirqoadai": true, "josokinas": true, "simplex": true, "goggleclub": true, "speedazerty": true }, "license": "BSD-3-Clause" } ================================================ FILE: test/fixtures/analyze/collect/modules/react/expected-source.json ================================================ { "files": { "readmeSize": 1198, "testsSize": 1491255, "hasChangelog": true }, "badges": [ { "urls": { "original": "https://img.shields.io/travis/facebook/react/master.svg?style=flat", "service": "https://api.travis-ci.org/facebook/react.svg?branch=master", "shields": "https://img.shields.io/travis/facebook/react/master.svg", "content": "https://img.shields.io/travis/facebook/react/master.json" }, "info": { "service": "travis", "type": "build", "modifiers": { "branch": "master" } } }, { "urls": { "original": "https://img.shields.io/coveralls/facebook/react/master.svg?style=flat", "service": "https://coveralls.io/repos/facebook/react/badge.svg?branch=master", "shields": "https://img.shields.io/coveralls/facebook/react/master.svg", "content": "https://img.shields.io/coveralls/facebook/react/master.json" }, "info": { "service": "coveralls", "type": "coverage", "modifiers": { "branch": "master" } } }, { "urls": { "original": "https://img.shields.io/npm/v/react.svg?style=flat", "shields": "https://img.shields.io/npm/v/react.svg", "content": "https://img.shields.io/npm/v/react.json" }, "info": { "service": "npm", "type": "version", "modifiers": { "type": "v" } } } ], "linters": [ "editorconfig", "eslint" ], "coverage": 0.82 } ================================================ FILE: test/fixtures/analyze/collect/modules/react-router/data.json ================================================ { "_id": "react-router", "_rev": "71-41439c737028709c0e5084dcfac9d06c", "name": "react-router", "description": "Declarative routing for React", "dist-tags": { "latest": "4.0.0", "next": "4.0.0-beta.8", "previous": "3.0.3" }, "versions": { "0.0.0": { "name": "react-router", "version": "0.0.0", "description": "An integrated router mixin for react components", "main": "index.js", "directories": { "test": "test" }, "dependencies": { "backbone": "~1.1.0", "expect.js": "~0.2.0" }, "devDependencies": {}, "scripts": { "test": "make test" }, "repository": { "type": "git", "url": "git://github.com/jaredly/reactor.git" }, "keywords": [ "reactjs", "router" ], "author": { "name": "Jared Forsyth", "email": "jared@jaredforsyth.com" }, "license": "Apache v2", "bugs": { "url": "https://github.com/jaredly/reactor/issues" }, "homepage": "https://github.com/jaredly/reactor", "_id": "react-router@0.0.0", "dist": { "shasum": "fda55d2e72d4a684ff9719a5f3b1c1603012c9ee", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.0.0.tgz" }, "_from": ".", "_npmVersion": "1.3.14", "_npmUser": { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" } ] }, "0.0.1": { "name": "react-router", "version": "0.0.1", "description": "An integrated router mixin for react components", "main": "index.js", "directories": { "test": "test" }, "dependencies": { "backbone": "~1.1.0", "expect.js": "~0.2.0", "lodash": "~2.4.1" }, "devDependencies": { "mocha": "~1.17.1", "envify": "~0.2.0", "react": "~0.8.0" }, "scripts": { "test": "make test" }, "repository": { "type": "git", "url": "git://github.com/jaredly/react-router.git" }, "keywords": [ "reactjs", "router" ], "author": { "name": "Jared Forsyth", "email": "jared@jaredforsyth.com" }, "license": "Apache v2", "bugs": { "url": "https://github.com/jaredly/react-router/issues" }, "homepage": "https://github.com/jaredly/react-router", "_id": "react-router@0.0.1", "_shasum": "f0568e2c324cc0fe11ae502a0ef4a0c02b9c49cb", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" } ], "dist": { "shasum": "f0568e2c324cc0fe11ae502a0ef4a0c02b9c49cb", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.0.1.tgz" } }, "0.4.0": { "name": "react-router", "version": "0.4.0", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "modules/main", "repository": { "type": "git", "url": "https://github.com/rpflorence/react-router.git" }, "homepage": "https://github.com/rpflorence/react-router", "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "^4.2.3", "browserify-shim": "^3.6.0", "bundle-loader": "^0.5.0", "envify": "~1.2.0", "expect": "^0.1.1", "jsx-loader": "^0.10.2", "karma": "^0.12.16", "karma-chrome-launcher": "^0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.3", "karma-webpack": "^1.2.1", "mocha": "^1.20.1", "react": ">=0.11.0", "rf-release": "^0.1.2", "uglify-js": "^2.4.15", "webpack": "^1.2.0-beta5", "webpack-dev-server": "^1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "es6-promise": "^1.0.0", "event-emitter": "^0.3.1", "querystring": "^0.2.0" }, "browserify-shim": { "react": "global:React" }, "bugs": { "url": "https://github.com/rpflorence/react-router/issues" }, "_id": "react-router@0.4.0", "dist": { "shasum": "ba49f4b4803858c86dde7b4f20faf467b9b91d25", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.4.0.tgz" }, "_from": ".", "_npmVersion": "1.4.4", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ] }, "0.4.1": { "name": "react-router", "version": "0.4.1", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "modules/main", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "^4.2.3", "browserify-shim": "^3.6.0", "bundle-loader": "^0.5.0", "envify": "~1.2.0", "expect": "^0.1.1", "jsx-loader": "^0.10.2", "karma": "^0.12.16", "karma-chrome-launcher": "^0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.3", "karma-webpack": "^1.2.1", "mocha": "^1.20.1", "react": ">=0.11.0", "rf-release": "^0.1.2", "uglify-js": "^2.4.15", "webpack": "^1.2.0-beta5", "webpack-dev-server": "^1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "es6-promise": "^1.0.0", "event-emitter": "^0.3.1", "querystring": "^0.2.0" }, "browserify-shim": { "react": "global:React" }, "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "_id": "react-router@0.4.1", "dist": { "shasum": "f06da5fe514a82b9c31cee5c0243112f7da60520", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.4.1.tgz" }, "_from": ".", "_npmVersion": "1.4.4", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ] }, "0.4.2": { "name": "react-router", "version": "0.4.2", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "modules/main", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "^4.2.3", "browserify-shim": "^3.6.0", "bundle-loader": "^0.5.0", "envify": "~1.2.0", "expect": "^0.1.1", "jsx-loader": "^0.10.2", "karma": "^0.12.16", "karma-chrome-launcher": "^0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.3", "karma-webpack": "^1.2.1", "mocha": "^1.20.1", "react": ">=0.11.0", "rf-release": "^0.1.2", "uglify-js": "^2.4.15", "webpack": "^1.2.0-beta5", "webpack-dev-server": "^1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "es6-promise": "^1.0.0", "event-emitter": "^0.3.1", "querystring": "^0.2.0" }, "browserify-shim": { "react": "global:React" }, "gitHead": "8438edf15a59636616c54d935c5d8c58e68238b5", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "_id": "react-router@0.4.2", "_shasum": "1c4c530cb857c9ef459766e660415761c29ead8c", "_from": ".", "_npmVersion": "1.4.20", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "1c4c530cb857c9ef459766e660415761c29ead8c", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.4.2.tgz" } }, "0.5.0": { "name": "react-router", "version": "0.5.0", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "modules/main", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "^4.2.3", "browserify-shim": "^3.6.0", "bundle-loader": "^0.5.0", "envify": "~1.2.0", "expect": "^0.1.1", "jsx-loader": "^0.10.2", "karma": "^0.12.16", "karma-chrome-launcher": "^0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.3", "karma-webpack": "^1.2.1", "mocha": "^1.20.1", "react": ">=0.11.0", "rf-release": "^0.1.2", "uglify-js": "^2.4.15", "webpack": "^1.2.0-beta5", "webpack-dev-server": "^1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "es6-promise": "^1.0.0", "event-emitter": "^0.3.1", "querystring": "^0.2.0" }, "browserify-shim": { "react": "global:React" }, "gitHead": "4a94519566d7b44f5ccdfae3256bc015f97596fc", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "_id": "react-router@0.5.0", "_shasum": "319cd086ec1599896e101206190590f183558aad", "_from": ".", "_npmVersion": "1.4.20", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "319cd086ec1599896e101206190590f183558aad", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.5.0.tgz" } }, "0.5.1": { "name": "react-router", "version": "0.5.1", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "modules/main", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.0", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.10.2", "karma": "0.12.16", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "karma-webpack": "1.2.1", "mocha": "1.20.1", "react": ">=0.11.0", "rf-release": "0.1.2", "uglify-js": "2.4.15", "webpack": "1.2.0-beta5", "webpack-dev-server": "1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "es6-promise": "^1.0.0", "event-emitter": "^0.3.1", "querystring": "^0.2.0" }, "browserify-shim": { "react": "global:React" }, "gitHead": "a265b49ce52dc93c2bf59844fffdae834f6317d1", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "_id": "react-router@0.5.1", "_shasum": "c0273b83b3707a62b52204d3ceb0f0d79141b2e6", "_from": ".", "_npmVersion": "1.4.20", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "c0273b83b3707a62b52204d3ceb0f0d79141b2e6", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.5.1.tgz" } }, "0.5.2": { "name": "react-router", "version": "0.5.2", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "./index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.0", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.10.2", "karma": "0.12.16", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "karma-webpack": "1.2.1", "mocha": "1.20.1", "react": ">=0.11.0", "rf-release": "0.1.2", "uglify-js": "2.4.15", "webpack": "1.2.0-beta5", "webpack-dev-server": "1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "es6-promise": "^1.0.0", "event-emitter": "^0.3.1", "querystring": "^0.2.0" }, "browserify-shim": { "react": "global:React" }, "gitHead": "cec541f3c9ed8dd521b7ab712a48adb148a64e59", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "_id": "react-router@0.5.2", "_shasum": "2a27426feda11c5925a201b30ab3b527410c0383", "_from": ".", "_npmVersion": "1.4.20", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "2a27426feda11c5925a201b30ab3b527410c0383", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.5.2.tgz" } }, "0.5.3": { "name": "react-router", "version": "0.5.3", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "./index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.0", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.10.2", "karma": "0.12.16", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "karma-webpack": "1.2.1", "mocha": "1.20.1", "react": ">=0.11.0", "rf-release": "0.3.1", "uglify-js": "2.4.15", "webpack": "1.2.0-beta5", "webpack-dev-server": "1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "es6-promise": "^1.0.0", "events": "^1.0.1", "querystring": "^0.2.0" }, "browserify-shim": { "react": "global:React" }, "gitHead": "5ff29852df0730adc5c3c361ad5da6240c307e14", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "_id": "react-router@0.5.3", "_shasum": "99894d3a204c9446dfabe18aa0c37411c30ac1c4", "_from": ".", "_npmVersion": "1.4.20", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "99894d3a204c9446dfabe18aa0c37411c30ac1c4", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.5.3.tgz" } }, "0.6.0": { "name": "react-router", "version": "0.6.0", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "./index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.0", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.10.2", "karma": "0.12.16", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "karma-webpack": "1.2.1", "mocha": "1.20.1", "react": ">=0.11.0", "rf-release": "0.3.1", "uglify-js": "2.4.15", "webpack": "1.2.0-beta5", "webpack-dev-server": "1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "es6-promise": "1.0.0", "events": "1.0.1", "flux": "2.0.0", "qs": "1.2.2" }, "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "ac912ee615f71eb153da53c41891500a787557ca", "_id": "react-router@0.6.0", "_shasum": "66d1917afc1b415715fc63d84e5a5457569b6566", "_from": ".", "_npmVersion": "1.4.20", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "66d1917afc1b415715fc63d84e5a5457569b6566", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.6.0.tgz" } }, "0.6.1": { "name": "react-router", "version": "0.6.1", "description": "A complete routing library for React.js", "tags": [ "react", "router" ], "main": "./index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "script/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.0", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.10.2", "karma": "0.12.16", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "karma-webpack": "1.2.1", "mocha": "1.20.1", "react": ">=0.11.0", "rf-release": "0.3.1", "uglify-js": "2.4.15", "webpack": "1.2.0-beta5", "webpack-dev-server": "1.4.2" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "events": "1.0.1", "flux": "2.0.0", "qs": "1.2.2", "when": "^3.4.4" }, "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "45e63091f3760a5bfd04fea4a3d31057fb4cd7b0", "_id": "react-router@0.6.1", "_shasum": "985eca1fe3570b78dcb763778ca8c7d1265b30b5", "_from": ".", "_npmVersion": "1.4.20", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "985eca1fe3570b78dcb763778ca8c7d1265b30b5", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.6.1.tgz" } }, "0.7.0": { "name": "react-router", "version": "0.7.0", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "envify": "1.2.0", "expect": "0.1.1", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": ">=0.11.0", "reactify": "^0.14.0", "rf-release": "0.3.1", "uglify-js": "2.4.15" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "events": "1.0.1", "flux": "2.0.0", "qs": "2.2.2", "when": "^3.4.4" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "a000b732729f12b3445b4d917ec6474847ccd155", "_id": "react-router@0.7.0", "_shasum": "0588f99c5b99a6ce504379638008022eba278732", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "jabapyth", "email": "jared@jaredforsyth.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "0588f99c5b99a6ce504379638008022eba278732", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.7.0.tgz" } }, "0.8.0": { "name": "react-router", "version": "0.8.0", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "envify": "1.2.0", "expect": "0.1.1", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": ">=0.11.0", "reactify": "^0.14.0", "rf-release": "0.3.2", "uglify-js": "2.4.15" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "events": "1.0.1", "flux": "2.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "04b9aa73930dd45ac9dc204a2e889595337b4a8f", "_id": "react-router@0.8.0", "_shasum": "0e81844f97512b8eb9b548c243b59d3b88ce3b83", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "0e81844f97512b8eb9b548c243b59d3b88ce3b83", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.8.0.tgz" } }, "0.9.0": { "name": "react-router", "version": "0.9.0", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "envify": "1.2.0", "expect": "0.1.1", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": ">=0.11.0", "reactify": "^0.14.0", "rf-release": "0.3.2", "uglify-js": "2.4.15" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "events": "1.0.1", "flux": "2.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "bfda1e7fe8d88bd7dcc7f3e092c7ded8c3a4f5c4", "_id": "react-router@0.9.0", "_shasum": "e9fc6a357b1cc5f46a3c4681f4c49d51ad10a4d1", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "e9fc6a357b1cc5f46a3c4681f4c49d51ad10a4d1", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.9.0.tgz" } }, "0.9.1": { "name": "react-router", "version": "0.9.1", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "envify": "1.2.0", "expect": "0.1.1", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": ">=0.11.0", "reactify": "^0.14.0", "rf-release": "0.3.2", "uglify-js": "2.4.15" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "events": "1.0.1", "flux": "2.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "10ea36878f97a13486bbb3a3a1739fc5be7924c9", "_id": "react-router@0.9.1", "_shasum": "34a5a2edb95b9c19630608c4fc170ec4579bc696", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "34a5a2edb95b9c19630608c4fc170ec4579bc696", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.9.1.tgz" } }, "0.9.2": { "name": "react-router", "version": "0.9.2", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "envify": "1.2.0", "expect": "0.1.1", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": ">=0.11.0", "reactify": "^0.14.0", "rf-release": "0.3.2", "uglify-js": "2.4.15" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "events": "1.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "93e734145635ce2792ca797f147fa46279c92a06", "_id": "react-router@0.9.2", "_shasum": "a278006fa2c1ba74a1ec08b0e6523dcbd5087f77", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "a278006fa2c1ba74a1ec08b0e6523dcbd5087f77", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.9.2.tgz" } }, "0.9.3": { "name": "react-router", "version": "0.9.3", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "envify": "1.2.0", "expect": "0.1.1", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": ">=0.11.0", "reactify": "^0.14.0", "rf-release": "0.3.2", "uglify-js": "2.4.15" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "events": "1.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "18e5c205848e1d371898b918cf51bf10dcad9ea4", "_id": "react-router@0.9.3", "_shasum": "8cf6cc59e1196527fdaadb1dfad867616f8061c8", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "8cf6cc59e1196527fdaadb1dfad867616f8061c8", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.9.3.tgz" } }, "0.9.4": { "name": "react-router", "version": "0.9.4", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.11.2", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": ">=0.11.0", "reactify": "^0.14.0", "rf-release": "0.3.2", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": ">=0.11.0" }, "dependencies": { "events": "1.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "ca1563d3a0b0fd3f75f66a39afafcea0bdc15c9b", "_id": "react-router@0.9.4", "_shasum": "c9581abb35693546baef604bffbac1655063d924", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "c9581abb35693546baef604bffbac1655063d924", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.9.4.tgz" } }, "0.9.5": { "name": "react-router", "version": "0.9.5", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.11.2", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.11.x", "reactify": "^0.14.0", "rf-release": "0.3.2", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.11.x" }, "dependencies": { "events": "1.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "37eebf5f156ee24ba636a79e6e89c3e0012d6233", "_id": "react-router@0.9.5", "_shasum": "0a45570dccff72b670fcedc5b6f86be36f17fb09", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "0a45570dccff72b670fcedc5b6f86be36f17fb09", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.9.5.tgz" } }, "0.10.0": { "name": "react-router", "version": "0.10.0", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.11.2", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.3.2", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "events": "1.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "7ee1a22a5839c4f8a4e065c843d99e63fa77fd87", "_id": "react-router@0.10.0", "_shasum": "6a730ea0d0034c7398e94c0cb8e3e7277e1c1aea", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "6a730ea0d0034c7398e94c0cb8e3e7277e1c1aea", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.10.0.tgz" } }, "0.10.1": { "name": "react-router", "version": "0.10.1", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.11.2", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.3.2", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "events": "1.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "a3f488c0851f6b2517189dcaee63cb12907ec0d9", "_id": "react-router@0.10.1", "_shasum": "1a83a43aea53e25573c6fec22b9f7be095055b8c", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "1a83a43aea53e25573c6fec22b9f7be095055b8c", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.10.1.tgz" } }, "0.10.2": { "name": "react-router", "version": "0.10.2", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.11.2", "karma": "0.12.16", "karma-browserify": "^0.2.1", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.3.2", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "events": "1.0.1", "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "77cb5c282b3859ae85a32c5e16b00d6636083f05", "_id": "react-router@0.10.2", "_shasum": "cd20246a7466647916e08a68dbb30a4a265dfcb4", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "cd20246a7466647916e08a68dbb30a4a265dfcb4", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.10.2.tgz" } }, "0.11.0": { "name": "react-router", "version": "0.11.0", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.12.0", "karma": "0.12.16", "karma-browserify": "1.0.0", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.3.2", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "0e1dfefbc201cb7849a66e12590823b18ef1d3a3", "_id": "react-router@0.11.0", "_shasum": "e3550779feb8f96b0ddf3b9b2f780789b14bc230", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "e3550779feb8f96b0ddf3b9b2f780789b14bc230", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.11.0.tgz" } }, "0.11.1": { "name": "react-router", "version": "0.11.1", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "expect": "0.1.1", "jsx-loader": "0.12.0", "karma": "0.12.16", "karma-browserify": "1.0.0", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.3.2", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "f248a7bbc288a4009032d3426c8b143776f61bf2", "_id": "react-router@0.11.1", "_shasum": "3bd47918d078399618f308fc3df0fdba81e41eca", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "3bd47918d078399618f308fc3df0fdba81e41eca", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.11.1.tgz" } }, "0.11.2": { "name": "react-router", "version": "0.11.2", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "events": "1.0.2", "expect": "0.1.1", "jsx-loader": "0.12.0", "karma": "0.12.16", "karma-browserify": "1.0.0", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.4.0", "rx": "2.3.18", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "a38ab4b4ac1af13cebbf657ebcee48a2e9fed479", "_id": "react-router@0.11.2", "_shasum": "7365449b63b12719b87062443574f52631a9599a", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "7365449b63b12719b87062443574f52631a9599a", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.11.2.tgz" } }, "0.11.3": { "name": "react-router", "version": "0.11.3", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "events": "1.0.2", "expect": "0.1.1", "jsx-loader": "0.12.0", "karma": "0.12.16", "karma-browserify": "1.0.0", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.4.0", "rx": "2.3.18", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "2425453d69604305bc2dd069fdd7ab48d2880ef5", "_id": "react-router@0.11.3", "_shasum": "adcbd4f1bddeb7f19f90a98681954505d00439d1", "_from": ".", "_npmVersion": "2.0.2", "_nodeVersion": "0.10.27", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "adcbd4f1bddeb7f19f90a98681954505d00439d1", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.11.3.tgz" } }, "0.11.4": { "name": "react-router", "version": "0.11.4", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "events": "1.0.2", "expect": "0.1.1", "jsx-loader": "0.12.0", "karma": "0.12.16", "karma-browserify": "1.0.0", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.4.0", "rx": "2.3.18", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "87166eb5885fa08d1d46237671d6309579db5993", "_id": "react-router@0.11.4", "_shasum": "66425491946bdc78871467cb401bcde0a7da7fb9", "_from": ".", "_npmVersion": "2.0.0-beta.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "66425491946bdc78871467cb401bcde0a7da7fb9", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.11.4.tgz" } }, "0.11.5": { "name": "react-router", "version": "0.11.5", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run", "lint": "jsxhint examples modules" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "events": "1.0.2", "expect": "0.1.1", "glob": "4.2.1", "jsx-loader": "0.12.0", "jsxhint": "^0.8.1", "karma": "0.12.16", "karma-browserify": "1.0.0", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.4.0", "rx": "2.3.18", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "gitHead": "0979d39fe35d31e41780aa271b2c50ee1de9f375", "_id": "react-router@0.11.5", "_shasum": "75987e15d28bd0c3ca19659dbbf558d6e4d53dfc", "_from": ".", "_npmVersion": "2.1.10", "_nodeVersion": "0.10.22", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "75987e15d28bd0c3ca19659dbbf558d6e4d53dfc", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.11.5.tgz" } }, "0.11.6": { "name": "react-router", "version": "0.11.6", "description": "A complete routing library for React.js", "main": "./modules/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "test": "scripts/test --browsers Firefox --single-run", "lint": "jsxhint examples modules" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "browserify": "4.2.3", "browserify-shim": "3.6.0", "bundle-loader": "0.5.1", "envify": "1.2.0", "events": "1.0.2", "expect": "0.1.1", "glob": "4.2.1", "jsx-loader": "0.12.0", "jsxhint": "^0.8.1", "karma": "0.12.16", "karma-browserify": "1.0.0", "karma-chrome-launcher": "0.1.4", "karma-cli": "0.0.4", "karma-firefox-launcher": "0.1.3", "karma-mocha": "0.1.3", "mocha": "1.20.1", "react": "0.12.x", "reactify": "0.15.x", "rf-release": "0.4.0", "rx": "2.3.18", "uglify-js": "2.4.15", "webpack": "1.4.5", "webpack-dev-server": "1.6.5" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.2.2", "when": "3.4.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "browserify-shim": { "react": "global:React" }, "_id": "react-router@0.11.6", "_shasum": "93efd73f9ddd61cc8ff1cd31936797542720b5c3", "_from": ".", "_npmVersion": "1.4.9", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "93efd73f9ddd61cc8ff1cd31936797542720b5c3", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.11.6.tgz" } }, "0.12.0": { "name": "react-router", "version": "0.12.0", "description": "A complete routing library for React.js", "main": "modules/index.js", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "directories": { "example": "examples" }, "scripts": { "build": "NODE_ENV=production webpack modules/index.js dist/react-router.js", "build-min": "NODE_ENV=production COMPRESS=1 webpack modules/index.js dist/react-router.min.js", "examples": "webpack-dev-server --config examples/webpack.config.js --no-info --content-base examples", "test": "jsxhint . && karma start --single-run" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "devDependencies": { "bundle-loader": "^0.5.2", "events": "1.0.2", "expect": "^1.1.0", "jsx-loader": "^0.12.2", "jsxhint": "^0.8.1", "karma": "^0.12.28", "karma-chrome-launcher": "^0.1.7", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.10", "karma-sourcemap-loader": "^0.3.2", "karma-webpack": "^1.3.1", "mocha": "^2.0.1", "react": "0.12.x", "rf-release": "0.4.0", "rx": "2.3.18", "webpack": "^1.4.13", "webpack-dev-server": "^1.6.6" }, "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.3.3" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "c050095c8ed8cb17b0337b70ebcca411e19a94d2", "_id": "react-router@0.12.0", "_shasum": "c981a56037546fc9a6a79428f5ab75c4eff353ab", "_from": ".", "_npmVersion": "2.1.10", "_nodeVersion": "0.10.22", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "c981a56037546fc9a6a79428f5ab75c4eff353ab", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.12.0.tgz" } }, "0.12.1": { "name": "react-router", "version": "0.12.1", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.3.3" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.12.1", "scripts": {}, "_shasum": "2cb14f2ed78a01c1e2b027d8cb592d2d9c4a0e4a", "_from": "build/npm", "_resolved": "file:build/npm", "_npmVersion": "2.6.0", "_nodeVersion": "0.10.28", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "2cb14f2ed78a01c1e2b027d8cb592d2d9c4a0e4a", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.12.1.tgz" }, "directories": {} }, "0.12.2": { "name": "react-router", "version": "0.12.2", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.3.3" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.12.2", "scripts": {}, "_shasum": "d02016030d0442975f748e5208e4949b7bc397e1", "_from": "build/npm", "_resolved": "file:build/npm", "_npmVersion": "2.6.0", "_nodeVersion": "0.10.28", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "d02016030d0442975f748e5208e4949b7bc397e1", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.12.2.tgz" }, "directories": {} }, "0.12.3": { "name": "react-router", "version": "0.12.3", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.3.3" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.12.3", "scripts": {}, "_shasum": "7eea6f2050fa9602b13e5a2a2bbc3c6d6529689f", "_from": "build/npm", "_resolved": "file:build/npm", "_npmVersion": "2.6.0", "_nodeVersion": "0.10.28", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "7eea6f2050fa9602b13e5a2a2bbc3c6d6529689f", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.12.3.tgz" }, "directories": {} }, "0.12.4": { "name": "react-router", "version": "0.12.4", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.12.x" }, "dependencies": { "qs": "2.3.3" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.12.4", "scripts": {}, "_shasum": "e60798b789729970eea3981799fac4e86bd2fb16", "_from": "build/npm", "_resolved": "file:build/npm", "_npmVersion": "2.6.0", "_nodeVersion": "0.10.28", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "e60798b789729970eea3981799fac4e86bd2fb16", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.12.4.tgz" }, "directories": {} }, "0.13.0": { "name": "react-router", "version": "0.13.0", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.13.x" }, "dependencies": { "qs": "2.4.1", "classnames": "1.1.x" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.13.0", "scripts": {}, "_shasum": "11423b5c43296f2d602195e4a63966e3c50c8827", "_from": "build/npm", "_resolved": "file:build/npm", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "11423b5c43296f2d602195e4a63966e3c50c8827", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.13.0.tgz" }, "directories": {} }, "0.13.1": { "name": "react-router", "version": "0.13.1", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.13.x" }, "dependencies": { "qs": "2.4.1", "classnames": "1.1.x" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.13.1", "scripts": {}, "_shasum": "2df6a007f21f6d4b7d6fac798c748f9cdb985d3d", "_from": "build/npm", "_resolved": "file:build/npm", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "2df6a007f21f6d4b7d6fac798c748f9cdb985d3d", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.13.1.tgz" }, "directories": {} }, "0.13.2": { "name": "react-router", "version": "0.13.2", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.13.x" }, "dependencies": { "qs": "2.4.1", "classnames": "1.1.x", "object-assign": "^2.0.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.13.2", "scripts": {}, "_shasum": "09343b14f799983ed210e2f466f28f7f1cf1b807", "_from": "build/npm", "_resolved": "file:build/npm", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "09343b14f799983ed210e2f466f28f7f1cf1b807", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.13.2.tgz" }, "directories": {} }, "0.13.3": { "name": "react-router", "version": "0.13.3", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.13.x" }, "dependencies": { "object-assign": "^2.0.0", "qs": "2.4.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.13.3", "scripts": {}, "_shasum": "95455dd19d2c04c7b2957ff7fccda76031ac29b1", "_from": "build", "_resolved": "file:build", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "95455dd19d2c04c7b2957ff7fccda76031ac29b1", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.13.3.tgz" }, "directories": {} }, "1.0.0-alpha1": { "name": "react-router", "version": "1.0.0-alpha1", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "scripts/build.sh", "watch": "babel ./modules --watch -d lib", "build-website": "scripts/build-website.sh", "examples": "webpack-dev-server --config examples/webpack.config.js --content-base examples --inline", "prepublish": "npm run build", "test": "jsxhint modules && karma start" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "keymirror": "^0.1.1", "qs": "2.4.1", "warning": "^1.0.1" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-loader": "^5.0.0", "babel-plugin-object-assign": "^1.1.0", "bundle-loader": "^0.5.2", "events": "1.0.2", "expect": "^1.6.0", "jsxhint": "^0.12.1", "karma": "^0.12.28", "karma-chrome-launcher": "^0.1.7", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.10", "karma-sourcemap-loader": "^0.3.2", "karma-webpack": "^1.3.1", "marked": "0.3.3", "mocha": "^2.0.1", "pygmentize-bundled": "^2.3.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "rx": "2.3.18", "slash": "^1.0.0", "webpack": "^1.4.13", "webpack-dev-server": "^1.6.6" }, "peerDependencies": { "react": "0.13.x" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "f6bf5f0a7c4d7fb493a00588b550fbb09c97990b", "_id": "react-router@1.0.0-alpha1", "_shasum": "a07abc14d7321f0a54e682f1343436737b92bf5b", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "a07abc14d7321f0a54e682f1343436737b92bf5b", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-alpha1.tgz" }, "directories": {} }, "1.0.0-alpha2": { "name": "react-router", "version": "1.0.0-alpha2", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "scripts/build.sh", "watch": "babel ./modules --watch -d lib", "build-website": "scripts/build-website.sh", "examples": "webpack-dev-server --config examples/webpack.config.js --content-base examples --inline", "prepublish": "npm run build", "test": "jsxhint modules && karma start" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "keymirror": "^0.1.1", "qs": "2.4.1", "warning": "^1.0.1" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-loader": "^5.0.0", "babel-plugin-object-assign": "^1.1.0", "bundle-loader": "^0.5.2", "events": "1.0.2", "expect": "^1.6.0", "jsxhint": "^0.12.1", "karma": "^0.12.28", "karma-chrome-launcher": "^0.1.7", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.10", "karma-sourcemap-loader": "^0.3.2", "karma-webpack": "^1.3.1", "marked": "0.3.3", "mocha": "^2.0.1", "pygmentize-bundled": "^2.3.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "rx": "2.3.18", "slash": "^1.0.0", "webpack": "^1.4.13", "webpack-dev-server": "^1.6.6" }, "peerDependencies": { "react": "0.13.x" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "75d75d010c51650eadbb0383ebad3d332b65cfd7", "_id": "react-router@1.0.0-alpha2", "_shasum": "a841f2e085028f9ca7e7d6ef7d09be602a4c00db", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "a841f2e085028f9ca7e7d6ef7d09be602a4c00db", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-alpha2.tgz" }, "directories": {} }, "1.0.0-beta1": { "name": "react-router", "version": "1.0.0-beta1", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "scripts/build.sh", "watch": "babel ./modules --watch -d lib", "build-website": "scripts/build-website.sh", "examples": "webpack-dev-server --config examples/webpack.config.js --content-base examples --inline", "prepublish": "npm run build", "test": "jsxhint modules && karma start" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "keymirror": "^0.1.1", "qs": "2.4.1", "warning": "^1.0.1" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-loader": "^5.0.0", "babel-plugin-object-assign": "^1.1.0", "bundle-loader": "^0.5.2", "events": "1.0.2", "expect": "^1.6.0", "jsxhint": "^0.12.1", "karma": "^0.12.28", "karma-chrome-launcher": "^0.1.7", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.10", "karma-sourcemap-loader": "^0.3.2", "karma-webpack": "^1.3.1", "marked": "0.3.3", "mocha": "^2.0.1", "pygmentize-bundled": "^2.3.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "rx": "2.3.18", "slash": "^1.0.0", "webpack": "^1.4.13", "webpack-dev-server": "^1.6.6" }, "peerDependencies": { "react": "0.13.x" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "b3ac05524a5da1d915c9a7a58bb585d453dba3a2", "_id": "react-router@1.0.0-beta1", "_shasum": "dba3834dd3e4ad15cc6a4bbaae63abaa208f3e7b", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "dba3834dd3e4ad15cc6a4bbaae63abaa208f3e7b", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-beta1.tgz" }, "directories": {} }, "1.0.0-beta2": { "name": "react-router", "version": "1.0.0-beta2", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "scripts/build.sh", "watch": "babel ./modules --watch -d lib", "build-website": "scripts/build-website.sh", "examples": "webpack-dev-server --config examples/webpack.config.js --content-base examples --inline", "prepublish": "npm run build", "test": "jsxhint modules && karma start" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "keymirror": "^0.1.1", "qs": "2.4.1", "warning": "^1.0.1" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-loader": "^5.0.0", "babel-plugin-object-assign": "^1.1.0", "bundle-loader": "^0.5.2", "events": "1.0.2", "expect": "^1.6.0", "jsxhint": "^0.12.1", "karma": "^0.12.28", "karma-chrome-launcher": "^0.1.7", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.10", "karma-sourcemap-loader": "^0.3.2", "karma-webpack": "^1.3.1", "marked": "0.3.3", "mocha": "^2.0.1", "pygmentize-bundled": "^2.3.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "rx": "2.3.18", "slash": "^1.0.0", "webpack": "^1.4.13", "webpack-dev-server": "^1.6.6" }, "peerDependencies": { "react": "0.13.x" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "5f17eb9a6e3424c1e0ba7f7bdec9efd31f7e6af1", "_id": "react-router@1.0.0-beta2", "_shasum": "5a1967ce6cffa90a7eb53a6512ef5679033370c6", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "5a1967ce6cffa90a7eb53a6512ef5679033370c6", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-beta2.tgz" }, "directories": {} }, "1.0.0-beta3": { "name": "react-router", "version": "1.0.0-beta3", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "scripts/build.sh", "watch": "babel ./modules --watch -d lib", "build-website": "scripts/build-website.sh", "examples": "webpack-dev-server --config examples/webpack.config.js --content-base examples --inline", "prepublish": "npm run build", "test": "jsxhint modules && karma start" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "keymirror": "^0.1.1", "qs": "2.4.1", "warning": "^1.0.1" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-loader": "^5.0.0", "babel-plugin-object-assign": "^1.2.0", "bundle-loader": "^0.5.2", "events": "1.0.2", "expect": "^1.6.0", "jsxhint": "^0.12.1", "karma": "^0.12.28", "karma-chrome-launcher": "^0.1.7", "karma-cli": "0.0.4", "karma-firefox-launcher": "^0.1.3", "karma-mocha": "^0.1.10", "karma-sourcemap-loader": "^0.3.2", "karma-webpack": "^1.3.1", "marked": "0.3.3", "mocha": "^2.0.1", "pygmentize-bundled": "^2.3.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "rx": "2.3.18", "slash": "^1.0.0", "webpack": "^1.4.13", "webpack-dev-server": "^1.6.6" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "e3eef101a9999ea645a0e815101570ffc6f4c882", "_id": "react-router@1.0.0-beta3", "_shasum": "f1d9dfb13125b077339b75cbbc367691f6613a3e", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "f1d9dfb13125b077339b75cbbc367691f6613a3e", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-beta3.tgz" }, "directories": {} }, "1.0.0-beta4": { "name": "react-router", "version": "1.0.0-beta4", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "babel ./modules -d lib --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js lib/umd/History.js", "build-min": "NODE_ENV=production webpack -p modules/index.js lib/umd/History.min.js", "build-website": "scripts/build-website.sh", "start": "webpack-dev-server --config examples/webpack.config.js --content-base examples --inline", "test": "eslint modules && karma start", "prepublish": "npm run build" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^1.8.0", "invariant": "^2.0.0", "warning": "^2.0.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^3.1.23", "babel-loader": "^5.0.0", "babel-plugin-object-assign": "^1.2.0", "bundle-loader": "^0.5.2", "eslint": "^1.0.0", "events": "1.0.2", "expect": "^1.6.0", "karma": "^0.13.8", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-firefox-launcher": "^0.1.6", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "marked": "0.3.3", "mocha": "^2.0.1", "pygmentize-bundled": "^2.3.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "rx": "2.3.18", "slash": "^1.0.0", "webpack": "^1.4.13", "webpack-dev-server": "^1.10.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "d1b1e247d22f42f1cf1d4e9a8a91fd21631db65a", "_id": "react-router@1.0.0-beta4", "_shasum": "85cef425b2a645407e81723d94be8997d3e34ced", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "85cef425b2a645407e81723d94be8997d3e34ced", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-beta4.tgz" }, "directories": {} }, "1.0.0-rc1": { "name": "react-router", "version": "1.0.0-rc1", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "babel ./modules -d lib --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "start": "webpack-dev-server --config examples/webpack.config.js --content-base examples --inline", "test": "eslint modules && karma start", "lint": "eslint modules", "prepublish": "npm run build" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^1.9.0", "invariant": "^2.0.0", "warning": "^2.0.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^3.1.23", "babel-loader": "^5.0.0", "babel-plugin-object-assign": "^1.2.0", "bundle-loader": "^0.5.2", "eslint": "1.4.0", "eslint-plugin-react": "3.3.2", "events": "1.0.2", "expect": "^1.6.0", "karma": "^0.13.8", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-firefox-launcher": "^0.1.6", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "marked": "0.3.3", "mocha": "^2.0.1", "pygmentize-bundled": "^2.3.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "rx": "2.3.18", "slash": "^1.0.0", "webpack": "^1.4.13", "webpack-dev-server": "^1.10.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "dcc7f6c94b56370c872a32cd7f80b2401601aa0f", "_id": "react-router@1.0.0-rc1", "_shasum": "0044af437eef08f86bde34dde2c767c254fb5493", "_from": ".", "_npmVersion": "2.7.5", "_nodeVersion": "0.10.28", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "0044af437eef08f86bde34dde2c767c254fb5493", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-rc1.tgz" }, "directories": {} }, "0.13.4": { "name": "react-router", "version": "0.13.4", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.13.x" }, "dependencies": { "object-assign": "^2.0.0", "qs": "2.4.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.13.4", "scripts": {}, "_shasum": "fafc8337fd56d6982b2d6b15cf6783b59f725520", "_from": "build", "_resolved": "file:build", "_npmVersion": "2.11.3", "_nodeVersion": "0.12.7", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "fafc8337fd56d6982b2d6b15cf6783b59f725520", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.13.4.tgz" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "directories": {} }, "1.0.0-rc2": { "name": "react-router", "version": "1.0.0-rc2", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "babel ./modules -d lib --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "start": "node examples/server.js", "test": "npm run lint && karma start", "lint": "eslint modules examples", "postinstall": "node -e \"require('fs').stat('lib', function (e, s) { process.exit(e || !s.isDirectory() ? 1 : 0) })\" || npm run build", "prepublish": "npm run build" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "1.12.1", "invariant": "^2.0.0", "warning": "^2.0.0" }, "devDependencies": { "assert": "1.3.0", "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^3.1.23", "babel-loader": "^5.0.0", "bundle-loader": "^0.5.2", "css-loader": "^0.19.0", "eslint": "1.4.0", "eslint-plugin-react": "3.3.2", "expect": "1.10.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "karma": "^0.13.8", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-firefox-launcher": "^0.1.6", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "qs": "^4.0.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "4db49e3adffa5e995f456229ea5e83d4f0d683bf", "_id": "react-router@1.0.0-rc2", "_shasum": "bfdcdc854ba4fa0ca25ce9bab7e1fb001098821a", "_from": ".", "_npmVersion": "2.11.3", "_nodeVersion": "0.12.7", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "bfdcdc854ba4fa0ca25ce9bab7e1fb001098821a", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-rc2.tgz" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "directories": {} }, "1.0.0-rc3": { "name": "react-router", "version": "1.0.0-rc3", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "babel ./modules -d lib --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && karma start", "postinstall": "node -e \"require('fs').stat('lib', function (e, s) { process.exit(e || !s.isDirectory() ? 1 : 0) })\" || npm run build" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "1.12.3", "invariant": "^2.0.0", "warning": "^2.0.0" }, "devDependencies": { "assert": "1.3.0", "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^3.1.23", "babel-loader": "^5.0.0", "bundle-loader": "^0.5.2", "css-loader": "^0.19.0", "eslint": "1.4.0", "eslint-plugin-react": "3.3.2", "expect": "1.10.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "karma": "^0.13.8", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-firefox-launcher": "^0.1.6", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "qs": "^4.0.0", "react": "0.13.x", "rf-changelog": "^0.4.0", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "b17d5c2aee84c21e4f84da6601608ba0d3b2c6a6", "_id": "react-router@1.0.0-rc3", "_shasum": "b511f1f1b873e6db0af2d8bd6cb10b6aca479002", "_from": ".", "_npmVersion": "2.11.3", "_nodeVersion": "0.12.7", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "b511f1f1b873e6db0af2d8bd6cb10b6aca479002", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-rc3.tgz" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "directories": {} }, "0.13.5": { "name": "react-router", "version": "0.13.5", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.13.x||0.14.x" }, "dependencies": { "can-use-dom": "0.1.0", "invariant": "^2.0.0", "object-assign": "^2.0.0", "qs": "2.4.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.13.5", "scripts": {}, "_shasum": "02e3e2821c1a38d0573733ab1abfb1c388516733", "_from": "build", "_resolved": "file:build", "_npmVersion": "3.3.10", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "02e3e2821c1a38d0573733ab1abfb1c388516733", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.13.5.tgz" }, "directories": {} }, "1.0.0-rc4": { "name": "react-router", "version": "1.0.0-rc4", "description": "A complete routing library for React.js", "main": "lib/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "babel ./modules -d lib --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && karma start", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0" }, "peerDependencies": { "history": "^1.12.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^3.1.23", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "history": "^1.12.5", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-firefox-launcher": "^0.1.6", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "react-static-container": "^1.0.0", "rf-changelog": "^0.4.0", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "e26c8c0c389f2e109c20328bd13a320342b64bda", "_id": "react-router@1.0.0-rc4", "_shasum": "710e834835662b34949172a5c7d2038f5f246749", "_from": ".", "_npmVersion": "3.3.10", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "710e834835662b34949172a5c7d2038f5f246749", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0-rc4.tgz" }, "directories": {} }, "1.0.0": { "name": "react-router", "version": "1.0.0", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "lib", "npm-scripts", "umd" ], "main": "lib/index", "repository": { "type": "git", "url": "https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "babel ./modules -d lib --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples *.js", "start": "node examples/server.js", "test": "npm run lint && karma start", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0" }, "peerDependencies": { "history": "^1.12.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^3.1.23", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "history": "^1.12.5", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "react-static-container": "^1.0.0", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "1bc9db10cdd86d7bf6a066388d88ad3b0b150da3", "_id": "react-router@1.0.0", "_shasum": "f56e2620d2d9f5fe19440d5dba9971203dec4d3f", "_from": ".", "_npmVersion": "2.5.1", "_nodeVersion": "0.12.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "f56e2620d2d9f5fe19440d5dba9971203dec4d3f", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.0.tgz" }, "directories": {} }, "1.0.1": { "name": "react-router", "version": "1.0.1", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0" }, "peerDependencies": { "history": "^1.12.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^3.1.23", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "history": "^1.12.5", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "react-static-container": "^1.0.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "d88579298a21798b4e4e5645e190c8a7b4cf66a3", "_id": "react-router@1.0.1", "_shasum": "6ceb6f020c33d5d99ca8836a62554bc9865a454b", "_from": ".", "_npmVersion": "3.3.10", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "6ceb6f020c33d5d99ca8836a62554bc9865a454b", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.1.tgz" }, "directories": {} }, "1.0.2": { "name": "react-router", "version": "1.0.2", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0" }, "peerDependencies": { "history": "1.13.x" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^3.1.23", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "history": "^1.12.5", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "react-static-container": "^1.0.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "2153e2cf0d691c141257eaf29cf230b0bc0f789f", "_id": "react-router@1.0.2", "_shasum": "06e658ccdc7237d1e5e42c6185031655ca950fb2", "_from": ".", "_npmVersion": "3.3.10", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "06e658ccdc7237d1e5e42c6185031655ca950fb2", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.2.tgz" }, "directories": {} }, "1.0.3": { "name": "react-router", "version": "1.0.3", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0" }, "peerDependencies": { "history": "^1.17.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "history": "^1.17.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "react-static-container": "^1.0.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "f0456b75eee362a179e6b49bbe5add95fb734f80", "_id": "react-router@1.0.3", "_shasum": "980ecaa055b86e47c86548c232ae05a88a41f0b7", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "980ecaa055b86e47c86548c232ae05a88a41f0b7", "tarball": "http://registry.npmjs.org/react-router/-/react-router-1.0.3.tgz" }, "directories": {} }, "2.0.0-rc1": { "name": "react-router", "version": "2.0.0-rc1", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0", "history": "^1.17.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "71797751ed02bae6d7340643c569bba9baad80df", "_id": "react-router@2.0.0-rc1", "_shasum": "e7442d95810a59d212d5342c8478d3dbd716d2fc", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "e7442d95810a59d212d5342c8478d3dbd716d2fc", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.0.0-rc1.tgz" }, "directories": {} }, "2.0.0-rc2": { "name": "react-router", "version": "2.0.0-rc2", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0", "history": "^1.17.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "78757ca7ab0010eceb2ed214fe224ba9f370a7ee", "_id": "react-router@2.0.0-rc2", "_shasum": "65cb7d090735a4ef3a735b919066d102ade2df71", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "65cb7d090735a4ef3a735b919066d102ade2df71", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.0.0-rc2.tgz" }, "deprecated": "A critical install failure due to an npm bug is fixed in rc3. Also, please use @beta when installing instead of @2.0.0-rc2, this ensures you get the latest pre-release.", "directories": {} }, "2.0.0-rc3": { "name": "react-router", "version": "2.0.0-rc3", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0", "history": "^1.17.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "b9f8a38badf8d41fef930ad52793d486c6d383fa", "_id": "react-router@2.0.0-rc3", "_shasum": "080d93b609b82a73a490438883047950bc0470a5", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "080d93b609b82a73a490438883047950bc0470a5", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.0.0-rc3.tgz" }, "directories": {} }, "2.0.0-rc4": { "name": "react-router", "version": "2.0.0-rc4", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "invariant": "^2.0.0", "warning": "^2.0.0", "history": "^1.17.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "613dad98a505e1a1dfb40638be7f3611c73ba102", "_id": "react-router@2.0.0-rc4", "_shasum": "6c0455ff166468a86be77fefcc4e1ea4ff758d26", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "6c0455ff166468a86be77fefcc4e1ea4ff758d26", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.0.0-rc4.tgz" }, "directories": {} }, "2.0.0-rc5": { "name": "react-router", "version": "2.0.0-rc5", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "modules/*.js", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.0-rc1", "invariant": "^2.0.0", "warning": "^2.0.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "560f0a15338da9efdc771ff1bfb27b3fb7477eb3", "_id": "react-router@2.0.0-rc5", "_shasum": "700922e5603e4f2a8982b639d63334a2321b34a0", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "700922e5603e4f2a8982b639d63334a2321b34a0", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.0.0-rc5.tgz" }, "directories": {} }, "2.0.0-rc6": { "name": "react-router", "version": "2.0.0-rc6", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "modules/*.js", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.0", "invariant": "^2.0.0", "warning": "^2.0.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "05f80843612c379920226b71812cc7d5119a7597", "_id": "react-router@2.0.0-rc6", "_shasum": "79da721fcfab65714ba47349d3c434989853e9c8", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "79da721fcfab65714ba47349d3c434989853e9c8", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.0.0-rc6.tgz" }, "_npmOperationalInternal": { "host": "packages-6-west.internal.npmjs.com", "tmp": "tmp/react-router-2.0.0-rc6.tgz_1454686360682_0.3320722554344684" }, "directories": {} }, "2.0.0": { "name": "react-router", "version": "2.0.0", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "modules/*.js", "npm-scripts", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://rackt.github.io/react-router/", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js", "postinstall": "node ./npm-scripts/postinstall.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.0", "invariant": "^2.0.0", "warning": "^2.0.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "2edf474fbaa9a5f1c49b67a2eb5cdc56b20444ca", "_id": "react-router@2.0.0", "_shasum": "d07fe4aeeb445fb15eb820912838161110f0c78c", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "d07fe4aeeb445fb15eb820912838161110f0c78c", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.0.0.tgz" }, "_npmOperationalInternal": { "host": "packages-9-west.internal.npmjs.com", "tmp": "tmp/react-router-2.0.0.tgz_1455082156203_0.6167809667531401" }, "directories": {} }, "2.0.1": { "name": "react-router", "version": "2.0.1", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "modules/*.js", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://reactjs.org/react-router/", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=production webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.0", "invariant": "^2.0.0", "warning": "^2.0.0" }, "devDependencies": { "babel": "^5.4.7", "babel-core": "^5.4.7", "babel-eslint": "^4.1.6", "babel-loader": "^5.0.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.2", "codecov.io": "^0.1.6", "coveralls": "^2.11.4", "css-loader": "^0.19.0", "eslint": "^1.7.3", "eslint-config-rackt": "^1.1.0", "eslint-plugin-react": "^3.6.3", "expect": "^1.12.0", "express": "^4.13.3", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.13", "karma-browserstack-launcher": "^0.1.4", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.3", "karma-mocha": "^0.2.0", "karma-mocha-reporter": "^1.1.1", "karma-sourcemap-loader": "^0.3.5", "karma-webpack": "^1.7.0", "mocha": "^2.0.1", "pretty-bytes": "^2.0.1", "qs": "^4.0.0", "react": "^0.14.0", "react-addons-css-transition-group": "^0.14.0", "react-addons-test-utils": "0.14.0", "react-dom": "^0.14.0", "rimraf": "^2.4.3", "style-loader": "^0.12.4", "webpack": "^1.4.13", "webpack-dev-middleware": "^1.2.0" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "77a594c85c4c75c4a214cdf9307092d808ef55c1", "_id": "react-router@2.0.1", "_shasum": "25ccdd8d8889857945521a21f5cd67ddc8d1e5d8", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "25ccdd8d8889857945521a21f5cd67ddc8d1e5d8", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.0.1.tgz" }, "_npmOperationalInternal": { "host": "packages-13-west.internal.npmjs.com", "tmp": "tmp/react-router-2.0.1.tgz_1457569175355_0.28356667840853333" }, "directories": {} }, "2.1.0": { "name": "react-router", "version": "2.1.0", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://reactjs.org/react-router/", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "invariant": "^2.2.1", "warning": "^2.1.0" }, "devDependencies": { "babel": "^5.8.38", "babel-core": "^5.8.38", "babel-eslint": "^4.1.8", "babel-loader": "^5.4.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.16.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.0", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "58169b6eb8b3991bc32e59fdc321ef322dda62bf", "_id": "react-router@2.1.0", "_shasum": "f1b2a2b769be557a34297fe1053cb424596b4e88", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "f1b2a2b769be557a34297fe1053cb424596b4e88", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.1.0.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-2.1.0.tgz_1460395583831_0.4714319889899343" }, "directories": {} }, "2.1.1": { "name": "react-router", "version": "2.1.1", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://reactjs.org/react-router/", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "invariant": "^2.2.1", "warning": "^2.1.0" }, "devDependencies": { "babel": "^5.8.38", "babel-core": "^5.8.38", "babel-eslint": "^4.1.8", "babel-loader": "^5.4.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.16.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.0", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "e3e1545db24c410565dd4a4e7256407de86328e5", "_id": "react-router@2.1.1", "_shasum": "5ac7ae86ca091a59cde635de1a594293bc2b5905", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "mjackson", "email": "mjijackson@gmail.com" } ], "dist": { "shasum": "5ac7ae86ca091a59cde635de1a594293bc2b5905", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.1.1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-2.1.1.tgz_1460408504167_0.6190917056519538" }, "directories": {} }, "2.2.0": { "name": "react-router", "version": "2.2.0", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://reactjs.org/react-router/", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es && babel ./modules -d es --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "invariant": "^2.2.1", "warning": "^2.1.0" }, "devDependencies": { "babel": "^5.8.38", "babel-core": "^5.8.38", "babel-eslint": "^4.1.8", "babel-loader": "^5.4.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.16.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.0", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "581f4a472dc9d8fbde2a27a20885c244df9c3bb7", "_id": "react-router@2.2.0", "_shasum": "d59a6674f69e90b5fc14c45e79a58a59b66929f1", "_from": ".", "_npmVersion": "3.8.7", "_nodeVersion": "5.10.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "d59a6674f69e90b5fc14c45e79a58a59b66929f1", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.2.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-2.2.0.tgz_1460590797869_0.6457097374368459" }, "directories": {} }, "2.2.1": { "name": "react-router", "version": "2.2.1", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://reactjs.org/react-router/", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es && babel ./modules -d es --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "invariant": "^2.2.1", "warning": "^2.1.0" }, "devDependencies": { "babel": "^5.8.38", "babel-core": "^5.8.38", "babel-eslint": "^4.1.8", "babel-loader": "^5.4.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.16.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.0", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "b5175b15bf0999e5fb151f57a8126aca3537a7c9", "_id": "react-router@2.2.1", "_shasum": "b0f80a181c6e017f1cf577fa7c73dbdde392970c", "_from": ".", "_npmVersion": "3.8.7", "_nodeVersion": "5.10.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "b0f80a181c6e017f1cf577fa7c73dbdde392970c", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.2.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.2.1.tgz_1460612289487_0.1572297397069633" }, "directories": {} }, "2.2.2": { "name": "react-router", "version": "2.2.2", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://reactjs.org/react-router/", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es && babel ./modules -d es --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "invariant": "^2.2.1", "warning": "^2.1.0" }, "devDependencies": { "babel": "^5.8.38", "babel-core": "^5.8.38", "babel-eslint": "^4.1.8", "babel-loader": "^5.4.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.16.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.0", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "c58c806b82ed7dec960f042e31b24091bee7dad0", "_id": "react-router@2.2.2", "_shasum": "3b474221c3cf3a3ad7fe901f532ff0cd5c490379", "_from": ".", "_npmVersion": "3.8.7", "_nodeVersion": "5.10.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "3b474221c3cf3a3ad7fe901f532ff0cd5c490379", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.2.2.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.2.2.tgz_1460652181603_0.18195841857232153" }, "directories": {} }, "2.2.4": { "name": "react-router", "version": "2.2.4", "description": "A complete routing library for React.js", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es && babel ./modules -d es --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "invariant": "^2.2.1", "warning": "^2.1.0" }, "devDependencies": { "babel": "^5.8.38", "babel-core": "^5.8.38", "babel-eslint": "^4.1.8", "babel-loader": "^5.4.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.16.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.0", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "c9adeeab27a609bf6c01636d93d32bbafe6acbde", "_id": "react-router@2.2.4", "_shasum": "6ec84ae380717b743cca90c695b5688befb2ea7c", "_from": ".", "_npmVersion": "3.8.7", "_nodeVersion": "5.10.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "6ec84ae380717b743cca90c695b5688befb2ea7c", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.2.4.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.2.4.tgz_1460754513244_0.7122524313163012" }, "directories": {} }, "2.3.0": { "name": "react-router", "version": "2.3.0", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es6", "build-cjs": "rimraf lib && babel ./modules -d lib --ignore '__tests__'", "build-es6": "rimraf es6 && babel ./modules -d es6 --blacklist=es6.modules --ignore '__tests__'", "build-umd": "NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "karma start", "test-node": "mocha --compilers js:babel-core/register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "invariant": "^2.2.1", "warning": "^2.1.0" }, "devDependencies": { "babel": "^5.8.38", "babel-core": "^5.8.38", "babel-eslint": "^4.1.8", "babel-loader": "^5.4.0", "babel-plugin-dev-expression": "^0.1.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.16.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^1.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.0", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "02221fed010fdc2b1e4847c6595cdf469eaea91a", "_id": "react-router@2.3.0", "_shasum": "6d02385003c68ac8dd260243570897a0e0fe4ead", "_from": ".", "_npmVersion": "3.8.7", "_nodeVersion": "5.10.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "6d02385003c68ac8dd260243570897a0e0fe4ead", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.3.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.3.0.tgz_1461016062881_0.40164600987918675" }, "directories": {} }, "2.4.0": { "name": "react-router", "version": "2.4.0", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "hoist-non-react-statics": "^1.0.5", "invariant": "^2.2.1", "warning": "^2.1.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.7.5", "babel-core": "^6.7.6", "babel-eslint": "^5.0.4", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.1.2", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.6.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-0": "^6.5.0", "babel-register": "^6.7.2", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "cross-env": "^1.0.7", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.18.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.1", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "041153a1489533f08d2e2c59c331e20ff31a32a7", "_id": "react-router@2.4.0", "_shasum": "d21d44a64ab75828f8bb77cc306908e22fdc6d64", "_from": ".", "_npmVersion": "3.8.7", "_nodeVersion": "5.10.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "d21d44a64ab75828f8bb77cc306908e22fdc6d64", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.4.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-2.4.0.tgz_1461863484705_0.41001310059800744" }, "directories": {} }, "2.4.1": { "name": "react-router", "version": "2.4.1", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "hoist-non-react-statics": "^1.0.5", "invariant": "^2.2.1", "warning": "^2.1.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.7.5", "babel-core": "^6.7.6", "babel-eslint": "^5.0.4", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.1.2", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.6.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.7.2", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "cross-env": "^1.0.7", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.18.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.1", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "f17c4b75b2697d23445196123f658a27e37309b3", "_id": "react-router@2.4.1", "_shasum": "bae815cd74b9c512192d9d17a1276f5462574775", "_from": ".", "_npmVersion": "3.9.0", "_nodeVersion": "6.0.0", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "bae815cd74b9c512192d9d17a1276f5462574775", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.4.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.4.1.tgz_1463697680899_0.2643290457781404" }, "directories": {} }, "3.0.0-alpha.1": { "name": "react-router", "version": "3.0.0-alpha.1", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "hoist-non-react-statics": "^1.0.5", "invariant": "^2.2.1", "warning": "^2.1.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.7.5", "babel-core": "^6.7.6", "babel-eslint": "^5.0.4", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.1.2", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.6.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.7.2", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "cross-env": "^1.0.7", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.18.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.1", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "2134f41d6cdb30c0a6beaf074a130db2340601ea", "_id": "react-router@3.0.0-alpha.1", "_shasum": "73271863aacf6d59e0839c07401239b28ff6fb88", "_from": ".", "_npmVersion": "3.9.0", "_nodeVersion": "6.0.0", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "73271863aacf6d59e0839c07401239b28ff6fb88", "tarball": "http://registry.npmjs.org/react-router/-/react-router-3.0.0-alpha.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-3.0.0-alpha.1.tgz_1463698490640_0.33552723936736584" }, "directories": {} }, "2.5.0": { "name": "react-router", "version": "2.5.0", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "hoist-non-react-statics": "^1.0.5", "invariant": "^2.2.1", "warning": "^2.1.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.7.5", "babel-core": "^6.7.6", "babel-eslint": "^5.0.4", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.1.2", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.6.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.7.2", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "cross-env": "^1.0.7", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.18.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.1", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "4e24ae759a7ee8acdb6023e8b4d27195e9e33f72", "_id": "react-router@2.5.0", "_shasum": "e1c97af161e8f92a98c888e38ea758c7f2a8cc3f", "_from": ".", "_npmVersion": "3.9.5", "_nodeVersion": "6.2.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "e1c97af161e8f92a98c888e38ea758c7f2a8cc3f", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.5.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.5.0.tgz_1466649803432_0.26163090229965746" }, "directories": {} }, "2.5.1": { "name": "react-router", "version": "2.5.1", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "hoist-non-react-statics": "^1.0.5", "invariant": "^2.2.1", "warning": "^2.1.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.7.5", "babel-core": "^6.7.6", "babel-eslint": "^5.0.4", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.1.2", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.6.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.7.2", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "cross-env": "^1.0.7", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.18.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.1", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "e01264dfaa132c129fc5e6b7a0fd3f7a7d165790", "_id": "react-router@2.5.1", "_shasum": "98de6982f0eaa2ff4b64abe72e9619c56e6e6ac9", "_from": ".", "_npmVersion": "3.9.6", "_nodeVersion": "6.2.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "98de6982f0eaa2ff4b64abe72e9619c56e6e6ac9", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.5.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.5.1.tgz_1466740769871_0.01134293619543314" }, "directories": {} }, "2.5.2": { "name": "react-router", "version": "2.5.2", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.0.1", "hoist-non-react-statics": "^1.0.5", "invariant": "^2.2.1", "warning": "^2.1.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.7.5", "babel-core": "^6.7.6", "babel-eslint": "^5.0.4", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.1.2", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.6.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.7.2", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.9", "cross-env": "^1.0.7", "css-loader": "^0.23.1", "eslint": "^1.10.3", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^3.16.1", "expect": "^1.18.0", "express": "^4.13.4", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^0.1.10", "karma-chrome-launcher": "^0.2.3", "karma-coverage": "^0.5.5", "karma-mocha": "^0.2.2", "karma-mocha-reporter": "^2.0.1", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.4.5", "pretty-bytes": "^3.0.1", "qs": "^6.1.0", "react": "^15.0.0", "react-addons-css-transition-group": "^15.0.0", "react-addons-test-utils": "^15.0.0", "react-dom": "^15.0.0", "rimraf": "^2.5.2", "style-loader": "^0.13.1", "webpack": "^1.12.14", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "cedd5b868cf650789ac6cd8b7874d75c2b2b1c1a", "_id": "react-router@2.5.2", "_shasum": "1c1fc95366393c96c1fb4932c0506128196b1203", "_from": ".", "_npmVersion": "3.9.6", "_nodeVersion": "6.2.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "1c1fc95366393c96c1fb4932c0506128196b1203", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.5.2.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-2.5.2.tgz_1467399190059_0.48323403485119343" }, "directories": {} }, "0.13.6": { "name": "react-router", "version": "0.13.6", "description": "A complete routing library for React.js", "main": "lib", "repository": { "type": "git", "url": "git+https://github.com/rackt/react-router.git" }, "homepage": "https://github.com/rackt/react-router/blob/latest/README.md", "bugs": { "url": "https://github.com/rackt/react-router/issues" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "peerDependencies": { "react": "0.13.x || 0.14.x || ^15.0.1" }, "dependencies": { "can-use-dom": "0.1.0", "invariant": "^2.0.0", "object-assign": "^2.0.0", "qs": "2.4.1" }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "_id": "react-router@0.13.6", "scripts": {}, "_shasum": "1bc39c745d42326cb51f1c7452479675a5172fa9", "_from": "build", "_resolved": "file:build", "_npmVersion": "3.10.5", "_nodeVersion": "6.3.0", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "1bc39c745d42326cb51f1c7452479675a5172fa9", "tarball": "http://registry.npmjs.org/react-router/-/react-router-0.13.6.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-0.13.6.tgz_1468872031072_0.49703969759866595" }, "directories": {} }, "2.6.0": { "name": "react-router", "version": "2.6.0", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples *.js", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.1.2", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.10.4", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.9.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.9.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.11", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.0.1", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^1.1.1", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.0", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.0", "react": "^15.2.1", "react-addons-css-transition-group": "^15.2.1", "react-addons-test-utils": "^15.2.1", "react-dom": "^15.2.1", "rimraf": "^2.5.3", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "8b3569b4cd1cba2fcb47fc33e1966903b6aae282", "_id": "react-router@2.6.0", "_shasum": "2fdba6ab9e196be67c26c1b6d423b5cea056fed8", "_from": ".", "_npmVersion": "3.10.5", "_nodeVersion": "6.3.0", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "2fdba6ab9e196be67c26c1b6d423b5cea056fed8", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.6.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.6.0.tgz_1468872276728_0.8452115948311985" }, "directories": {} }, "3.0.0-alpha.2": { "name": "react-router", "version": "3.0.0-alpha.2", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples *.js", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^3.0.0", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.10.4", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.9.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.9.0", "bundle-loader": "^0.5.4", "codecov.io": "^0.1.6", "coveralls": "^2.11.11", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.0.1", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^1.1.1", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.0", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.0", "react": "^15.2.1", "react-addons-css-transition-group": "^15.2.1", "react-addons-test-utils": "^15.2.1", "react-dom": "^15.2.1", "rimraf": "^2.5.3", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "a30defc3875e1abbb3978b5728db4b7d049a52f3", "_id": "react-router@3.0.0-alpha.2", "_shasum": "193f92207acb6d1f70880cfeb34a9f6e7fa2cd3c", "_from": ".", "_npmVersion": "3.10.5", "_nodeVersion": "6.3.0", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "193f92207acb6d1f70880cfeb34a9f6e7fa2cd3c", "tarball": "http://registry.npmjs.org/react-router/-/react-router-3.0.0-alpha.2.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-3.0.0-alpha.2.tgz_1468944668755_0.8614290840923786" }, "directories": {} }, "2.6.1": { "name": "react-router", "version": "2.6.1", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples *.js", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.1.2", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.11.4", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.9.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "d782f5cb6e6d7740d36871948293ce10046835df", "_id": "react-router@2.6.1", "_shasum": "e0454d66bd61b123d94db728f8ed33d9908be226", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "e0454d66bd61b123d94db728f8ed33d9908be226", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.6.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-2.6.1.tgz_1469836354723_0.5432916057761759" }, "directories": {} }, "3.0.0-alpha.3": { "name": "react-router", "version": "3.0.0-alpha.3", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "module": "es/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es && cross-env BABEL_ENV=es babel ./modules -d es --ignore '__tests__'", "build-umd": "cross-env BABEL_ENV=cjs NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env BABEL_ENV=cjs NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint modules examples *.js", "start": "cross-env BABEL_ENV=cjs node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env BABEL_ENV=cjs karma start", "test-node": "cross-env BABEL_ENV=cjs mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^3.0.0", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.11.4", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.9.0", "babel-preset-es2015-loose": "^7.0.0", "babel-preset-es2015-loose-native-modules": "^1.0.0", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.5.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "isparta-loader": "^2.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "59808d54859d04867b10f441b61aabe6dac031b9", "_id": "react-router@3.0.0-alpha.3", "_shasum": "3bd707e3b0352e48a1abd0a9d71703aafd47dd81", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.3.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "3bd707e3b0352e48a1abd0a9d71703aafd47dd81", "tarball": "http://registry.npmjs.org/react-router/-/react-router-3.0.0-alpha.3.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-3.0.0-alpha.3.tgz_1470161149821_0.9114468803163618" }, "directories": {} }, "2.7.0": { "name": "react-router", "version": "2.7.0", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint examples modules scripts tools *.js", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env NODE_ENV=test karma start", "test-node": "cross-env NODE_ENV=test mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.1.2", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.13.2", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-istanbul": "^1.0.3", "babel-preset-es2015": "^6.13.2", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.13.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "ab4552d2ea0ec5c0cf3c534bca654a1af3ea0dec", "_id": "react-router@2.7.0", "_shasum": "0ac3f70ca74ff8fbe410a0cb364b258b84e1d643", "_from": ".", "_npmVersion": "3.10.5", "_nodeVersion": "6.3.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "0ac3f70ca74ff8fbe410a0cb364b258b84e1d643", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.7.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-2.7.0.tgz_1471724276901_0.3183578015305102" }, "directories": {} }, "2.8.0": { "name": "react-router", "version": "2.8.0", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint examples modules scripts tools *.js", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env NODE_ENV=test karma start", "test-node": "cross-env NODE_ENV=test mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.1.2", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.13.2", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-istanbul": "^1.0.3", "babel-preset-es2015": "^6.13.2", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.13.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "17ad13fed14e7e9a2ed963431b02f26d93be2f51", "_id": "react-router@2.8.0", "_shasum": "cbc629fede81d96d0598c2bae1e348e7d03f6c17", "_from": ".", "_npmVersion": "3.10.5", "_nodeVersion": "6.3.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "cbc629fede81d96d0598c2bae1e348e7d03f6c17", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.8.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-2.8.0.tgz_1473461240638_0.7841801031026989" }, "directories": {} }, "4.0.0-0": { "name": "react-router", "version": "4.0.0-0", "description": "Declarative Routing for React.js", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "scripts": { "start": "echo 'Make sure to `cd website && npm install`' && cd website && npm run dev", "release": "node ./scripts/release.js", "build-lib": "babel ./modules -d . --ignore '__tests__'", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "prepublish": "node ./scripts/build.js", "test": "npm run lint && karma start", "lint": "eslint modules" }, "dependencies": { "history": "^4.0.0", "query-string": "4.2.3", "react-history": "^0.13.0" }, "peerDependencies": { "react": "15.x", "react-dom": "15.x" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.9.1", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.12.0", "eslint-plugin-import": "^1.8.1", "eslint-plugin-react": "^5.1.1", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.1.0", "react-addons-test-utils": "^15.3.1", "react-dom": "^15.1.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "gitHead": "908e9d3489bc5d1b7cc5e7d3d0431d28c844e07d", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "homepage": "https://github.com/reactjs/react-router#readme", "_id": "react-router@4.0.0-0", "_shasum": "9eab5a5f4872b60a0fa2e0fb7142c3d09cebe1d7", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "dist": { "shasum": "9eab5a5f4872b60a0fa2e0fb7142c3d09cebe1d7", "tarball": "http://registry.npmjs.org/react-router/-/react-router-4.0.0-0.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-0.tgz_1473778082383_0.12723203166387975" }, "directories": {} }, "4.0.0-1": { "name": "react-router", "version": "4.0.0-1", "description": "Declarative Routing for React.js", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "scripts": { "start": "echo 'Make sure to `cd website && npm install`' && cd website && npm run dev", "release": "node ./scripts/release.js", "build-lib": "babel ./modules -d . --ignore '__tests__'", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "prepublish": "node ./scripts/build.js", "test": "npm run lint && karma start", "lint": "eslint modules" }, "dependencies": { "history": "^4.0.0", "path-to-regexp": "^1.5.3", "query-string": "4.2.3", "react-history": "^0.13.0" }, "peerDependencies": { "react": "15.x", "react-dom": "15.x" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.9.1", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.12.0", "eslint-plugin-import": "^1.8.1", "eslint-plugin-react": "^5.1.1", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.1.0", "react-addons-test-utils": "^15.3.1", "react-dom": "^15.1.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "gitHead": "51742dbd38bccd45b95d156b270fd389bcf24d26", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "homepage": "https://github.com/reactjs/react-router#readme", "_id": "react-router@4.0.0-1", "_shasum": "1b43f043208f64f786c46743ae2aa0bd45fa345e", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "dist": { "shasum": "1b43f043208f64f786c46743ae2aa0bd45fa345e", "tarball": "http://registry.npmjs.org/react-router/-/react-router-4.0.0-1.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-1.tgz_1473779463085_0.9140737259294838" }, "directories": {} }, "4.0.0-2": { "name": "react-router", "version": "4.0.0-2", "description": "Declarative Routing for React.js", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "scripts": { "start": "echo 'Make sure to `cd website && npm install`' && cd website && npm run dev", "release": "node ./scripts/release.js", "build-lib": "babel ./modules -d . --ignore '__tests__'", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "prepublish": "node ./scripts/build.js", "test": "npm run lint && karma start", "lint": "eslint modules" }, "dependencies": { "history": "^4.0.0", "path-to-regexp": "^1.5.3", "query-string": "4.2.3", "react-history": "^0.13.0" }, "peerDependencies": { "react": "15.x", "react-dom": "15.x" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.9.1", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.12.0", "eslint-plugin-import": "^1.8.1", "eslint-plugin-react": "^5.1.1", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.1.0", "react-addons-test-utils": "^15.3.1", "react-dom": "^15.1.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "gitHead": "61554d97aa847c79da3b0621483c8b0b6a773002", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "homepage": "https://github.com/reactjs/react-router#readme", "_id": "react-router@4.0.0-2", "_shasum": "eaf2a8e9f0edd83abb1aaefa2d0ceb5a073b4e35", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.5.0", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "dist": { "shasum": "eaf2a8e9f0edd83abb1aaefa2d0ceb5a073b4e35", "tarball": "http://registry.npmjs.org/react-router/-/react-router-4.0.0-2.tgz" }, "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-2.tgz_1473781714510_0.5020780761260539" }, "directories": {} }, "2.8.1": { "name": "react-router", "version": "2.8.1", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es6", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es6/index", "repository": { "type": "git", "url": "git+https://github.com/reactjs/react-router.git" }, "homepage": "https://github.com/reactjs/react-router#readme", "bugs": { "url": "https://github.com/reactjs/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es6 && cross-env BABEL_ENV=es babel ./modules -d es6 --ignore '__tests__'", "build-umd": "cross-env NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint examples modules scripts tools *.js", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env NODE_ENV=test karma start", "test-node": "cross-env NODE_ENV=test mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^2.1.2", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.13.2", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-istanbul": "^1.0.3", "babel-preset-es2015": "^6.13.2", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.13.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "800991cd2044293718fccd3763b9d91c2f811296", "_id": "react-router@2.8.1", "_shasum": "73e9491f6ceb316d0f779829081863e378ee4ed7", "_from": ".", "_npmVersion": "3.10.5", "_nodeVersion": "6.3.1", "_npmUser": { "name": "taion", "email": "tesrin@gmail.com" }, "dist": { "shasum": "73e9491f6ceb316d0f779829081863e378ee4ed7", "tarball": "http://registry.npmjs.org/react-router/-/react-router-2.8.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-2.8.1.tgz_1473784351728_0.20458883745595813" }, "directories": {} }, "3.0.0-beta.1": { "name": "react-router", "version": "3.0.0-beta.1", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "homepage": "https://github.com/ReactTraining/react-router#readme", "bugs": { "url": "https://github.com/ReactTraining/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore '__tests__'", "build-es": "rimraf es && cross-env BABEL_ENV=es babel ./modules -d es --ignore '__tests__'", "build-umd": "cross-env NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint examples modules scripts tools *.js", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env NODE_ENV=test karma start", "test-node": "cross-env NODE_ENV=test mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^3.0.0", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.13.2", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-istanbul": "^1.0.3", "babel-polyfill": "^6.13.0", "babel-preset-es2015": "^6.13.2", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.13.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^6.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "cd3479b5c047a890049a15da5e95a194c120c6c5", "_id": "react-router@3.0.0-beta.1", "_shasum": "eb3019587da65ac77c12cf6ab790d408247ad5af", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.2.1", "_npmUser": { "name": "timdorr", "email": "timdorr@timdorr.com" }, "dist": { "shasum": "eb3019587da65ac77c12cf6ab790d408247ad5af", "tarball": "http://registry.npmjs.org/react-router/-/react-router-3.0.0-beta.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-16-east.internal.npmjs.com", "tmp": "tmp/react-router-3.0.0-beta.1.tgz_1474047649325_0.7481294642202556" }, "directories": {} }, "4.0.0-alpha.3": { "name": "react-router", "version": "4.0.0-alpha.3", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "*.js", "*.md", "umd" ], "scripts": { "start": "echo 'Make sure to `cd website && npm install`' && cd website && npm run dev", "release": "node ./scripts/release.js", "build-lib": "babel ./modules -d . --ignore '__tests__'", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "prepublish": "node ./scripts/build.js", "clean": "rm $(ls modules | grep -v __)", "test": "npm run lint && karma start", "lint": "eslint modules" }, "dependencies": { "history": "^4.0.0", "path-to-regexp": "^1.5.3", "query-string": "4.2.3", "react-history": "^0.13.0" }, "peerDependencies": { "react": "15.x" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.9.1", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.14.0", "babel-preset-es2015-loose": "^8.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.3.0", "react-addons-test-utils": "^15.3.1", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "gitHead": "a5e05f7187ff728821475c3db7045101e448261c", "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-alpha.3", "_shasum": "243a28bec2558c70c8d4703d36bedf8cf5508f5e", "_from": ".", "_npmVersion": "3.10.5", "_nodeVersion": "6.2.1", "_npmUser": { "name": "timdorr", "email": "timdorr@timdorr.com" }, "dist": { "shasum": "243a28bec2558c70c8d4703d36bedf8cf5508f5e", "tarball": "http://registry.npmjs.org/react-router/-/react-router-4.0.0-alpha.3.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-alpha.3.tgz_1474140014719_0.2660294552333653" }, "directories": {} }, "4.0.0-alpha.4": { "name": "react-router", "version": "4.0.0-alpha.4", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "*.js", "*.md", "umd" ], "scripts": { "start": "echo 'Make sure to `cd website && npm install`' && cd website && npm run dev", "release": "node ./scripts/release.js", "build-lib": "babel ./modules -d . --ignore '__tests__'", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "prepublish": "node ./scripts/build.js", "clean": "rm $(ls modules | grep -v __)", "test": "npm run lint && karma start", "lint": "eslint modules" }, "dependencies": { "path-to-regexp": "^1.5.3", "query-string": "4.2.3", "react-broadcast": "^0.1.1", "react-history": "^0.14.0" }, "peerDependencies": { "react": "15.x" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.9.1", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.4", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.14.0", "babel-preset-es2015-loose": "^8.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.3.0", "react-addons-test-utils": "^15.3.1", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "gitHead": "09db55fbab6ca58dc6cfbffdffcc3198acb617fc", "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-alpha.4", "_shasum": "5f19e97b8df497e6f77f68bb1bd9441f56103335", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "dist": { "shasum": "5f19e97b8df497e6f77f68bb1bd9441f56103335", "tarball": "http://registry.npmjs.org/react-router/-/react-router-4.0.0-alpha.4.tgz" }, "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-alpha.4.tgz_1475294577755_0.769422703422606" }, "directories": {} }, "4.0.0-alpha.5": { "name": "react-router", "version": "4.0.0-alpha.5", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "*.js", "*.md", "umd" ], "scripts": { "start": "echo 'Make sure to `cd website && npm install`' && cd website && npm run dev", "release": "node ./scripts/release.js", "build-lib": "babel ./modules -d . --ignore __tests__", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./scripts/build.js", "clean": "node ./scripts/clean.js", "test": "npm run lint && karma start", "lint": "eslint modules" }, "dependencies": { "path-to-regexp": "^1.5.3", "query-string": "4.2.3", "react-broadcast": "^0.1.1", "history": "^4.3.0" }, "peerDependencies": { "react": "15.x" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.9.1", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.4", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.14.0", "babel-preset-es2015-loose": "^8.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.3.0", "react-addons-test-utils": "^15.3.1", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "gitHead": "fcd8e3ef754ccab18a004351756c18c954bfb7f9", "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-alpha.5", "_shasum": "9d80514f9bbbec040dffbd4f9cf241da2830e318", "_from": ".", "_npmVersion": "3.5.2", "_nodeVersion": "4.2.1", "_npmUser": { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "dist": { "shasum": "9d80514f9bbbec040dffbd4f9cf241da2830e318", "tarball": "http://registry.npmjs.org/react-router/-/react-router-4.0.0-alpha.5.tgz" }, "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-alpha.5.tgz_1476827299427_0.6682194855529815" }, "directories": {} }, "3.0.0": { "name": "react-router", "version": "3.0.0", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "homepage": "https://github.com/ReactTraining/react-router#readme", "bugs": { "url": "https://github.com/ReactTraining/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore __tests__", "build-es": "rimraf es && cross-env BABEL_ENV=es babel ./modules -d es --ignore __tests__", "build-umd": "cross-env NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint examples modules scripts tools *.js", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env NODE_ENV=test karma start", "test-node": "cross-env NODE_ENV=test mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^3.0.0", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.13.2", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-istanbul": "^1.0.3", "babel-polyfill": "^6.13.0", "babel-preset-es2015": "^6.13.2", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.13.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^6.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "6eeb7ad358f987520f5b519e48bdd31f725cbade", "_id": "react-router@3.0.0", "_shasum": "3f313e4dbaf57048c48dd0a8c3cac24d93667dff", "_from": ".", "_npmVersion": "3.10.5", "_nodeVersion": "6.2.1", "_npmUser": { "name": "timdorr", "email": "timdorr@timdorr.com" }, "dist": { "shasum": "3f313e4dbaf57048c48dd0a8c3cac24d93667dff", "tarball": "http://registry.npmjs.org/react-router/-/react-router-3.0.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-router-3.0.0.tgz_1477355876651_0.06933709769509733" }, "directories": {} }, "4.0.0-alpha.6": { "name": "react-router", "version": "4.0.0-alpha.6", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "*.js", "*.md", "umd" ], "scripts": { "start": "echo 'Make sure to `cd website && npm install`' && cd website && npm run dev", "release": "node ./scripts/release.js", "build-lib": "babel ./modules -d . --ignore __tests__", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./scripts/build.js", "clean": "node ./scripts/clean.js", "test": "npm run lint && karma start", "lint": "eslint modules" }, "dependencies": { "path-to-regexp": "^1.5.3", "query-string": "4.2.3", "react-broadcast": "^0.1.2", "history": "^4.3.0" }, "peerDependencies": { "react": "15.x" }, "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.9.1", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.4", "babel-plugin-dev-expression": "^0.2.1", "babel-preset-es2015": "^6.14.0", "babel-preset-es2015-loose": "^8.0.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.3.0", "react-addons-test-utils": "^15.3.1", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "gitHead": "9124c2d76a5f33a3c631411c7d3f13522ca51511", "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-alpha.6", "_shasum": "239fcf9a6ba7997021022c9b51d72d370f7b6bf4", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.2.1", "_npmUser": { "name": "timdorr", "email": "timdorr@timdorr.com" }, "dist": { "shasum": "239fcf9a6ba7997021022c9b51d72d370f7b6bf4", "tarball": "http://registry.npmjs.org/react-router/-/react-router-4.0.0-alpha.6.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "taion", "email": "tesrin@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-alpha.6.tgz_1479694071556_0.45999970636330545" }, "directories": {} }, "3.0.1": { "name": "react-router", "version": "3.0.1", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "homepage": "https://github.com/ReactTraining/react-router#readme", "bugs": { "url": "https://github.com/ReactTraining/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore __tests__", "build-es": "rimraf es && cross-env BABEL_ENV=es babel ./modules -d es --ignore __tests__", "build-umd": "cross-env NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint examples modules scripts tools *.js", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env NODE_ENV=test karma start", "test-node": "cross-env NODE_ENV=test mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^3.0.0", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "warning": "^3.0.0", "loose-envify": "^1.2.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.13.2", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-istanbul": "^1.0.3", "babel-polyfill": "^6.13.0", "babel-preset-es2015": "^6.13.2", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.13.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^6.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "df77bd97b6fc90c16dc74803117ead7a87bfbae2", "_id": "react-router@3.0.1", "_shasum": "a4bf86441bd796e86a1c41d61397b604e2e4b98f", "_from": ".", "_npmVersion": "3.10.5", "_nodeVersion": "6.2.1", "_npmUser": { "name": "timdorr", "email": "timdorr@timdorr.com" }, "dist": { "shasum": "a4bf86441bd796e86a1c41d61397b604e2e4b98f", "tarball": "https://registry.npmjs.org/react-router/-/react-router-3.0.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-router-3.0.1.tgz_1484231644868_0.9892937941476703" }, "directories": {} }, "3.0.2": { "name": "react-router", "version": "3.0.2", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "module": "es/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "homepage": "https://github.com/ReactTraining/react-router#readme", "bugs": { "url": "https://github.com/ReactTraining/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore __tests__", "build-es": "rimraf es && cross-env BABEL_ENV=es babel ./modules -d es --ignore __tests__", "build-umd": "cross-env NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint examples modules scripts tools *.js", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env NODE_ENV=test karma start", "test-node": "cross-env NODE_ENV=test mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^3.0.0", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "loose-envify": "^1.2.0", "warning": "^3.0.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.13.2", "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-istanbul": "^1.0.3", "babel-polyfill": "^6.13.0", "babel-preset-es2015": "^6.13.2", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.13.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^1.0.1", "cross-env": "^2.0.0", "css-loader": "^0.23.1", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^6.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.13.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "5e69b23a369b7dbcb9afc6cdca9bf2dcf07ad432", "_id": "react-router@3.0.2", "_shasum": "5a19156678810e01d81901f9c0fef63284b8a514", "_from": ".", "_npmVersion": "3.10.3", "_nodeVersion": "6.2.1", "_npmUser": { "name": "timdorr", "email": "timdorr@timdorr.com" }, "dist": { "shasum": "5a19156678810e01d81901f9c0fef63284b8a514", "tarball": "https://registry.npmjs.org/react-router/-/react-router-3.0.2.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-router-3.0.2.tgz_1484761420109_0.49309633392840624" }, "directories": {} }, "4.0.0-beta.1": { "name": "react-router", "version": "4.0.0-beta.1", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "Core.js", "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "ServerRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "umd" ], "main": "index.js", "scripts": { "release": "node ./scripts/release.js", "build-lib": "babel ./modules -d . --ignore __tests__", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./scripts/build.js", "clean": "git clean -fX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": "15.x" }, "dependencies": { "history": "^4.5.1", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3", "warning": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-object-assign": "^6.22.0", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-beta.1", "_shasum": "2b21684f7ae7d4a6b39336204c8f86b25ff2e1d6", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "2b21684f7ae7d4a6b39336204c8f86b25ff2e1d6", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0-beta.1.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-beta.1.tgz_1485791155913_0.6591614547651261" }, "directories": {} }, "4.0.0-beta.2": { "name": "react-router", "version": "4.0.0-beta.2", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "Core.js", "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "ServerRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "umd" ], "main": "index.js", "scripts": { "build-lib": "babel ./modules -d . --ignore __tests__", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./scripts/build.js", "clean": "git clean -fX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": "15.x" }, "dependencies": { "history": "^4.5.1", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3", "warning": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-object-assign": "^6.22.0", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-beta.2", "_shasum": "2c875b2c017e1f66532e914cfb13e52353fe1332", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "2c875b2c017e1f66532e914cfb13e52353fe1332", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0-beta.2.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-beta.2.tgz_1485792976580_0.18001127778552473" }, "directories": {} }, "4.0.0-beta.3": { "name": "react-router", "version": "4.0.0-beta.3", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "StaticRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "umd" ], "main": "index.js", "scripts": { "build-lib": "babel ./modules -d . --ignore __tests__", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./scripts/build.js", "clean": "git clean -fX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": "15.x" }, "dependencies": { "history": "^4.5.1", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3", "warning": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-object-assign": "^6.22.0", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-beta.3", "_shasum": "3deee9063401b7205f8d9cfe718787f699886975", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "3deee9063401b7205f8d9cfe718787f699886975", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0-beta.3.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-beta.3.tgz_1485814546312_0.7661577931139618" }, "directories": {} }, "4.0.0-beta.4": { "name": "react-router", "version": "4.0.0-beta.4", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "StaticRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "umd" ], "main": "index.js", "scripts": { "build-lib": "babel ./modules -d . --ignore __tests__", "build-umd": "webpack modules/index.js umd/react-router.js", "build-min": "webpack -p modules/index.js umd/react-router.min.js", "build": "node ./scripts/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./scripts/build.js", "clean": "git clean -fX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": "15.x" }, "dependencies": { "history": "^4.5.1", "invariant": "^2.2.2", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3", "warning": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-object-assign": "^6.22.0", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-beta.4", "_shasum": "6ab21755525ae3dfe7cca5e0176b05385a7b854d", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "6ab21755525ae3dfe7cca5e0176b05385a7b854d", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0-beta.4.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-beta.4.tgz_1486001894167_0.1549324297811836" }, "directories": {} }, "4.0.0-beta.5": { "name": "react-router", "version": "4.0.0-beta.5", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "StaticRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "es", "umd" ], "main": "index.js", "module": "es/index.js", "scripts": { "build": "node ./scripts/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./scripts/build.js", "clean": "git clean -fX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": ">=15" }, "dependencies": { "history": "^4.5.1", "invariant": "^2.2.2", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3", "warning": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-object-assign": "^6.22.0", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-beta.5", "_shasum": "f1852e953d2aad942a7502786e32b9f56b4ae020", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "f1852e953d2aad942a7502786e32b9f56b4ae020", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0-beta.5.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-beta.5.tgz_1486451675030_0.4918806804344058" }, "directories": {} }, "4.0.0-beta.6": { "name": "react-router", "version": "4.0.0-beta.6", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "StaticRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "es", "umd" ], "main": "index.js", "module": "es/index.js", "scripts": { "build": "node ./tools/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./tools/build.js", "clean": "git clean -e '!node_modules' -fdX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": ">=15" }, "dependencies": { "history": "^4.5.1", "invariant": "^2.2.2", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-object-assign": "^6.22.0", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-beta.6", "_shasum": "561ac0bf1929960813bf201319ff85d821d5547b", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "561ac0bf1929960813bf201319ff85d821d5547b", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0-beta.6.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-beta.6.tgz_1487054214739_0.6107699132990092" }, "directories": {} }, "4.0.0-beta.7": { "name": "react-router", "version": "4.0.0-beta.7", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "StaticRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "es", "umd" ], "main": "index.js", "module": "es/index.js", "scripts": { "build": "node ./tools/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./tools/build.js", "clean": "git clean -e '!node_modules' -fdX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": ">=15" }, "dependencies": { "history": "^4.5.1", "invariant": "^2.2.2", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3", "warning": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-beta.7", "_shasum": "e82931139ed26a99cd5251e2cf2a7b47daceb483", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "e82931139ed26a99cd5251e2cf2a7b47daceb483", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0-beta.7.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-beta.7.tgz_1488560828930_0.17826370429247618" }, "directories": {} }, "4.0.0-beta.8": { "name": "react-router", "version": "4.0.0-beta.8", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "StaticRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "es", "umd" ], "main": "index.js", "module": "es/index.js", "scripts": { "build": "node ./tools/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./tools/build.js", "clean": "git clean -e '!node_modules' -fdX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": ">=15" }, "dependencies": { "history": "^4.6.0", "invariant": "^2.2.2", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3", "warning": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0-beta.8", "_shasum": "368cfe540d23d5d23419b42fb915d465f268b66b", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "368cfe540d23d5d23419b42fb915d465f268b66b", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0-beta.8.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0-beta.8.tgz_1489010462733_0.2613317503128201" }, "directories": {} }, "4.0.0": { "name": "react-router", "version": "4.0.0", "description": "Declarative routing for React", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "license": "MIT", "authors": [ "Michael Jackson", "Ryan Florence" ], "files": [ "MemoryRouter.js", "Prompt.js", "Redirect.js", "Route.js", "Router.js", "StaticRouter.js", "Switch.js", "index.js", "matchPath.js", "withRouter.js", "README.md", "es", "umd" ], "main": "index.js", "module": "es/index.js", "scripts": { "build": "node ./tools/build.js", "watch": "babel ./modules -d . --ignore __tests__ --watch", "prepublish": "node ./tools/build.js", "clean": "git clean -e '!node_modules' -fdX .", "lint": "eslint modules", "test": "karma start --single-run" }, "peerDependencies": { "react": "^15" }, "dependencies": { "history": "^4.6.0", "invariant": "^2.2.2", "loose-envify": "^1.3.1", "path-to-regexp": "^1.5.3", "warning": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.18.0", "babel-eslint": "^6.0.4", "babel-loader": "^6.2.10", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-preset-es2015": "^6.14.0", "babel-preset-react": "^6.5.0", "babel-preset-stage-1": "^6.5.0", "eslint": "^2.13.1", "eslint-plugin-import": "^1.15.0", "eslint-plugin-react": "^5.2.2", "expect": "^1.20.1", "gzip-size": "^3.0.0", "in-publish": "^2.0.0", "karma": "^0.13.22", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^1.0.1", "karma-mocha": "^1.0.1", "karma-mocha-reporter": "^2.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", "mocha": "^2.5.3", "pretty-bytes": "^3.0.1", "react": "^15.4.2", "react-addons-test-utils": "^15.4.2", "react-dom": "^15.3.0", "readline-sync": "^1.4.4", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "browserify": { "transform": [ "loose-envify" ] }, "keywords": [ "react", "router", "route", "routing", "history", "link" ], "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "homepage": "https://github.com/reacttraining/react-router#readme", "_id": "react-router@4.0.0", "_shasum": "6532075231f0bb5077c2005c1d417ad6165b3997", "_from": ".", "_npmVersion": "4.0.5", "_nodeVersion": "6.6.0", "_npmUser": { "name": "mjackson", "email": "mjijackson@gmail.com" }, "dist": { "shasum": "6532075231f0bb5077c2005c1d417ad6165b3997", "tarball": "https://registry.npmjs.org/react-router/-/react-router-4.0.0.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-12-west.internal.npmjs.com", "tmp": "tmp/react-router-4.0.0.tgz_1489201137563_0.2314166803844273" } }, "3.0.3": { "name": "react-router", "version": "3.0.3", "description": "A complete routing library for React", "files": [ "*.md", "docs", "es", "lib", "umd" ], "main": "lib/index", "module": "es/index", "jsnext:main": "es/index", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "homepage": "https://github.com/ReactTraining/react-router#readme", "bugs": { "url": "https://github.com/ReactTraining/react-router/issues" }, "scripts": { "build": "npm run build-cjs && npm run build-es", "build-cjs": "rimraf lib && cross-env BABEL_ENV=cjs babel ./modules -d lib --ignore __tests__", "build-es": "rimraf es && cross-env BABEL_ENV=es babel ./modules -d es --ignore __tests__", "build-umd": "cross-env NODE_ENV=development webpack modules/index.js umd/ReactRouter.js", "build-min": "cross-env NODE_ENV=production webpack -p modules/index.js umd/ReactRouter.min.js", "lint": "eslint examples modules scripts tools *.js", "start": "node examples/server.js", "test": "npm run lint && npm run test-node && npm run test-browser", "test-browser": "cross-env NODE_ENV=test karma start", "test-node": "cross-env NODE_ENV=test mocha --compilers js:babel-register tests.node.js" }, "authors": [ "Ryan Florence", "Michael Jackson" ], "license": "MIT", "dependencies": { "history": "^3.0.0", "hoist-non-react-statics": "^1.2.0", "invariant": "^2.2.1", "loose-envify": "^1.2.0", "warning": "^3.0.0" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0" }, "devDependencies": { "babel-cli": "^6.11.4", "babel-core": "^6.13.2", "babel-eslint": "^7.2.1", "babel-loader": "^6.2.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dev-expression": "^0.2.1", "babel-plugin-istanbul": "^4.1.1", "babel-polyfill": "^6.13.0", "babel-preset-es2015": "^6.13.2", "babel-preset-react": "^6.11.1", "babel-preset-stage-1": "^6.13.0", "babel-register": "^6.11.6", "bundle-loader": "^0.5.4", "codecov": "^2.1.0", "cross-env": "^3.2.4", "css-loader": "^0.27.3", "eslint": "^3.2.0", "eslint-config-rackt": "^1.1.1", "eslint-plugin-react": "^6.2.2", "expect": "^1.20.2", "express": "^4.14.0", "express-urlrewrite": "^1.2.0", "gzip-size": "^3.0.0", "karma": "^1.1.2", "karma-browserstack-launcher": "^1.0.1", "karma-chrome-launcher": "^2.0.0", "karma-coverage": "^1.1.1", "karma-mocha": "^1.1.1", "karma-mocha-reporter": "^2.0.5", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^2.0.3", "mocha": "^3.2.0", "pretty-bytes": "^4.0.2", "qs": "^6.2.1", "react": "^15.3.0", "react-addons-css-transition-group": "^15.3.0", "react-addons-test-utils": "^15.3.0", "react-dom": "^15.3.0", "rimraf": "^2.5.4", "style-loader": "^0.16.1", "webpack": "^1.13.1", "webpack-dev-middleware": "^1.6.1" }, "browserify": { "transform": [ "loose-envify" ] }, "tags": [ "react", "router" ], "keywords": [ "react", "react-component", "routing", "route", "routes", "router" ], "gitHead": "756763631edb36537c186f11bec87085cc62073b", "_id": "react-router@3.0.3", "_shasum": "e95304b2e418482e5ecff2699d2b8aae52d5f884", "_from": ".", "_npmVersion": "4.3.0", "_nodeVersion": "6.2.1", "_npmUser": { "name": "timdorr", "email": "timdorr@timdorr.com" }, "dist": { "shasum": "e95304b2e418482e5ecff2699d2b8aae52d5f884", "tarball": "https://registry.npmjs.org/react-router/-/react-router-3.0.3.tgz" }, "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "_npmOperationalInternal": { "host": "packages-18-east.internal.npmjs.com", "tmp": "tmp/react-router-3.0.3.tgz_1490717175570_0.305923699401319" } } }, "readme": "# react-router\n\nDeclarative routing for [React](https://facebook.github.io/react).\n\n## Installation\n\nUsing [npm](https://www.npmjs.com/):\n\n $ npm install --save react-router\n\nThen with a module bundler like [webpack](https://webpack.github.io/), use as you would anything else:\n\n```js\n// using ES6 modules\nimport { Router, Route, Switch } from 'react-router'\n\n// using CommonJS modules\nvar Router = require('react-router').Router\nvar Route = require('react-router').Route\nvar Switch = require('react-router').Switch\n```\n\nThe UMD build is also available on [unpkg](https://unpkg.com):\n\n```html\n\n```\n\nYou can find the library on `window.ReactRouter`.\n\n## Issues\n\nIf you find a bug, please file an issue on [our issue tracker on GitHub](https://github.com/ReactTraining/react-router/issues).\n\n## Credits\n\nReact Router is built and maintained by [React Training](https://reacttraining.com).\n", "maintainers": [ { "name": "mjackson", "email": "mjijackson@gmail.com" }, { "name": "ryanflorence", "email": "rpflorence@gmail.com" }, { "name": "timdorr", "email": "timdorr@timdorr.com" } ], "time": { "modified": "2017-03-30T10:53:38.955Z", "created": "2014-02-02T07:41:16.057Z", "0.0.0": "2014-02-02T07:42:52.110Z", "0.0.1": "2014-07-15T22:10:13.681Z", "0.4.0": "2014-07-24T19:40:13.436Z", "0.4.1": "2014-07-24T21:34:16.019Z", "0.4.2": "2014-07-26T18:22:48.856Z", "0.5.0": "2014-07-26T22:37:43.284Z", "0.5.1": "2014-08-04T22:15:34.267Z", "0.5.2": "2014-08-07T18:24:38.925Z", "0.5.3": "2014-08-26T03:35:12.327Z", "0.6.0": "2014-08-29T20:57:01.616Z", "0.6.1": "2014-08-31T03:19:45.412Z", "0.6.2": "2014-09-02T16:29:26.338Z", "0.7.0": "2014-09-02T16:40:49.653Z", "0.8.0": "2014-10-04T05:39:28.282Z", "0.9.0": "2014-10-06T19:37:57.987Z", "0.9.1": "2014-10-06T20:56:02.760Z", "0.9.2": "2014-10-08T05:34:04.750Z", "0.9.3": "2014-10-08T14:45:26.613Z", "0.9.4": "2014-10-13T19:53:57.019Z", "0.9.5": "2014-10-30T04:51:31.934Z", "0.10.0": "2014-10-30T05:11:07.102Z", "0.10.1": "2014-10-31T15:47:46.602Z", "0.10.2": "2014-10-31T16:24:52.501Z", "0.11.0": "2014-11-22T06:04:01.938Z", "0.11.1": "2014-11-22T15:01:24.870Z", "0.11.2": "2014-11-24T16:57:37.276Z", "0.11.3": "2014-11-27T05:30:40.317Z", "0.11.4": "2014-11-28T16:11:01.416Z", "0.11.5": "2014-12-15T22:34:10.955Z", "0.11.6": "2014-12-17T19:31:33.135Z", "0.12.0": "2015-02-10T20:16:18.606Z", "0.12.1": "2015-02-24T00:06:31.564Z", "0.12.2": "2015-02-24T00:34:28.661Z", "0.12.3": "2015-02-24T21:38:03.903Z", "0.12.4": "2015-02-24T21:53:15.173Z", "0.13.0": "2015-03-20T21:25:52.771Z", "0.13.1": "2015-03-20T22:22:12.285Z", "0.13.2": "2015-03-24T14:22:30.770Z", "0.13.3": "2015-04-29T01:47:21.999Z", "1.0.0-alpha1": "2015-06-12T06:26:30.738Z", "1.0.0-alpha2": "2015-06-12T14:18:19.741Z", "1.0.0-beta1": "2015-06-15T02:24:17.029Z", "1.0.0-beta2": "2015-06-17T13:46:21.982Z", "1.0.0-beta3": "2015-07-01T12:30:11.880Z", "1.0.0-beta4": "2015-08-31T06:19:59.718Z", "1.0.0-rc1": "2015-09-11T21:35:38.963Z", "0.13.4": "2015-10-06T13:13:35.517Z", "1.0.0-rc2": "2015-10-08T05:06:25.909Z", "1.0.0-rc3": "2015-10-08T18:07:28.446Z", "0.13.5": "2015-11-03T06:15:55.593Z", "1.0.0-rc4": "2015-11-03T06:35:08.477Z", "1.0.0": "2015-11-09T21:53:15.685Z", "1.0.1": "2015-12-05T19:53:41.165Z", "1.0.2": "2015-12-08T20:36:03.071Z", "1.0.3": "2015-12-23T18:51:27.655Z", "2.0.0-rc1": "2015-12-30T16:41:35.497Z", "2.0.0-rc2": "2015-12-30T19:41:30.442Z", "2.0.0-rc3": "2015-12-30T23:04:12.218Z", "2.0.9-rc4": "2015-12-30T23:30:55.632Z", "2.0.0-rc4": "2015-12-30T23:40:47.766Z", "2.0.0-rc5": "2016-01-14T19:42:27.832Z", "2.0.0-rc6": "2016-02-05T15:32:41.206Z", "2.0.0": "2016-02-10T05:29:17.484Z", "2.0.1": "2016-03-10T00:19:35.736Z", "2.1.0": "2016-04-11T17:26:24.324Z", "2.1.1": "2016-04-11T21:01:44.641Z", "2.2.0": "2016-04-13T23:40:00.756Z", "2.2.1": "2016-04-14T05:38:11.161Z", "2.2.2": "2016-04-14T16:43:03.733Z", "2.2.4": "2016-04-15T21:08:34.155Z", "2.3.0": "2016-04-18T21:47:44.165Z", "2.4.0": "2016-04-28T17:11:27.410Z", "2.4.1": "2016-05-19T22:41:24.116Z", "3.0.0-alpha.1": "2016-05-19T22:54:53.275Z", "2.5.0": "2016-06-23T02:43:25.441Z", "2.5.1": "2016-06-24T03:59:32.180Z", "2.5.2": "2016-07-01T18:53:12.671Z", "0.13.6": "2016-07-18T20:00:32.313Z", "2.6.0": "2016-07-18T20:04:38.081Z", "3.0.0-alpha.2": "2016-07-19T16:11:09.985Z", "2.6.1": "2016-07-29T23:52:37.057Z", "3.0.0-alpha.3": "2016-08-02T18:05:50.879Z", "2.7.0": "2016-08-20T20:17:58.344Z", "2.8.0": "2016-09-09T22:47:22.379Z", "4.0.0-0": "2016-09-13T14:48:06.123Z", "4.0.0-1": "2016-09-13T15:11:03.329Z", "4.0.0-2": "2016-09-13T15:48:36.654Z", "2.8.1": "2016-09-13T16:32:33.598Z", "3.0.0-beta.1": "2016-09-16T17:40:50.934Z", "4.0.0-alpha.3": "2016-09-17T19:20:16.750Z", "4.0.0-alpha.4": "2016-10-01T04:02:58.027Z", "4.0.0-alpha.5": "2016-10-18T21:48:21.339Z", "3.0.0": "2016-10-25T00:37:58.362Z", "4.0.0-alpha.6": "2016-11-21T02:07:53.825Z", "3.0.1": "2017-01-12T14:34:05.764Z", "3.0.2": "2017-01-18T17:43:40.870Z", "4.0.0-beta.1": "2017-01-30T15:45:57.790Z", "4.0.0-beta.2": "2017-01-30T16:16:16.826Z", "4.0.0-beta.3": "2017-01-30T22:15:46.546Z", "4.0.0-beta.4": "2017-02-02T02:18:16.325Z", "4.0.0-beta.5": "2017-02-07T07:14:37.192Z", "4.0.0-beta.6": "2017-02-14T06:36:54.995Z", "4.0.0-beta.7": "2017-03-03T17:07:09.224Z", "4.0.0-beta.8": "2017-03-08T22:01:04.733Z", "4.0.0": "2017-03-11T02:58:57.837Z", "3.0.3": "2017-03-28T16:06:16.529Z" }, "readmeFilename": "README.md", "repository": { "type": "git", "url": "git+https://github.com/reacttraining/react-router.git" }, "users": { "326060588": true, "fattenap": true, "klyngbaek": true, "zhangyaochun": true, "jakecadams": true, "deedubs": true, "jackson7am": true, "pughpugh": true, "kulakowka": true, "brendanib": true, "csbun": true, "leonardorb": true, "zchee": true, "markmedown": true, "itonyyo": true, "sua": true, "mathieuancelin": true, "markthethomas": true, "gabrielsanterre": true, "kriswallsmith": true, "yatsu": true, "jabbrwcky": true, "ksangita": true, "sergiodxa": true, "yxqme": true, "gilbarbara": true, "italoacasas": true, "moreta": true, "insin": true, "aahz": true, "nicastelo": true, "benji.": true, "wenbing": true, "sume0805": true, "bernardhamann": true, "panlw": true, "philipjc": true, "wkaifang": true, "tuiteraz": true, "allthingssmitty": true, "po": true, "prabhash1785": true, "koulmomo": true, "josejaguirre": true, "urbantumbleweed": true, "junjiansyu": true, "gvn": true, "mwheeler": true, "corintho": true, "chinaqstar": true, "lavir": true, "staraple": true, "vbv": true, "evan2x": true, "jmsherry": true, "benstr": true, "kytart": true, "kerwyn": true, "vialley": true, "orlenka": true, "croogie": true, "artursgirons": true, "lcdss": true, "kay.sackey": true, "nexume": true, "bntzio": true, "shriek": true, "highlanderkev": true, "pixel67": true, "cfleschhut": true, "bcoe": true, "jason-g": true, "sternelee": true, "barclayk": true, "stone_breaker": true, "ratneshn": true, "jmorris": true, "freebird": true, "qmmr": true, "dongguangming": true, "kosoj": true, "sandeepgy11": true, "isman_usoh": true, "entropy-lion": true, "asm2hex": true, "justinjung04": true, "m1nd": true, "kaapex": true, "enuobear": true, "bogdanvlviv": true, "saravntbe": true, "abuddington": true, "kimmohintikka": true, "fabrianibrahim": true, "bpatel": true, "abuelwafa": true, "tim2pin": true, "fsgdez": true, "scotchulous": true, "razr9": true, "john-goldsmith": true, "apopek": true, "brainpoint": true, "wirehive": true, "akarpov": true, "nilz3ro": true, "vpal": true, "enzoferey": true, "pris54": true, "tmurngon": true, "zemgalis": true, "theramey": true, "morogasper": true, "vespaccio": true, "fenrir": true, "rwaness": true, "ezeikel": true, "sebagomez": true, "langri-sha": true, "jasonwang1888": true, "ahyanarizky": true, "e.luna92": true, "princetoad": true, "wearevilla": true, "matiasherranz": true, "norlando": true, "asmattic": true, "vmleon": true, "atulmy": true, "dmbch": true, "kevin-foster": true, "outofcoffee": true, "railites": true, "ablbol": true, "shakakira": true, "filipdanic": true, "scott.m.sarsfield": true, "eimaj": true, "eswat2": true, "suemcnab": true, "kikna": true, "xyyjk": true, "shuoshubao": true, "escapeimagery": true, "hyteer": true, "chinawolf_wyp": true, "serge-nikitin": true, "seierstad": true, "kaufmo": true, "ritsu": true, "ohar": true, "jirqoadai": true, "josokinas": true, "michalskuza": true, "joseph320": true }, "homepage": "https://github.com/reacttraining/react-router#readme", "bugs": { "url": "https://github.com/reacttraining/react-router/issues" }, "license": "MIT", "keywords": [ "react", "router", "route", "routing", "history", "link" ] } ================================================ FILE: test/fixtures/analyze/collect/modules/react-router/expected-source.json ================================================ { "files": { "readmeSize": 968, "testsSize": 31281, "hasChangelog": true }, "badges": [ { "urls": { "original": "https://img.shields.io/npm/v/react-router.svg?style=flat-square", "shields": "https://img.shields.io/npm/v/react-router.svg", "content": "https://img.shields.io/npm/v/react-router.json" }, "info": { "service": "npm", "type": "version", "modifiers": { "type": "v" } } }, { "urls": { "original": "https://img.shields.io/npm/dm/react-router.svg?style=flat-square", "shields": "https://img.shields.io/npm/dm/react-router.svg", "content": "https://img.shields.io/npm/dm/react-router.json" }, "info": { "service": "npm", "type": "downloads", "modifiers": { "type": "dm" } } }, { "urls": { "original": "https://img.shields.io/travis/ReactTraining/react-router/master.svg?style=flat-square", "service": "https://api.travis-ci.org/ReactTraining/react-router.svg?branch=master", "shields": "https://img.shields.io/travis/ReactTraining/react-router/master.svg", "content": "https://img.shields.io/travis/ReactTraining/react-router/master.json" }, "info": { "service": "travis", "type": "build", "modifiers": { "branch": "master" } } }, { "urls": { "original": "https://img.shields.io/npm/v/react-router-dom.svg?style=flat-square", "shields": "https://img.shields.io/npm/v/react-router-dom.svg", "content": "https://img.shields.io/npm/v/react-router-dom.json" }, "info": { "service": "npm", "type": "version", "modifiers": { "type": "v" } } }, { "urls": { "original": "https://img.shields.io/npm/v/react-router-native.svg?style=flat-square", "shields": "https://img.shields.io/npm/v/react-router-native.svg", "content": "https://img.shields.io/npm/v/react-router-native.json" }, "info": { "service": "npm", "type": "version", "modifiers": { "type": "v" } } }, { "urls": { "original": "https://img.shields.io/npm/v/react-router-config.svg?style=flat-square", "shields": "https://img.shields.io/npm/v/react-router-config.svg", "content": "https://img.shields.io/npm/v/react-router-config.json" }, "info": { "service": "npm", "type": "version", "modifiers": { "type": "v" } } } ], "linters": [ "eslint" ] } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/0bfbe2f1c03ff5ed9c3baa91d588e218.headers ================================================ { "statusCode": 404, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:37:46 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "404 Not Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "31", "x-ratelimit-reset": "1462981369", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CBD:ACEA84D:573351C9" }, "url": "https://api.github.com:443/repos/some-org-that-will-never-exist/some-repo-that-will-never-exist/stats/contributors", "time": 838, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/2236c266c85b15946d7ca69cc2e1e091 ================================================ {"message":"Repository access blocked","block":{"reason":"dmca","created_at":"2012-10-03T18:57:04Z","html_url":"https://github.com/github/dmca/blob/master/2011-06-21-sony.markdown"}} ================================================ FILE: test/fixtures/analyze/collect/recorded/github/2236c266c85b15946d7ca69cc2e1e091.headers ================================================ { "statusCode": 451, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 16:21:00 GMT", "content-type": "application/json; charset=utf-8", "content-length": "182", "status": "451", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "50", "x-ratelimit-reset": "1462985625", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-github-request-id": "9E6D5E21:B976:7C969D8:57335BEB" }, "url": "https://api.github.com:443/repos/jimmikaelkael/ps3mca-tool/issues?state=all&per_page=100", "time": 1374, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/24d4b4797edc40614848f01802bbe2b3.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 12:50:47 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "54", "x-ratelimit-reset": "1462973370", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"cef19a6ba327f39c799cf0b2dc553049\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "bae57931a6fe678a3dffe9be8e7819c8", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:CA12:C691318:57332AA7" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/issues?state=all&per_page=100", "time": 821, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/2f87db1cf50593ec3f80835f624ec88a ================================================ ================================================ FILE: test/fixtures/analyze/collect/recorded/github/2f87db1cf50593ec3f80835f624ec88a.headers ================================================ { "statusCode": 204, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "status": "204 No Content", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "37", "x-ratelimit-reset": "1462981369", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "76d9828c7e4f1d910f7ba069e90ce976", "x-github-request-id": "9E6D5E21:2CBC:BB2127D:57334DFA" }, "url": "https://api.github.com:443/repos/Cat4D/Cat4D/stats/contributors", "time": 394, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/3a1a79735cab3e2c46da0f739eccd595.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 12:50:47 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "57", "x-ratelimit-reset": "1462973370", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"005b455fe23290d9b711bf692b824f7e\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "52437fedc85beec8da3449496900fb9a", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:CA11:AC07493:57332AA7" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/stats/contributors", "time": 558, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/3b5e34c45a594730608f6170cacf31fe ================================================ ================================================ FILE: test/fixtures/analyze/collect/recorded/github/3b5e34c45a594730608f6170cacf31fe.headers ================================================ { "statusCode": 204, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "status": "204 No Content", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "39", "x-ratelimit-reset": "1462981369", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "7b641bda7ec2ca7cd9df72d2578baf75", "x-github-request-id": "9E6D5E21:2CBC:BB2127A:57334DFA" }, "url": "https://api.github.com:443/repos/Cat4D/Cat4D/stats/commit_activity", "time": 381, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/3d15804db16c597c23a14946a78b8e1b.headers ================================================ { "statusCode": 404, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:37:46 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "404 Not Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "33", "x-ratelimit-reset": "1462981369", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CB5:20466E3:573351C9" }, "url": "https://api.github.com:443/repos/some-org-that-will-never-exist/some-repo-that-will-never-exist", "time": 845, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/4109ed740591855f9e48eb868f40db86 ================================================ [] ================================================ FILE: test/fixtures/analyze/collect/recorded/github/4109ed740591855f9e48eb868f40db86.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "content-type": "application/json; charset=utf-8", "content-length": "2", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "36", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "\"6f325df05dbadf499a997fc714890f62\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "4c8b2d4732c413f4b9aefe394bd65569", "x-github-request-id": "9E6D5E21:2CB9:594ACBE:57334DFA" }, "url": "https://api.github.com:443/repos/Cat4D/Cat4D/commits/master/statuses", "time": 403, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/5bdd0f1e3c86f0114eb714a2ce79e905 ================================================ {"message":"Repository access blocked","block":{"reason":"dmca","created_at":"2012-10-03T18:57:04Z","html_url":"https://github.com/github/dmca/blob/master/2011-06-21-sony.markdown"}} ================================================ FILE: test/fixtures/analyze/collect/recorded/github/5bdd0f1e3c86f0114eb714a2ce79e905.headers ================================================ { "statusCode": 451, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 16:20:59 GMT", "content-type": "application/json; charset=utf-8", "content-length": "182", "status": "451", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "51", "x-ratelimit-reset": "1462985625", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-github-request-id": "9E6D5E21:B975:59AA49F:57335BEB" }, "url": "https://api.github.com:443/repos/jimmikaelkael/ps3mca-tool/stats/commit_activity", "time": 829, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/6913bcb008bea8f6a0384da9bbae2293.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:31 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "34", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"ed57924a6efa6312be1308defd3bc629\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "318e55760cf7cdb40e61175a4d36cd32", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CBD:ACA5E35:57334DFB" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/commits/master/statuses", "time": 371, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/85c5e5ee4a806e7d405984c325f29007.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "41", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"392df650e828b6f22819d9bf15011108\"", "x-github-media-type": "github.v3", "link": "; rel=\"next\", ; rel=\"last\"", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "bd82876e9bf04990f289ba22f246ee9b", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CB9:594AC52:57334DF9" }, "url": "https://api.github.com:443/repos/strongloop-forks/strong-fork-syslog/commits/master/statuses", "time": 473, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/92a4188d8af9e8c1ff665859b3cd86b8.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:31 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "35", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"e9fbf9a5c2af29ce8abbc649074397e9\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "dc1ce2bfb41810a06c705e83b388572d", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CB8:40F49A8:57334DFA" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/commits/9b77a14a370a6f0b81c9eb58ccade0fad94fe249/statuses", "time": 390, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/9ccf24e28c94543e4ae601d5aa9c8cba.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "44", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"6478e096394aa37ba1770943693374fd\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "bae57931a6fe678a3dffe9be8e7819c8", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CBC:BB211D0:57334DF9" }, "url": "https://api.github.com:443/repos/strongloop-forks/strong-fork-syslog/issues?state=all&per_page=100", "time": 437, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/a3360f53aa71342ad67cded65f6ea1da.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "45", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"20d909aa12a37ef488d94100f1b763bd\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "318e55760cf7cdb40e61175a4d36cd32", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CB4:1BADA68:57334DF9" }, "url": "https://api.github.com:443/repos/strongloop-forks/strong-fork-syslog/stats/commit_activity", "time": 397, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/a7d2cca72c7267fd27fe769cb4d2f611.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 12:50:47 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "56", "x-ratelimit-reset": "1462973370", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"5dbc0e7e2046685d1c395b6171a6952e\"", "last-modified": "Wed, 11 May 2016 12:08:17 GMT", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "76d9828c7e4f1d910f7ba069e90ce976", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:CA11:AC07494:57332AA7" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn", "time": 570, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/afcd15ede3deaa855315f5a1fbc3e61d.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "38", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"80d2bc4d43762fbe8ad210fad4a4cb31\"", "last-modified": "Tue, 08 Jan 2013 15:40:43 GMT", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "139317cebd6caf9cd03889139437f00b", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CBD:ACA5D74:57334DFA" }, "url": "https://api.github.com:443/repos/Cat4D/Cat4D", "time": 382, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/b32671b71119c7fc156f3aa050d1cb12 ================================================ {"message":"Repository access blocked","block":{"reason":"dmca","created_at":"2012-10-03T18:57:04Z","html_url":"https://github.com/github/dmca/blob/master/2011-06-21-sony.markdown"}} ================================================ FILE: test/fixtures/analyze/collect/recorded/github/b32671b71119c7fc156f3aa050d1cb12.headers ================================================ { "statusCode": 451, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 16:20:59 GMT", "content-type": "application/json; charset=utf-8", "content-length": "182", "status": "451", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "54", "x-ratelimit-reset": "1462985625", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-github-request-id": "9E6D5E21:B979:AB4CF45:57335BEB" }, "url": "https://api.github.com:443/repos/jimmikaelkael/ps3mca-tool", "time": 673, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/c23e4492fdaefde5fe60524fab308532.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "42", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"c3d33b63a0cce617295974762ef3888c\"", "last-modified": "Mon, 09 Mar 2015 17:42:13 GMT", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "bd82876e9bf04990f289ba22f246ee9b", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CBD:ACA5CD1:57334DF9" }, "url": "https://api.github.com:443/repos/strongloop-forks/strong-fork-syslog", "time": 469, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/c389930a56f1bad9257ed1490fc32c9b.headers ================================================ { "statusCode": 404, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:37:46 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "404 Not Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "30", "x-ratelimit-reset": "1462981369", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CB9:597ECD8:573351C9" }, "url": "https://api.github.com:443/repos/some-org-that-will-never-exist/some-repo-that-will-never-exist/issues?state=all&per_page=100", "time": 862, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/cc88ef857a3a1492913c066047c5c033.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 12:50:47 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "58", "x-ratelimit-reset": "1462973370", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"eb2e9f751ce528da47a65e008db15cde\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "c6c65e5196703428e7641f7d1e9bc353", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:CA0E:453738C:57332AA7" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/stats/commit_activity", "time": 543, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/d3b7e3ec7ad3c841c45ff000fd77b711.headers ================================================ { "statusCode": 404, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:37:46 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "404 Not Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "29", "x-ratelimit-reset": "1462981369", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CBA:7B24F3C:573351C9" }, "url": "https://api.github.com:443/repos/some-org-that-will-never-exist/some-repo-that-will-never-exist/commits/master/statuses", "time": 832, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/d495e09987382290004f52a8fa39243b ================================================ [] ================================================ FILE: test/fixtures/analyze/collect/recorded/github/d495e09987382290004f52a8fa39243b.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "content-type": "application/json; charset=utf-8", "content-length": "2", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "40", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "\"6f325df05dbadf499a997fc714890f62\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "4c8b2d4732c413f4b9aefe394bd65569", "x-github-request-id": "9E6D5E21:2CB8:40F4973:57334DFA" }, "url": "https://api.github.com:443/repos/Cat4D/Cat4D/issues?state=all&per_page=100", "time": 381, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/dadb0a8973a79e019a2a0affeb248deb.headers ================================================ { "statusCode": 404, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:37:46 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "404 Not Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "32", "x-ratelimit-reset": "1462981369", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CBB:9E79798:573351C9" }, "url": "https://api.github.com:443/repos/some-org-that-will-never-exist/some-repo-that-will-never-exist/stats/commit_activity", "time": 834, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/ebd826ea6dcd2abd0dcc961dd0fe4176 ================================================ {"message":"Repository access blocked","block":{"reason":"dmca","created_at":"2012-10-03T18:57:04Z","html_url":"https://github.com/github/dmca/blob/master/2011-06-21-sony.markdown"}} ================================================ FILE: test/fixtures/analyze/collect/recorded/github/ebd826ea6dcd2abd0dcc961dd0fe4176.headers ================================================ { "statusCode": 451, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 16:20:59 GMT", "content-type": "application/json; charset=utf-8", "content-length": "182", "status": "451", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "52", "x-ratelimit-reset": "1462985625", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-github-request-id": "9E6D5E21:B977:A0F20DC:57335BEB" }, "url": "https://api.github.com:443/repos/jimmikaelkael/ps3mca-tool/stats/contributors", "time": 831, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/ede6348d94fd4d537bcc1e42b050d8ed ================================================ {"message":"Repository access blocked","block":{"reason":"dmca","created_at":"2012-10-03T18:57:04Z","html_url":"https://github.com/github/dmca/blob/master/2011-06-21-sony.markdown"}} ================================================ FILE: test/fixtures/analyze/collect/recorded/github/ede6348d94fd4d537bcc1e42b050d8ed.headers ================================================ { "statusCode": 451, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 16:20:59 GMT", "content-type": "application/json; charset=utf-8", "content-length": "182", "status": "451", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "53", "x-ratelimit-reset": "1462985625", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-github-request-id": "9E6D5E21:B978:BE085E6:57335BEB" }, "url": "https://api.github.com:443/repos/jimmikaelkael/ps3mca-tool/commits/master/statuses", "time": 662, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/github/ff4470aede5dba39b4736419dda38443.headers ================================================ { "statusCode": 200, "headers": { "server": "GitHub.com", "date": "Wed, 11 May 2016 15:21:30 GMT", "content-type": "application/json; charset=utf-8", "transfer-encoding": "chunked", "status": "200 OK", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "43", "x-ratelimit-reset": "1462981369", "cache-control": "public, max-age=60, s-maxage=60", "vary": "Accept, Accept-Encoding", "etag": "W/\"997964ca758e8d492d4d225ff41d14d5\"", "x-github-media-type": "github.v3", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-served-by": "4c8b2d4732c413f4b9aefe394bd65569", "content-encoding": "gzip", "x-github-request-id": "9E6D5E21:2CB5:20353D8:57334DF9" }, "url": "https://api.github.com:443/repos/strongloop-forks/strong-fork-syslog/stats/contributors", "time": 438, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/index/474829c21c2e69d2c0d889af2a714584 ================================================ {"_id":"graphql-shorthand-parser","_rev":"2-8a4abe71d406323ccb96762a491f6a53","name":"graphql-shorthand-parser","description":"Parse GraphQL schemas from shorthand notation","dist-tags":{"latest":"0.0.6"},"author":{"name":"Cameron Hunter","email":"hello@cameronhunter.co.uk"},"time":{"modified":"2016-03-21T22:25:18.701Z","created":"2016-01-18T01:42:44.171Z","0.0.2":"2016-01-18T01:42:44.171Z","0.0.3":"2016-01-18T08:35:21.753Z","0.0.4":"2016-01-18T08:46:25.408Z","0.0.5":"2016-01-18T08:48:31.680Z","0.0.6":"2016-03-21T22:25:18.701Z"},"versions":{"0.0.2":{"name":"graphql-shorthand-parser","version":"0.0.2","description":"Parse GraphQL schemas from shorthand notation","main":"dist/graphql-shorthand.js","scripts":{"build":"rollup -c","pretest":"npm run build","test":"ava","prepublish":"npm run test","preparse":"npm run build","parse":"./bin/parse"},"files":["dist"],"keywords":["graphql"],"author":"Cameron Hunter ","license":"MIT","devDependencies":{"ava":"^0.10.0","babel-preset-es2015-rollup ":"^1.1.1","babel-preset-stage-1":"^6.3.13","rollup":"^0.25.0","rollup-plugin-babel":"^2.3.9","rollup-plugin-pegjs":"^1.0.3"},"readme":"# GraphQL Shorthand Parser\n\n[![Build Status](https://travis-ci.org/cameronhunter/graphql-shorthand-parser.svg?branch=master)](https://travis-ci.org/cameronhunter/graphql-shorthand-parser) [![NPM Version](https://img.shields.io/npm/v/graphql-shorthand-parser.svg)](https://npmjs.org/package/graphql-shorthand-parser) [![License](https://img.shields.io/npm/l/graphql-shorthand-parser.svg)](https://github.com/cameronhunter/graphql-shorthand-parser/blob/master/LICENSE.md)\n\nParse GraphQL shorthand notation into a JSON object that can be used to\nauto-generate schema files.\n\n### Shorthand notation\n```\n// One of the films in the Star Wars Trilogy\nenum Episode {\n NEWHOPE\n EMPIRE\n JEDI\n}\n\n// A character in the Star Wars Trilogy\ninterface Character {\n id: String! // The id of the character\n name: String // The name of the character\n friends: [Character] // The friends of the character, or an empty list if they have none\n appearsIn: [Episode] // Which movies they appear in\n}\n\n// A humanoid creature in the Star Wars universe\ntype Human : Character {\n id: String! // The id of the human\n name: String // The name of the human\n friends: [Character] // The friends of the character, or an empty list if they have none\n appearsIn: [Episode] // Which movies they appear in\n homePlanet: String // The home planet of the human, or null if unknown\n}\n\n// A mechanical creature in the Star Wars universe\ntype Droid : Character {\n id: String! // The id of the droid\n name: String // The name of the droid\n friends: [Character] // The friends of the character, or an empty list if they have none\n appearsIn: [Episode] // Which movies they appear in\n primaryFunction: String // The primary function of the droid\n}\n\ntype Query {\n hero(episode: Episode): Character\n human(id: String!): Human\n droid(id: String!): Droid\n}\n```\n\n### Parsed notation to JSON\n```json\n[\n {\n \"type\": \"ENUM\",\n \"name\": \"Episode\",\n \"description\": \"One of the films in the Star Wars Trilogy\",\n \"values\": [\n \"NEWHOPE\",\n \"EMPIRE\",\n \"JEDI\"\n ]\n },\n {\n \"type\": \"INTERFACE\",\n \"name\": \"Character\",\n \"description\": \"A character in the Star Wars Trilogy\",\n \"fields\": {\n \"id\": {\n \"description\": \"The id of the character\",\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"description\": \"The name of the character\",\n \"type\": \"String\",\n \"required\": false\n },\n \"friends\": {\n \"description\": \"The friends of the character, or an empty list if they have none\",\n \"type\": \"Character\",\n \"required\": false,\n \"array\": true\n },\n \"appearsIn\": {\n \"description\": \"Which movies they appear in\",\n \"type\": \"Episode\",\n \"required\": false,\n \"array\": true\n }\n }\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Human\",\n \"description\": \"A humanoid creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"description\": \"The id of the human\",\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"description\": \"The name of the human\",\n \"type\": \"String\",\n \"required\": false\n },\n \"friends\": {\n \"description\": \"The friends of the character, or an empty list if they have none\",\n \"type\": \"Character\",\n \"required\": false,\n \"array\": true\n },\n \"appearsIn\": {\n \"description\": \"Which movies they appear in\",\n \"type\": \"Episode\",\n \"required\": false,\n \"array\": true\n },\n \"homePlanet\": {\n \"description\": \"The home planet of the human, or null if unknown\",\n \"type\": \"String\",\n \"required\": false\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Droid\",\n \"description\": \"A mechanical creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"description\": \"The id of the droid\",\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"description\": \"The name of the droid\",\n \"type\": \"String\",\n \"required\": false\n },\n \"friends\": {\n \"description\": \"The friends of the character, or an empty list if they have none\",\n \"type\": \"Character\",\n \"required\": false,\n \"array\": true\n },\n \"appearsIn\": {\n \"description\": \"Which movies they appear in\",\n \"type\": \"Episode\",\n \"required\": false,\n \"array\": true\n },\n \"primaryFunction\": {\n \"description\": \"The primary function of the droid\",\n \"type\": \"String\",\n \"required\": false\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Query\",\n \"fields\": {\n \"hero\": {\n \"type\": \"Character\",\n \"required\": false,\n \"args\": {\n \"episode\": {\n \"type\": \"Episode\",\n \"required\": false\n }\n }\n },\n \"human\": {\n \"type\": \"Human\",\n \"required\": false,\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n },\n \"droid\": {\n \"type\": \"Droid\",\n \"required\": false,\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n }\n }\n }\n]\n```","readmeFilename":"README.md","_id":"graphql-shorthand-parser@0.0.2","dist":{"tarball":"https://registry.npmjs.org/graphql-shorthand-parser/-/graphql-shorthand-parser-0.0.2.tgz","shasum":"efb356157e67cca7cd264c5311e8b51010beadb9"},"_npmVersion":"1.3.11","_from":".","_npmUser":{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"},"maintainers":[{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"}],"directories":{}},"0.0.3":{"name":"graphql-shorthand-parser","version":"0.0.3","description":"Parse GraphQL schemas from shorthand notation","main":"dist/graphql-shorthand.js","scripts":{"build":"rollup -c","pretest":"npm run build","test":"ava","prepublish":"npm run test","preparse":"npm run build","parse":"./bin/parse","watch":"npm-watch"},"watch":{"test":{"patterns":["src","test"]}},"files":["dist"],"keywords":["graphql"],"author":"Cameron Hunter ","license":"MIT","devDependencies":{"ava":"^0.10.0","babel-preset-es2015-rollup ":"^1.1.1","babel-preset-stage-1":"^6.3.13","npm-watch":"^0.1.1","rollup":"^0.25.0","rollup-plugin-babel":"^2.3.9","rollup-plugin-pegjs":"^1.0.3","tap-diff":"^0.1.1"},"readme":"# GraphQL Shorthand Parser\n\n[![Build Status](https://travis-ci.org/cameronhunter/graphql-shorthand-parser.svg?branch=master)](https://travis-ci.org/cameronhunter/graphql-shorthand-parser) [![NPM Version](https://img.shields.io/npm/v/graphql-shorthand-parser.svg)](https://npmjs.org/package/graphql-shorthand-parser) [![License](https://img.shields.io/npm/l/graphql-shorthand-parser.svg)](https://github.com/cameronhunter/graphql-shorthand-parser/blob/master/LICENSE.md)\n\nParse GraphQL shorthand notation into a JSON object that can be used to\nauto-generate schema files.\n\n### Shorthand notation\n```\n// One of the films in the Star Wars Trilogy\nenum Episode {\n NEWHOPE\n EMPIRE\n JEDI\n}\n\n// A character in the Star Wars Trilogy\ninterface Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n}\n\n// A humanoid creature in the Star Wars universe\ntype Human : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n homePlanet: String\n}\n\n// A mechanical creature in the Star Wars universe\ntype Droid : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n primaryFunction: String\n}\n\ntype Query {\n hero(episode: Episode): Character\n human(id: String!): Human\n droid(id: String!): Droid\n}\n```\n\n### Parsed notation to JSON\n```json\n[\n {\n \"type\": \"ENUM\",\n \"name\": \"Episode\",\n \"description\": \"One of the films in the Star Wars Trilogy\",\n \"values\": [\n \"NEWHOPE\",\n \"EMPIRE\",\n \"JEDI\"\n ]\n },\n {\n \"type\": \"INTERFACE\",\n \"name\": \"Character\",\n \"description\": \"A character in the Star Wars Trilogy\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n }\n }\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Human\",\n \"description\": \"A humanoid creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"homePlanet\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Droid\",\n \"description\": \"A mechanical creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"primaryFunction\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Query\",\n \"fields\": {\n \"hero\": {\n \"type\": \"Character\",\n \"args\": {\n \"episode\": {\n \"type\": \"Episode\"\n }\n }\n },\n \"human\": {\n \"type\": \"Human\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n },\n \"droid\": {\n \"type\": \"Droid\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n }\n }\n }\n]\n```","readmeFilename":"README.md","_id":"graphql-shorthand-parser@0.0.3","dist":{"tarball":"https://registry.npmjs.org/graphql-shorthand-parser/-/graphql-shorthand-parser-0.0.3.tgz","shasum":"58ddc9123dc6cdd77e85143e08db00873c197aed"},"_npmVersion":"1.3.11","_from":".","_npmUser":{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"},"maintainers":[{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"}],"directories":{}},"0.0.4":{"name":"graphql-shorthand-parser","version":"0.0.4","description":"Parse GraphQL schemas from shorthand notation","main":"dist/graphql-shorthand.js","scripts":{"build":"rollup -c","pretest":"npm run build","test":"ava --tap | tap-diff","prepublish":"npm run test","preparse":"npm run build","parse":"./bin/parse"},"files":["dist"],"keywords":["graphql"],"author":"Cameron Hunter ","license":"MIT","devDependencies":{"ava":"^0.10.0","babel-preset-es2015-rollup":"^1.1.1","babel-preset-stage-1":"^6.3.13","npm-watch":"^0.1.1","rollup":"^0.25.0","rollup-plugin-babel":"^2.3.9","rollup-plugin-pegjs":"^1.0.3","tap-diff":"^0.1.1"},"readme":"# GraphQL Shorthand Parser\n\n[![Build Status](https://travis-ci.org/cameronhunter/graphql-shorthand-parser.svg?branch=master)](https://travis-ci.org/cameronhunter/graphql-shorthand-parser) [![NPM Version](https://img.shields.io/npm/v/graphql-shorthand-parser.svg)](https://npmjs.org/package/graphql-shorthand-parser) [![License](https://img.shields.io/npm/l/graphql-shorthand-parser.svg)](https://github.com/cameronhunter/graphql-shorthand-parser/blob/master/LICENSE.md)\n\nParse GraphQL shorthand notation into a JSON object that can be used to\nauto-generate schema files.\n\n### Shorthand notation\n```\n// One of the films in the Star Wars Trilogy\nenum Episode {\n NEWHOPE\n EMPIRE\n JEDI\n}\n\n// A character in the Star Wars Trilogy\ninterface Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n}\n\n// A humanoid creature in the Star Wars universe\ntype Human : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n homePlanet: String\n}\n\n// A mechanical creature in the Star Wars universe\ntype Droid : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n primaryFunction: String\n}\n\ntype Query {\n hero(episode: Episode): Character\n human(id: String!): Human\n droid(id: String!): Droid\n}\n```\n\n### Parsed notation to JSON\n```json\n[\n {\n \"type\": \"ENUM\",\n \"name\": \"Episode\",\n \"description\": \"One of the films in the Star Wars Trilogy\",\n \"values\": [\n \"NEWHOPE\",\n \"EMPIRE\",\n \"JEDI\"\n ]\n },\n {\n \"type\": \"INTERFACE\",\n \"name\": \"Character\",\n \"description\": \"A character in the Star Wars Trilogy\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n }\n }\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Human\",\n \"description\": \"A humanoid creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"homePlanet\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Droid\",\n \"description\": \"A mechanical creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"primaryFunction\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Query\",\n \"fields\": {\n \"hero\": {\n \"type\": \"Character\",\n \"args\": {\n \"episode\": {\n \"type\": \"Episode\"\n }\n }\n },\n \"human\": {\n \"type\": \"Human\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n },\n \"droid\": {\n \"type\": \"Droid\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n }\n }\n }\n]\n```","readmeFilename":"README.md","_id":"graphql-shorthand-parser@0.0.4","dist":{"tarball":"https://registry.npmjs.org/graphql-shorthand-parser/-/graphql-shorthand-parser-0.0.4.tgz","shasum":"6d4ec1b31ed793d48ae0e8a5f901df26b124b16a"},"_npmVersion":"1.3.11","_from":".","_npmUser":{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"},"maintainers":[{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"}],"directories":{}},"0.0.5":{"name":"graphql-shorthand-parser","version":"0.0.5","description":"Parse GraphQL schemas from shorthand notation","main":"dist/graphql-shorthand.js","scripts":{"build":"rollup -c","pretest":"npm run build","test":"ava --tap | tap-diff","prepublish":"npm run test","preparse":"npm run build","parse":"./bin/parse"},"files":["dist"],"keywords":["graphql"],"author":"Cameron Hunter ","license":"MIT","devDependencies":{"ava":"^0.10.0","babel-preset-es2015-rollup":"^1.1.1","babel-preset-stage-1":"^6.3.13","rollup":"^0.25.0","rollup-plugin-babel":"^2.3.9","rollup-plugin-pegjs":"^1.0.3","tap-diff":"^0.1.1"},"readme":"# GraphQL Shorthand Parser\n\n[![Build Status](https://travis-ci.org/cameronhunter/graphql-shorthand-parser.svg?branch=master)](https://travis-ci.org/cameronhunter/graphql-shorthand-parser) [![NPM Version](https://img.shields.io/npm/v/graphql-shorthand-parser.svg)](https://npmjs.org/package/graphql-shorthand-parser) [![License](https://img.shields.io/npm/l/graphql-shorthand-parser.svg)](https://github.com/cameronhunter/graphql-shorthand-parser/blob/master/LICENSE.md)\n\nParse GraphQL shorthand notation into a JSON object that can be used to\nauto-generate schema files.\n\n### Shorthand notation\n```\n// One of the films in the Star Wars Trilogy\nenum Episode {\n NEWHOPE\n EMPIRE\n JEDI\n}\n\n// A character in the Star Wars Trilogy\ninterface Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n}\n\n// A humanoid creature in the Star Wars universe\ntype Human : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n homePlanet: String\n}\n\n// A mechanical creature in the Star Wars universe\ntype Droid : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n primaryFunction: String\n}\n\ntype Query {\n hero(episode: Episode): Character\n human(id: String!): Human\n droid(id: String!): Droid\n}\n```\n\n### Parsed notation to JSON\n```json\n[\n {\n \"type\": \"ENUM\",\n \"name\": \"Episode\",\n \"description\": \"One of the films in the Star Wars Trilogy\",\n \"values\": [\n \"NEWHOPE\",\n \"EMPIRE\",\n \"JEDI\"\n ]\n },\n {\n \"type\": \"INTERFACE\",\n \"name\": \"Character\",\n \"description\": \"A character in the Star Wars Trilogy\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n }\n }\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Human\",\n \"description\": \"A humanoid creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"homePlanet\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Droid\",\n \"description\": \"A mechanical creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"primaryFunction\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Query\",\n \"fields\": {\n \"hero\": {\n \"type\": \"Character\",\n \"args\": {\n \"episode\": {\n \"type\": \"Episode\"\n }\n }\n },\n \"human\": {\n \"type\": \"Human\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n },\n \"droid\": {\n \"type\": \"Droid\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n }\n }\n }\n]\n```","readmeFilename":"README.md","_id":"graphql-shorthand-parser@0.0.5","dist":{"tarball":"https://registry.npmjs.org/graphql-shorthand-parser/-/graphql-shorthand-parser-0.0.5.tgz","shasum":"2c95a4e253c4b4c0813514f92895d5549d9871e6"},"_npmVersion":"1.3.11","_from":".","_npmUser":{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"},"maintainers":[{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"}],"directories":{}},"0.0.6":{"name":"graphql-shorthand-parser","version":"0.0.6","description":"Parse GraphQL schemas from shorthand notation","main":"dist/graphql-shorthand.js","scripts":{"build":"rollup -c","pretest":"npm run build","test":"ava --tap | tap-diff","postversion":"git push && git push --tags","prepublish":"npm run test","preparse":"npm run build","parse":"./bin/parse"},"files":["dist"],"keywords":["graphql"],"author":"Cameron Hunter ","license":"MIT","devDependencies":{"ava":"^0.13.0","babel-preset-es2015-rollup":"^1.1.1","babel-preset-stage-1":"^6.3.13","rollup":"^0.25.0","rollup-plugin-babel":"^2.3.9","rollup-plugin-pegjs":"^2.0.0","tap-diff":"^0.1.1"},"readme":"# GraphQL Shorthand Parser\n\n[![Build Status](https://travis-ci.org/cameronhunter/graphql-shorthand-parser.svg?branch=master)](https://travis-ci.org/cameronhunter/graphql-shorthand-parser) [![NPM Version](https://img.shields.io/npm/v/graphql-shorthand-parser.svg)](https://npmjs.org/package/graphql-shorthand-parser) [![License](https://img.shields.io/npm/l/graphql-shorthand-parser.svg)](https://github.com/cameronhunter/graphql-shorthand-parser/blob/master/LICENSE.md)\n\nParse GraphQL shorthand notation into a JSON object that can be used to\nauto-generate schema files.\n\n### Shorthand notation\n```\n// One of the films in the Star Wars Trilogy\nenum Episode {\n NEWHOPE\n EMPIRE\n JEDI\n}\n\n// A character in the Star Wars Trilogy\ninterface Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n}\n\n// A humanoid creature in the Star Wars universe\ntype Human : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n homePlanet: String\n}\n\n// A mechanical creature in the Star Wars universe\ntype Droid : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n primaryFunction: String\n}\n\ntype Query {\n hero(episode: Episode): Character\n human(id: String!): Human\n droid(id: String!): Droid\n}\n```\n\n### Parsed notation to JSON\n```json\n[\n {\n \"type\": \"ENUM\",\n \"name\": \"Episode\",\n \"description\": \"One of the films in the Star Wars Trilogy\",\n \"values\": [\n \"NEWHOPE\",\n \"EMPIRE\",\n \"JEDI\"\n ]\n },\n {\n \"type\": \"INTERFACE\",\n \"name\": \"Character\",\n \"description\": \"A character in the Star Wars Trilogy\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n }\n }\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Human\",\n \"description\": \"A humanoid creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"homePlanet\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Droid\",\n \"description\": \"A mechanical creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"primaryFunction\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Query\",\n \"fields\": {\n \"hero\": {\n \"type\": \"Character\",\n \"args\": {\n \"episode\": {\n \"type\": \"Episode\"\n }\n }\n },\n \"human\": {\n \"type\": \"Human\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n },\n \"droid\": {\n \"type\": \"Droid\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n }\n }\n }\n]\n```","readmeFilename":"README.md","_id":"graphql-shorthand-parser@0.0.6","dist":{"tarball":"https://registry.npmjs.org/graphql-shorthand-parser/-/graphql-shorthand-parser-0.0.6.tgz","shasum":"7b65fe0fe822fd3bd8d1ebd42b2f03d20104321b"},"_npmVersion":"1.3.11","_from":".","_npmUser":{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"},"maintainers":[{"name":"cameronhunter","email":"hello@cameronhunter.co.uk"}],"directories":{}}},"readme":"# GraphQL Shorthand Parser\n\n[![Build Status](https://travis-ci.org/cameronhunter/graphql-shorthand-parser.svg?branch=master)](https://travis-ci.org/cameronhunter/graphql-shorthand-parser) [![NPM Version](https://img.shields.io/npm/v/graphql-shorthand-parser.svg)](https://npmjs.org/package/graphql-shorthand-parser) [![License](https://img.shields.io/npm/l/graphql-shorthand-parser.svg)](https://github.com/cameronhunter/graphql-shorthand-parser/blob/master/LICENSE.md)\n\nParse GraphQL shorthand notation into a JSON object that can be used to\nauto-generate schema files.\n\n### Shorthand notation\n```\n// One of the films in the Star Wars Trilogy\nenum Episode {\n NEWHOPE\n EMPIRE\n JEDI\n}\n\n// A character in the Star Wars Trilogy\ninterface Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n}\n\n// A humanoid creature in the Star Wars universe\ntype Human : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n homePlanet: String\n}\n\n// A mechanical creature in the Star Wars universe\ntype Droid : Character {\n id: String!\n name: String\n friends: [Character]\n appearsIn: [Episode]\n primaryFunction: String\n}\n\ntype Query {\n hero(episode: Episode): Character\n human(id: String!): Human\n droid(id: String!): Droid\n}\n```\n\n### Parsed notation to JSON\n```json\n[\n {\n \"type\": \"ENUM\",\n \"name\": \"Episode\",\n \"description\": \"One of the films in the Star Wars Trilogy\",\n \"values\": [\n \"NEWHOPE\",\n \"EMPIRE\",\n \"JEDI\"\n ]\n },\n {\n \"type\": \"INTERFACE\",\n \"name\": \"Character\",\n \"description\": \"A character in the Star Wars Trilogy\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n }\n }\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Human\",\n \"description\": \"A humanoid creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"homePlanet\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Droid\",\n \"description\": \"A mechanical creature in the Star Wars universe\",\n \"fields\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n },\n \"name\": {\n \"type\": \"String\"\n },\n \"friends\": {\n \"type\": \"Character\",\n \"list\": true\n },\n \"appearsIn\": {\n \"type\": \"Episode\",\n \"list\": true\n },\n \"primaryFunction\": {\n \"type\": \"String\"\n }\n },\n \"interfaces\": [\n \"Character\"\n ]\n },\n {\n \"type\": \"TYPE\",\n \"name\": \"Query\",\n \"fields\": {\n \"hero\": {\n \"type\": \"Character\",\n \"args\": {\n \"episode\": {\n \"type\": \"Episode\"\n }\n }\n },\n \"human\": {\n \"type\": \"Human\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n },\n \"droid\": {\n \"type\": \"Droid\",\n \"args\": {\n \"id\": {\n \"type\": \"String\",\n \"required\": true\n }\n }\n }\n }\n }\n]\n```"} ================================================ FILE: test/fixtures/analyze/collect/recorded/index/474829c21c2e69d2c0d889af2a714584.headers ================================================ { "statusCode": 200, "headers": { "server": "CouchDB/1.5.0 (Erlang OTP/R16B03)", "etag": "\"2-8a4abe71d406323ccb96762a491f6a53\"", "date": "Fri, 13 May 2016 18:07:13 GMT", "content-type": "application/json", "content-length": "31773", "cache-control": "must-revalidate" }, "url": "https://skimdb.npmjs.com:443/registry/graphql-shorthand-parser", "time": 783, "request": { "method": "GET", "headers": { "content-type": "application/json", "accept": "application/json", "host": "skimdb.npmjs.com" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/index/ae18615611dfb3f32feaf1c607df7bac ================================================ {"_id":"bower","_rev":"243-ee588285b884979435a37fcca5d73613","name":"bower","description":"The browser package manager","dist-tags":{"latest":"1.7.9","beta":"1.7.9"},"versions":{"0.1.0":{"name":"bower","description":"The browser package manager.","version":"0.1.0","author":{"name":"some twitter nerds"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/MIT"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">= 0.8.0"},"dependencies":{"tmp":"latest","vows":"latest","glob":"latest","nopt":"latest","archy":"latest","async":"latest","colors":"latest","rimraf":"latest","mkdirp":"latest","semver":"latest","request":"latest","fstream":"latest","hogan.js":"latest","underscore":"latest","read-package-json":"latest"},"devDependencies":{"mocha":"latest"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.1.0","dist":{"shasum":"ced4fa98f3f4074f297c3130dd052f4ddf4f6876","tarball":"http://registry.npmjs.org/bower/-/bower-0.1.0.tgz"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"}],"directories":{}},"0.1.2":{"name":"bower","description":"The browser package manager.","version":"0.1.2","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">= 0.8.0"},"dependencies":{"tmp":"latest","vows":"latest","glob":"latest","nopt":"latest","archy":"latest","async":"latest","colors":"latest","rimraf":"latest","mkdirp":"latest","semver":"latest","request":"latest","fstream":"latest","hogan.js":"latest","lodash":"latest","read-package-json":"latest"},"scripts":{"test":"mocha -R spec -t 10000"},"devDependencies":{"mocha":"latest"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.1.2","dist":{"shasum":"b831789c113db329b791e0f24bed4ae747d785a8","tarball":"http://registry.npmjs.org/bower/-/bower-0.1.2.tgz"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"}],"directories":{}},"0.1.3":{"name":"bower","description":"The browser package manager.","version":"0.1.3","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">= 0.8.0"},"dependencies":{"tmp":"latest","vows":"latest","glob":"latest","nopt":"latest","archy":"latest","async":"latest","colors":"latest","rimraf":"latest","mkdirp":"latest","semver":"latest","request":"latest","fstream":"latest","hogan.js":"latest","lodash":"latest","read-package-json":"latest"},"scripts":{"test":"mocha -R spec -t 10000"},"devDependencies":{"mocha":"latest"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.1.3","dist":{"shasum":"720d188397b67753503009c594fbe6c2719a9e72","tarball":"http://registry.npmjs.org/bower/-/bower-0.1.3.tgz"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"}],"directories":{}},"0.2.0":{"name":"bower","description":"The browser package manager.","version":"0.2.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">= 0.8.0"},"dependencies":{"tmp":"latest","vows":"latest","glob":"latest","nopt":"latest","archy":"latest","async":"latest","colors":"latest","rimraf":"latest","mkdirp":"latest","semver":"latest","request":"latest","fstream":"latest","hogan.js":"latest","lodash":"latest","read-package-json":"latest"},"scripts":{"test":"mocha -R spec -t 10000"},"devDependencies":{"mocha":"latest","nock":"latest"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.2.0","dist":{"shasum":"ed7f0806da817d1f1f532cf92c921b0f45f87d62","tarball":"http://registry.npmjs.org/bower/-/bower-0.2.0.tgz"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"}],"directories":{}},"0.3.0":{"name":"bower","description":"The browser package manager.","version":"0.3.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">= 0.8.0"},"dependencies":{"tmp":"latest","vows":"latest","glob":"latest","nopt":"latest","archy":"latest","async":"latest","colors":"latest","rimraf":"latest","mkdirp":"latest","semver":"latest","request":"latest","fstream":"latest","hogan.js":"latest","lodash":"latest","read-package-json":"latest","stable":"latest","rc":"latest"},"scripts":{"test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"latest","nock":"latest"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.3.0","dist":{"shasum":"d5497e85fbedd9efeba2d37dcce139a1ec8f988d","tarball":"http://registry.npmjs.org/bower/-/bower-0.3.0.tgz"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"}],"directories":{}},"0.3.1":{"name":"bower","description":"The browser package manager.","version":"0.3.1","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">= 0.8.0"},"dependencies":{"tmp":"latest","vows":"latest","glob":"latest","nopt":"latest","archy":"latest","async":"latest","colors":"latest","rimraf":"latest","mkdirp":"latest","semver":"latest","request":"latest","fstream":"latest","hogan.js":"latest","lodash":"latest","read-package-json":"latest","stable":"latest","rc":"latest"},"scripts":{"test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"latest","nock":"latest"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.3.1","dist":{"shasum":"15fc958e83fc8348f4424890ca5d43cc3a75811d","tarball":"http://registry.npmjs.org/bower/-/bower-0.3.1.tgz"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"}],"directories":{}},"0.3.2":{"name":"bower","description":"The browser package manager.","version":"0.3.2","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.15","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6"},"scripts":{"test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.3.2","dist":{"shasum":"8553116cc03b3bf14e925125eee9b2bf355b67d5","tarball":"http://registry.npmjs.org/bower/-/bower-0.3.2.tgz"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"}],"directories":{}},"0.4.0":{"name":"bower","description":"The browser package manager.","version":"0.4.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.15","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.4.0","dist":{"shasum":"48718e7951a318fe745d0a1d965ff70521096e4d","tarball":"http://registry.npmjs.org/bower/-/bower-0.4.0.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.5.0":{"name":"bower","description":"The browser package manager.","version":"0.5.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.15","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.5.0","dist":{"shasum":"60615ec399b30f17afbc779ceb1d8884120b235e","tarball":"http://registry.npmjs.org/bower/-/bower-0.5.0.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.5.1":{"name":"bower","description":"The browser package manager.","version":"0.5.1","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.15","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.5.1","dist":{"shasum":"b2a54b26434b15fa4fd3927181cd88abac2da1d7","tarball":"http://registry.npmjs.org/bower/-/bower-0.5.1.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.0":{"name":"bower","description":"The browser package manager.","version":"0.6.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.15","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.0","dist":{"shasum":"09a0bbc905e2fec6f009e7687b4986a4aaefc9c8","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.0.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.1":{"name":"bower","description":"The browser package manager.","version":"0.6.1","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.1","dist":{"shasum":"2be10ecf4f0dfd14688da81e28a151e2c8fa88a4","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.1.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.2":{"name":"bower","description":"The browser package manager.","version":"0.6.2","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.2","dist":{"shasum":"663fd000d2d73c394531379d173d202ae7e0c7d1","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.2.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.3":{"name":"bower","description":"The browser package manager.","version":"0.6.3","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.3","dist":{"shasum":"85f919e0c4d72e19335ba0cea72e7a890110f616","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.3.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.4":{"name":"bower","description":"The browser package manager.","version":"0.6.4","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.4","dist":{"shasum":"4812516aed2ba064e3c41f40d5ac63ce8b821996","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.4.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.5":{"name":"bower","description":"The browser package manager.","version":"0.6.5","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.5","dist":{"shasum":"29732f5312cdf0d5612e549719b5b987e59c857b","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.5.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.6":{"name":"bower","description":"The browser package manager.","version":"0.6.6","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.6","dist":{"shasum":"6ac23c4f13bf7621d396ecfe37a8429cf4c23038","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.6.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.7":{"name":"bower","description":"The browser package manager.","version":"0.6.7","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.7","dist":{"shasum":"393bf6d3b16679cadf2e60d554f52d3517f2663b","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.7.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.6.8":{"name":"bower","description":"The browser package manager.","version":"0.6.8","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.6.8","dist":{"shasum":"6f7266a1a9929947c66b87045094137b3e1e65b6","tarball":"http://registry.npmjs.org/bower/-/bower-0.6.8.tgz"},"_npmVersion":"1.1.65","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.7.0":{"name":"bower","description":"The browser package manager.","version":"0.7.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"postinstall":"node cleanup","test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.7.0","dist":{"shasum":"9acd8601a414c681248cb0a8a233276d9e8bb20a","tarball":"http://registry.npmjs.org/bower/-/bower-0.7.0.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.7.1":{"name":"bower","description":"The browser package manager.","version":"0.7.1","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","vows":"~0.6.4","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.1.22","colors":"~0.6.0-1","rimraf":"~2.0.2","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~0.9.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.0.4","tar":"~0.1.13"},"scripts":{"test":"mocha -R spec -t 20000"},"devDependencies":{"mocha":"~1.6.0","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.7.1","dist":{"shasum":"39ab3552fdd906bc6b8fbbf4218a9dd06b4c20b6","tarball":"http://registry.npmjs.org/bower/-/bower-0.7.1.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.8.0":{"name":"bower","description":"The browser package manager.","version":"0.8.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","rimraf":"~2.1.4","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~1.0.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"~0.1.3","tar":"~0.1.13","promptly":"~0.1.0"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.8.0","dist":{"shasum":"4ae1c4160e2598e3336a0ff3dbce7e1c6922dca0","tarball":"http://registry.npmjs.org/bower/-/bower-0.8.0.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.8.1":{"name":"bower","description":"The browser package manager.","version":"0.8.1","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","rimraf":"~2.1.4","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~1.0.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"~0.1.3","tar":"~0.1.13","promptly":"~0.1.0"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.8.1","dist":{"shasum":"a59e6059bcc4ce7e63123ec7ee039a28d3d6e1cc","tarball":"http://registry.npmjs.org/bower/-/bower-0.8.1.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.8.2":{"name":"bower","description":"The browser package manager.","version":"0.8.2","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","rimraf":"~2.0.3","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~1.0.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"~0.1.3","tar":"~0.1.13","promptly":"~0.1.0"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.8.2","dist":{"shasum":"bc0227ca9c6c9a2b091f854c6ce79580d93a7bc7","tarball":"http://registry.npmjs.org/bower/-/bower-0.8.2.tgz"},"_npmVersion":"1.1.69","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.8.3":{"name":"bower","description":"The browser package manager.","version":"0.8.3","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","rimraf":"~2.0.3","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~1.0.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"~0.1.3","tar":"~0.1.13","promptly":"~0.1.0"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.8.3","dist":{"shasum":"5d01bcc17aa1caed96e2f81674a88e1c272f15cd","tarball":"http://registry.npmjs.org/bower/-/bower-0.8.3.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.8.4":{"name":"bower","description":"The browser package manager.","version":"0.8.4","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","rimraf":"~2.0.3","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~1.0.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"~0.1.3","tar":"~0.1.13","promptly":"~0.1.0"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.8.4","dist":{"shasum":"227a25dfd55346b89c4f374a4a454ba08029a48f","tarball":"http://registry.npmjs.org/bower/-/bower-0.8.4.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.8.5":{"name":"bower","description":"The browser package manager.","version":"0.8.5","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","rimraf":"~2.0.3","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~1.0.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"~0.1.3","tar":"~0.1.13","promptly":"~0.1.0"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.8.5","dist":{"shasum":"8c95a3f4e4f3fc717d398283db919d1ad4b1df66","tarball":"http://registry.npmjs.org/bower/-/bower-0.8.5.tgz"},"_from":".","_npmVersion":"1.2.11","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.8.6":{"name":"bower","description":"The browser package manager.","version":"0.8.6","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.16","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","rimraf":"~2.0.3","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~1.0.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.1.4","tar":"~0.1.13","promptly":"~0.1.0"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.13.5"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.8.6","dist":{"shasum":"bb75f87c513626e80f52eb0df11bf37004af8b18","tarball":"http://registry.npmjs.org/bower/-/bower-0.8.6.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.9.0":{"name":"bower","description":"The browser package manager.","version":"0.9.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/twitter/bower/blob/master/LICENSE"}],"main":"lib","homepage":"http://twitter.github.com/bower","engines":{"node":">=0.8.0"},"dependencies":{"tmp":"~0.0.17","glob":"~3.1.14","nopt":"~2.0.0","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","rimraf":"~2.0.3","mkdirp":"~0.3.4","semver":"~1.1.0","request":"~2.11.4","fstream":"~0.1.19","hogan.js":"~2.0.0","lodash":"~1.0.1","read-package-json":"~0.1.8","stable":"~0.1.2","rc":"~0.0.6","unzip":"0.1.7","tar":"~0.1.13","promptly":"~0.1.0","abbrev":"~1.0.4","update-notifier":"~0.1.3"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.17.3"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.9.0","dist":{"shasum":"ee64f254ec9ff03324e075654a3d5e12f2b0089e","tarball":"http://registry.npmjs.org/bower/-/bower-0.9.0.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.9.1":{"name":"bower","description":"The browser package manager.","version":"0.9.1","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io/","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","fstream":"~0.1.19","glob":"~3.1.14","hogan.js":"~2.0.0","lodash":"~1.0.1","mkdirp":"~0.3.4","nopt":"~2.0.0","promptly":"~0.1.0","rc":"~0.0.6","read-package-json":"~0.1.8","request":"~2.11.4","rimraf":"~2.0.3","semver":"~1.1.0","stable":"~0.1.2","tar":"~0.1.13","tmp":"~0.0.17","unzip":"0.1.7","update-notifier":"~0.1.3"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.17.3"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.9.1","dist":{"shasum":"d10db97807f2e0946c73b960e71df18b008ec885","tarball":"http://registry.npmjs.org/bower/-/bower-0.9.1.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.9.2":{"name":"bower","description":"The browser package manager.","version":"0.9.2","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io/","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","fstream":"~0.1.19","glob":"~3.1.14","hogan.js":"~2.0.0","lodash":"~1.0.1","mkdirp":"~0.3.4","nopt":"~2.0.0","promptly":"~0.1.0","rc":"~0.0.6","read-package-json":"~0.1.8","request":"~2.11.4","rimraf":"~2.0.3","semver":"~1.1.0","stable":"~0.1.2","tar":"~0.1.13","tmp":"~0.0.17","unzip":"0.1.7","update-notifier":"~0.1.3"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.17.3"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"_id":"bower@0.9.2","dist":{"shasum":"cafc6209502ca558b110fe6f30465143a469b7f3","tarball":"http://registry.npmjs.org/bower/-/bower-0.9.2.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"0.10.0":{"name":"bower","description":"The browser package manager.","version":"0.10.0","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io/","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","async":"~0.2.5","colors":"~0.6.0-1","fstream":"~0.1.19","glob":"~3.1.14","hogan.js":"~2.0.0","lodash":"~1.0.1","mkdirp":"~0.3.4","nopt":"~2.0.0","promptly":"~0.1.0","rc":"~0.3.0","read-package-json":"~0.1.8","request":"~2.11.4","rimraf":"~2.0.3","semver":"~2.0.7","stable":"~0.1.2","tar":"~0.1.13","tmp":"~0.0.20","unzip":"0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"scripts":{"test":"mocha --reporter spec --timeout 40000"},"devDependencies":{"mocha":"~1.8.1","nock":"~0.17.3"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@0.10.0","dist":{"shasum":"d62ebf3c47644f6875604c68184a21b90f29e973","tarball":"http://registry.npmjs.org/bower/-/bower-0.10.0.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"1.0.0":{"name":"bower","version":"1.0.0","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"archy":"0.0.2","abbrev":"~1.0.4","bower-config":"~0.1.0","bower-endpoint-parser":"~0.1.0","bower-json":"~0.1.0","bower-logger":"~0.1.0","bower-registry-client":"~0.1.0","chmodr":"~0.1.0","colors":"~0.6.0-1","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.22.0","request-progress":"~0.2.0","request-replay":"~0.1.2","rimraf":"~2.2.0","semver":"~2.0.8","stringify-object":"~0.1.4","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-execute":"~0.1.4","grunt-shell":"~0.3.0","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.0.0","dist":{"shasum":"049eebd141f7859cf6dded0818b45be250a6b1a2","tarball":"http://registry.npmjs.org/bower/-/bower-1.0.0.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"1.0.1":{"name":"bower","version":"1.0.1","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"archy":"0.0.2","abbrev":"~1.0.4","bower-config":"~0.2.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.2.0","bower-logger":"~0.1.0","bower-registry-client":"~0.1.1","chmodr":"~0.1.0","colors":"~0.6.0-1","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.25.0","request-progress":"~0.2.0","request-replay":"~0.1.2","rimraf":"~2.2.0","semver":"~2.0.8","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-execute":"~0.1.4","grunt-shell":"~0.3.0","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.0.1","dist":{"shasum":"2878db9554588fa3ada335c0308467a7ac4f4cab","tarball":"http://registry.npmjs.org/bower/-/bower-1.0.1.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"1.0.2":{"name":"bower","version":"1.0.2","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"archy":"0.0.2","abbrev":"~1.0.4","bower-config":"~0.2.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.2.0","bower-logger":"~0.1.0","bower-registry-client":"~0.1.1","chmodr":"~0.1.0","colors":"~0.6.0-1","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.25.0","request-progress":"~0.2.0","request-replay":"~0.1.2","rimraf":"~2.2.0","semver":"~2.0.8","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-execute":"~0.1.4","grunt-shell":"~0.3.0","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.0.2","dist":{"shasum":"48e23891ecdcb299dca8c86b29a18bd96a391456","tarball":"http://registry.npmjs.org/bower/-/bower-1.0.2.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"1.0.3":{"name":"bower","version":"1.0.3","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"archy":"0.0.2","abbrev":"~1.0.4","bower-config":"~0.2.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.2.0","bower-logger":"~0.1.0","bower-registry-client":"~0.1.1","chmodr":"~0.1.0","colors":"~0.6.0-1","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.25.0","request-progress":"~0.2.0","request-replay":"~0.1.2","rimraf":"~2.2.0","semver":"~2.0.8","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-execute":"~0.1.4","grunt-shell":"~0.3.0","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.0.3","dist":{"shasum":"30221d521ebeb7243ced1fefafa83c4910ea30d6","tarball":"http://registry.npmjs.org/bower/-/bower-1.0.3.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"1.1.0":{"name":"bower","version":"1.1.0","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","ansicolors":"~0.2.1","archy":"0.0.2","bower-config":"~0.2.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.2.0","bower-logger":"~0.1.0","bower-registry-client":"~0.1.2","cardinal":"~0.4.0","chmodr":"~0.1.0","colors":"~0.6.0-1","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.25.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-execute":"~0.1.4","grunt-shell":"~0.3.0","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.1.0","dist":{"shasum":"fd30de015c254d53ddf2abd7ca086a36e1db64cd","tarball":"http://registry.npmjs.org/bower/-/bower-1.1.0.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}],"directories":{}},"1.1.1":{"name":"bower","version":"1.1.1","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.3.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.3.0","bower-logger":"~0.1.0","bower-registry-client":"~0.1.2","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.25.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.1.1","dist":{"shasum":"d3ac38b690c61460a76ebc5ddecd9e5ec8d65b75","tarball":"http://registry.npmjs.org/bower/-/bower-1.1.1.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.1.2":{"name":"bower","version":"1.1.2","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.3.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.3.0","bower-logger":"~0.1.0","bower-registry-client":"~0.1.2","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.25.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.1.2","dist":{"shasum":"89c8d5c75b8359e06fc6a6e3cf4105c3bd6946a1","tarball":"http://registry.npmjs.org/bower/-/bower-1.1.2.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.0":{"name":"bower","version":"1.2.0","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.4.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.0","bower-registry-client":"~0.1.2","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.25.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.0","dist":{"shasum":"8ec3d0feb4dc2ea5d995f76801a7063ff497b8c3","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.0.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.1":{"name":"bower","version":"1.2.1","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.4.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.0","bower-registry-client":"~0.1.2","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.25.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.1","dist":{"shasum":"e25fd6c7677205f04b0992f6725048b899f7d779","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.1.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.2":{"name":"bower","version":"1.2.2","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.4.3","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.1","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.27.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.5.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.2","dist":{"shasum":"f6bc27b0a3b87d201c9223792795b6d7fd31b6c0","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.2.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.3":{"name":"bower","version":"1.2.3","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.4.3","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.1","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.27.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.5.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.3","dist":{"shasum":"5a578d7f502074190ac30a35f6faf19847d0496f","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.3.tgz"},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.4":{"name":"bower","version":"1.2.4","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.4.3","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.1","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.2.2","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.27.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.5.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.4","dist":{"shasum":"7dce66cef5ffab8ef56c053d8df5aa1f1356cfac","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.4.tgz"},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.5":{"name":"bower","version":"1.2.5","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.4.3","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.1","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.3.0","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","osenv":"0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.27.0","request-progress":"~0.2.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.5.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.5","dist":{"shasum":"2ef3f565fb6d143582318def68b4b084ac3e5a86","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.5.tgz"},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.6":{"name":"bower","version":"1.2.6","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.1","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.3.0","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.6.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","osenv":"0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.27.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.5.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.6","dist":{"shasum":"a8b7bd344601554821957b9ab62fb436febc674d","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.6.tgz"},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.7":{"name":"bower","version":"1.2.7","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.1","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.3.0","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.7.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","osenv":"0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.27.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","unzip":"~0.1.7","update-notifier":"~0.1.3","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.5.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.7","dist":{"shasum":"5b0505c8192bd61a752a7cf8b718d1b3054cd554","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.7.tgz"},"_from":".","_npmVersion":"1.3.5","_npmUser":{"name":"satazor","email":"andremiguelcruz@msn.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"}]},"1.2.8":{"name":"bower","version":"1.2.8","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.8.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.1","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.2.0","chmodr":"~0.1.0","decompress-zip":"~0.0.3","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.0.11","inquirer":"~0.3.0","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.7.0","nopt":"~2.1.1","lru-cache":"~2.3.0","open":"~0.0.3","osenv":"0.0.3","promptly":"~0.2.0","q":"~0.9.2","request":"~2.27.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.1.0","stringify-object":"~0.1.4","sudo-block":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","update-notifier":"~0.1.3","which":"~1.0.5","p-throttler":"~0.0.1"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.6.0","grunt-exec":"~0.4.2","mocha":"~1.12.0","nock":"~0.22.0","istanbul":"~0.1.42","proxyquire":"~0.5.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.2.8","dist":{"shasum":"f63c0804a267d5ffaf2fd3fd488367e73dce202f","tarball":"http://registry.npmjs.org/bower/-/bower-1.2.8.tgz"},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"wibblymat","email":"mat@wibbly.org.uk"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"}]},"1.3.0":{"name":"bower","version":"1.3.0","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.3","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.3.0","inquirer":"~0.4.0","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.9.0","nopt":"~2.1.1","lru-cache":"~2.5.0","open":"~0.0.3","osenv":"~0.0.3","promptly":"~0.2.0","q":"~1.0.0","request":"~2.33.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.2.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","update-notifier":"~0.1.3","which":"~1.0.5","p-throttler":"~0.0.1","insight":"~0.3.0","is-root":"~0.1.0","shell-quote":"~1.4.1"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.8.0","grunt-exec":"~0.4.2","mocha":"*","nock":"~0.27.2","istanbul":"~0.2.4","proxyquire":"~0.5.0","load-grunt-tasks":"~0.3.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.0","dist":{"shasum":"d615ad16859b64c02e3f6b584d3e0d5f669f4063","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.0.tgz"},"_from":".","_npmVersion":"1.4.4","_npmUser":{"name":"wibblymat","email":"mat@wibbly.org.uk"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"}]},"1.3.1":{"name":"bower","version":"1.3.1","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.3","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.3.0","inquirer":"~0.4.0","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.9.0","nopt":"~2.1.1","lru-cache":"~2.5.0","open":"~0.0.3","osenv":"~0.0.3","promptly":"~0.2.0","q":"~1.0.0","request":"~2.33.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.2.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","update-notifier":"~0.1.3","which":"~1.0.5","p-throttler":"~0.0.1","insight":"~0.3.0","is-root":"~0.1.0","shell-quote":"~1.4.1"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.8.0","grunt-exec":"~0.4.2","mocha":"*","nock":"~0.27.2","istanbul":"~0.2.4","proxyquire":"~0.5.0","load-grunt-tasks":"~0.3.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.1","dist":{"shasum":"60d564e774be4e60631a159566830fce260e469a","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.1.tgz"},"_from":".","_npmVersion":"1.3.11","_npmUser":{"name":"wibblymat","email":"mat@wibbly.org.uk"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"}]},"1.3.2":{"name":"bower","version":"1.3.2","description":"The browser package manager.","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.1.4","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.3","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.1","graceful-fs":"~2.0.0","handlebars":"~1.3.0","inquirer":"~0.4.0","junk":"~0.2.0","mkdirp":"~0.3.5","mout":"~0.9.0","nopt":"~2.1.1","lru-cache":"~2.5.0","open":"~0.0.3","osenv":"~0.0.3","promptly":"~0.2.0","q":"~1.0.0","request":"~2.33.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.2.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","update-notifier":"~0.1.3","which":"~1.0.5","p-throttler":"~0.0.1","insight":"~0.3.0","is-root":"~0.1.0","shell-quote":"~1.4.1","lockfile":"~0.4.2"},"devDependencies":{"expect.js":"~0.2.0","grunt":"~0.4.1","grunt-simple-mocha":"~0.4.0","grunt-contrib-watch":"~0.5.0","grunt-contrib-jshint":"~0.8.0","grunt-exec":"~0.4.2","mocha":"*","nock":"~0.27.2","istanbul":"~0.2.4","proxyquire":"~0.5.0","load-grunt-tasks":"~0.3.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.2","dist":{"shasum":"ae1eeea5c3ba9300e10e55b193e9d2fd5407fb7b","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.2.tgz"},"_from":".","_npmVersion":"1.4.4","_npmUser":{"name":"wibblymat","email":"mat@wibbly.org.uk"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"}]},"1.3.3":{"name":"bower","version":"1.3.3","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.6","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.9","graceful-fs":"~2.0.0","handlebars":"~1.3.0","inquirer":"~0.4.0","insight":"~0.3.0","is-root":"~0.1.0","junk":"~0.3.0","lockfile":"~0.4.2","lru-cache":"~2.5.0","mkdirp":"~0.3.5","mout":"~0.9.1","nopt":"~2.2.0","opn":"~0.1.1","osenv":"~0.0.3","p-throttler":"~0.0.1","promptly":"~0.2.0","q":"~1.0.1","request":"~2.34.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.2.1","shell-quote":"~1.4.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","update-notifier":"~0.1.8","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.3.1","grunt":"~0.4.4","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.2.4","load-grunt-tasks":"~0.4.0","mocha":"~1.18","nock":"~0.28.2","proxyquire":"~0.6.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.3","dist":{"shasum":"9aaed731c5d56a86ccdc8b6bcb0b9284b3a6b225","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.3.tgz"},"_from":".","_npmVersion":"1.3.24","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"}]},"1.3.4":{"name":"bower","version":"1.3.4","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.6","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.9","graceful-fs":"~2.0.0","handlebars":"~1.3.0","inquirer":"~0.4.0","insight":"~0.3.0","is-root":"~0.1.0","junk":"~0.3.0","lockfile":"~0.4.2","lru-cache":"~2.5.0","mkdirp":"~0.3.5","mout":"~0.9.1","nopt":"~2.2.0","opn":"~0.1.1","osenv":"~0.0.3","p-throttler":"~0.0.1","promptly":"~0.2.0","q":"~1.0.1","request":"~2.34.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.2.1","shell-quote":"~1.4.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","update-notifier":"~0.1.8","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.3.1","grunt":"~0.4.4","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.2.4","load-grunt-tasks":"~0.4.0","mocha":"~1.18","nock":"~0.28.2","proxyquire":"~0.6.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.4","_shasum":"90f0c714a0ebac7bdf6b710e608077c4f128180f","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"wibblymat","email":"mat@wibbly.org.uk"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"}],"dist":{"shasum":"90f0c714a0ebac7bdf6b710e608077c4f128180f","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.4.tgz"}},"1.3.5":{"name":"bower","version":"1.3.5","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","bower-config":"~0.5.0","bower-endpoint-parser":"~0.2.0","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.6","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~3.2.9","graceful-fs":"~2.0.0","handlebars":"~1.3.0","inquirer":"~0.4.0","insight":"~0.3.0","is-root":"~0.1.0","junk":"~0.3.0","lockfile":"~0.4.2","lru-cache":"~2.5.0","mkdirp":"~0.3.5","mout":"~0.9.1","nopt":"~2.2.0","opn":"~0.1.1","osenv":"~0.0.3","p-throttler":"~0.0.1","promptly":"~0.2.0","q":"~1.0.1","request":"~2.34.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.2.1","shell-quote":"~1.4.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.20","update-notifier":"~0.1.8","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.3.1","grunt":"~0.4.4","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.2.4","load-grunt-tasks":"~0.4.0","mocha":"~1.18","nock":"~0.28.2","proxyquire":"~0.6.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.5","dist":{"shasum":"36a749fa8d0ac4d96609f721d15c93834bdaf98b","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.5.tgz"},"_from":".","_npmVersion":"1.3.24","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"}]},"1.3.6":{"name":"bower","version":"1.3.6","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","bower-config":"~0.5.2","bower-endpoint-parser":"~0.2.2","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.6","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~4.0.2","graceful-fs":"~3.0.1","handlebars":"~1.3.0","inquirer":"~0.5.1","insight":"~0.3.0","is-root":"~0.1.0","junk":"~0.3.0","lockfile":"~0.4.2","lru-cache":"~2.5.0","mkdirp":"~0.5.0","mout":"~0.9.1","nopt":"~3.0.0","opn":"~0.1.1","osenv":"~0.1.0","p-throttler":"~0.0.1","promptly":"~0.2.0","q":"~1.0.1","request":"~2.36.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.3.0","shell-quote":"~1.4.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.23","update-notifier":"~0.1.8","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.3.1","grunt":"~0.4.4","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.2.4","load-grunt-tasks":"~0.4.0","mocha":"~1.20.1","nock":"~0.34.1","proxyquire":"~1.0.1","coveralls":"~2.10.0","node-uuid":"~1.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.6","dist":{"shasum":"db643fdaab0376c3c526939d709e9852a46ca2ed","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.6.tgz"},"_from":".","_npmVersion":"1.3.24","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}]},"1.3.7":{"name":"bower","version":"1.3.7","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","bower-config":"~0.5.2","bower-endpoint-parser":"~0.2.2","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.6","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~4.0.2","graceful-fs":"~3.0.1","handlebars":"~1.3.0","inquirer":"~0.5.1","insight":"~0.3.0","is-root":"~0.1.0","junk":"~0.3.0","lockfile":"~0.4.2","lru-cache":"~2.5.0","mkdirp":"~0.5.0","mout":"~0.9.1","nopt":"~3.0.0","opn":"~0.1.1","osenv":"~0.1.0","p-throttler":"~0.0.1","promptly":"~0.2.0","q":"~1.0.1","request":"~2.36.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.3.0","shell-quote":"~1.4.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"~0.0.23","update-notifier":"~0.1.8","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.3.1","grunt":"~0.4.4","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.2.4","load-grunt-tasks":"~0.4.0","mocha":"~1.20.1","nock":"~0.34.1","proxyquire":"~1.0.1","coveralls":"~2.10.0","node-uuid":"~1.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.7","dist":{"shasum":"498c3112c26d69eec3e17f00f760bccd7e4ac004","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.7.tgz"},"_from":".","_npmVersion":"1.3.24","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}]},"1.3.8":{"name":"bower","version":"1.3.8","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"~0.0.2","bower-config":"~0.5.2","bower-endpoint-parser":"~0.2.2","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.4.0","chmodr":"~0.1.0","decompress-zip":"~0.0.6","fstream":"~0.1.22","fstream-ignore":"~0.0.6","glob":"~4.0.2","graceful-fs":"~3.0.1","handlebars":"~1.3.0","inquirer":"~0.5.1","insight":"~0.3.0","is-root":"~0.1.0","junk":"~0.3.0","lockfile":"~0.4.2","lru-cache":"~2.5.0","mkdirp":"~0.5.0","mout":"~0.9.1","nopt":"~3.0.0","opn":"~0.1.1","osenv":"~0.1.0","p-throttler":"~0.0.1","promptly":"~0.2.0","q":"~1.0.1","request":"~2.36.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.3.0","shell-quote":"~1.4.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"0.0.23","update-notifier":"~0.2.0","which":"~1.0.5"},"devDependencies":{"expect.js":"~0.3.1","grunt":"~0.4.4","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.2.4","load-grunt-tasks":"~0.4.0","mocha":"~1.20.1","nock":"~0.34.1","proxyquire":"~1.0.1","coveralls":"~2.10.0","node-uuid":"~1.4.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.8","dist":{"shasum":"afa3338a8a88a6e084c38112ea4a15998cbee3e6","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.8.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"paulirish","email":"paul.irish@gmail.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}]},"1.3.9":{"name":"bower","version":"1.3.9","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.2","bower-endpoint-parser":"~0.2.2","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.5.0","chmodr":"~0.1.0","decompress-zip":"0.0.6","fstream":"~0.1.22","fstream-ignore":"0.0.6","glob":"~4.0.2","graceful-fs":"~3.0.1","handlebars":"~1.3.0","inquirer":"~0.5.1","insight":"~0.4.1","is-root":"~0.1.0","junk":"~0.3.0","lockfile":"~0.4.2","lru-cache":"~2.5.0","mkdirp":"~0.5.0","mout":"~0.9.1","nopt":"~3.0.0","opn":"~0.1.1","osenv":"~0.1.0","p-throttler":"0.0.1","promptly":"~0.2.0","q":"~1.0.1","request":"~2.36.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.3.0","shell-quote":"~1.4.1","stringify-object":"~0.2.0","tar":"~0.1.17","tmp":"0.0.23","update-notifier":"~0.2.0","which":"~1.0.5"},"devDependencies":{"coveralls":"~2.11.0","expect.js":"~0.3.1","grunt":"~0.4.4","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.2.4","load-grunt-tasks":"~0.6.0","mocha":"~1.20.1","nock":"~0.41.0","node-uuid":"~1.4.1","proxyquire":"~1.0.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"gitHead":"a069d1e07d46b81c5a69e391506028f9b076b39d","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.9","_shasum":"786d4addfc523e875089ccc1ef8d5a6d6e91a2c6","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"sindresorhus","email":"sindresorhus@gmail.com"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"dist":{"shasum":"786d4addfc523e875089ccc1ef8d5a6d6e91a2c6","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.9.tgz"}},"1.3.10":{"name":"bower","version":"1.3.10","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.2","bower-endpoint-parser":"~0.2.2","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.5.0","chmodr":"~0.1.0","decompress-zip":"0.0.8","fstream":"~1.0.2","fstream-ignore":"~1.0.1","glob":"~4.0.2","graceful-fs":"~3.0.1","handlebars":"~2.0.0","inquirer":"~0.7.1","insight":"~0.4.3","is-root":"~1.0.0","junk":"~1.0.0","lockfile":"~1.0.0","lru-cache":"~2.5.0","mkdirp":"~0.5.0","mout":"~0.10.0","nopt":"~3.0.0","opn":"~1.0.0","osenv":"~0.1.0","p-throttler":"0.1.0","promptly":"~0.2.0","q":"~1.0.1","request":"~2.42.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.3.0","shell-quote":"~1.4.1","stringify-object":"~1.0.0","tar-fs":"~0.5.0","tmp":"0.0.23","update-notifier":"~0.2.0","which":"~1.0.5"},"devDependencies":{"coveralls":"~2.11.0","expect.js":"~0.3.1","grunt":"~0.4.4","grunt-cli":"^0.1.13","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.3.2","load-grunt-tasks":"~0.6.0","mocha":"~1.21.4","nock":"~0.46.0","node-uuid":"~1.4.1","proxyquire":"~1.0.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"gitHead":"fd4d68038bb8f96df4d16d70f38d6075ddbc0195","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.10","_shasum":"f2153c1bf20ec868f5d80a04a61e0fd1547fa52a","_from":".","_npmVersion":"1.4.23","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"dist":{"shasum":"f2153c1bf20ec868f5d80a04a61e0fd1547fa52a","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.10.tgz"}},"1.3.11":{"name":"bower","version":"1.3.11","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.2","bower-endpoint-parser":"~0.2.2","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"~0.4.0","chalk":"~0.5.0","chmodr":"~0.1.0","decompress-zip":"0.0.8","fstream":"~1.0.2","fstream-ignore":"~1.0.1","glob":"~4.0.2","graceful-fs":"~3.0.1","handlebars":"~2.0.0","inquirer":"~0.7.1","insight":"~0.4.3","is-root":"~1.0.0","junk":"~1.0.0","lockfile":"~1.0.0","lru-cache":"~2.5.0","mkdirp":"~0.5.0","mout":"~0.10.0","nopt":"~3.0.0","opn":"~1.0.0","osenv":"~0.1.0","p-throttler":"0.1.0","promptly":"~0.2.0","q":"~1.0.1","request":"~2.42.0","request-progress":"~0.3.0","retry":"~0.6.0","rimraf":"~2.2.0","semver":"~2.3.0","shell-quote":"~1.4.1","stringify-object":"~1.0.0","tar-fs":"~0.5.0","tmp":"0.0.23","update-notifier":"~0.2.0","which":"~1.0.5"},"devDependencies":{"coveralls":"~2.11.0","expect.js":"~0.3.1","grunt":"~0.4.4","grunt-cli":"^0.1.13","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.3.2","load-grunt-tasks":"~0.6.0","mocha":"~1.21.4","nock":"~0.46.0","node-uuid":"~1.4.1","proxyquire":"~1.0.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"gitHead":"e97bf479fb804f57bb1437bf4ad14ce2cd2bf837","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.11","_shasum":"174fe11dafb69d28478d2896878e06f1ed47b789","_from":".","_npmVersion":"1.4.23","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"dist":{"shasum":"174fe11dafb69d28478d2896878e06f1ed47b789","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.11.tgz"}},"1.3.12":{"name":"bower","version":"1.3.12","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"~1.0.4","archy":"0.0.2","bower-config":"~0.5.2","bower-endpoint-parser":"~0.2.2","bower-json":"~0.4.0","bower-logger":"~0.2.2","bower-registry-client":"~0.2.0","cardinal":"0.4.0","chalk":"0.5.0","chmodr":"0.1.0","decompress-zip":"0.0.8","fstream":"~1.0.2","fstream-ignore":"~1.0.1","glob":"~4.0.2","graceful-fs":"~3.0.1","handlebars":"~2.0.0","inquirer":"0.7.1","insight":"0.4.3","is-root":"~1.0.0","junk":"~1.0.0","lockfile":"~1.0.0","lru-cache":"~2.5.0","mkdirp":"0.5.0","mout":"~0.9.0","nopt":"~3.0.0","opn":"~1.0.0","osenv":"0.1.0","p-throttler":"0.1.0","promptly":"0.2.0","q":"~1.0.1","request":"~2.42.0","request-progress":"0.3.0","retry":"0.6.0","rimraf":"~2.2.0","semver":"~2.3.0","shell-quote":"~1.4.1","stringify-object":"~1.0.0","tar-fs":"0.5.2","tmp":"0.0.23","update-notifier":"0.2.0","which":"~1.0.5"},"devDependencies":{"coveralls":"~2.11.0","expect.js":"~0.3.1","grunt":"~0.4.4","grunt-cli":"^0.1.13","grunt-contrib-jshint":"~0.10.0","grunt-contrib-watch":"~0.6.1","grunt-exec":"~0.4.2","grunt-simple-mocha":"~0.4.0","istanbul":"~0.3.2","load-grunt-tasks":"~0.6.0","mocha":"~1.21.4","nock":"~0.46.0","node-uuid":"~1.4.1","proxyquire":"~1.0.1"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"gitHead":"b26c072f0db054a1902ec4d2e3726dbf8a1c799a","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.3.12","_shasum":"37de0edb3904baf90aee13384a1a379a05ee214c","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"dist":{"shasum":"37de0edb3904baf90aee13384a1a379a05ee214c","tarball":"http://registry.npmjs.org/bower/-/bower-1.3.12.tgz"}},"1.4.0":{"name":"bower","version":"1.4.0","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^0.6.0","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^0.2.1","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"0.1.0","configstore":"^0.3.2","decompress-zip":"^0.1.0","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.8.0","insight":"^0.5.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^0.56.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"gitHead":"ea1f5d1ff088a9397d7d0556c4f7a4597ec102fa","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.4.0","_shasum":"87cd9fdec193cbda2379f9cc52977a5829078617","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"dist":{"shasum":"87cd9fdec193cbda2379f9cc52977a5829078617","tarball":"http://registry.npmjs.org/bower/-/bower-1.4.0.tgz"}},"1.4.1":{"name":"bower","version":"1.4.1","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^0.6.1","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^0.3.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"0.1.0","configstore":"^0.3.2","decompress-zip":"^0.1.0","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.8.0","insight":"^0.5.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^0.56.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"gitHead":"a1287416d40f944d58cb8f2e774e2076bfffd32f","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.4.1","_shasum":"a18be39d030792754f30f1c5b32d37b0156ba8dd","_from":".","_npmVersion":"2.7.4","_nodeVersion":"0.12.0","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"fat","email":"jacobthornton@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"}],"dist":{"shasum":"a18be39d030792754f30f1c5b32d37b0156ba8dd","tarball":"http://registry.npmjs.org/bower/-/bower-1.4.1.tgz"}},"1.5.0":{"name":"bower","version":"1.5.0","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^0.6.1","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^0.3.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"0.1.0","configstore":"^0.3.2","decompress-zip":"^0.1.0","deep-sort-object":"~0.1.1","findup-sync":"^0.2.1","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.8.0","insight":"^0.5.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^5.0.1","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^0.56.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"45fe5c37ccf1ec3fdfc7ac810ba7703ceb0bda08","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.5.0","_shasum":"1279d29c08221443472f455acb4c71f3ebb9f504","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"1279d29c08221443472f455acb4c71f3ebb9f504","tarball":"http://registry.npmjs.org/bower/-/bower-1.5.0.tgz"},"maintainers":[{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"desandro","email":"desandrocodes@gmail.com"}]},"1.5.1":{"name":"bower","version":"1.5.1","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^0.6.1","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^0.3.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"0.1.0","configstore":"^0.3.2","decompress-zip":"^0.1.0","deep-sort-object":"~0.1.1","findup-sync":"^0.2.1","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.8.0","insight":"^0.5.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^5.0.1","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^0.56.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"23afb3a12964e3b6e0716a9e4eccdba6cbf60f27","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.5.1","_shasum":"a099d02fcd3952edb326011234b4fc616dfc3f36","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"a099d02fcd3952edb326011234b4fc616dfc3f36","tarball":"http://registry.npmjs.org/bower/-/bower-1.5.1.tgz"},"maintainers":[{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"desandro","email":"desandrocodes@gmail.com"}]},"1.5.2":{"name":"bower","version":"1.5.2","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^0.6.1","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^0.3.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"0.1.0","configstore":"^0.3.2","decompress-zip":"^0.1.0","deep-sort-object":"~0.1.1","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.8.0","insight":"^0.5.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^0.56.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"64d990ba102c8491c474dd99605b9a9725e62cbb","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.5.2","_shasum":"be291d6c36f1740779abff1c61aca5633e265327","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"be291d6c36f1740779abff1c61aca5633e265327","tarball":"http://registry.npmjs.org/bower/-/bower-1.5.2.tgz"},"maintainers":[{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"desandro","email":"desandrocodes@gmail.com"}]},"1.5.3":{"name":"bower","version":"1.5.3","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"https://github.com/bower/bower"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^0.6.1","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^0.3.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"0.1.0","configstore":"^0.3.2","decompress-zip":"^0.1.0","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.8.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^0.56.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"66310523d16a1f342f3da2aa49ea90d927fe7d46","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.5.3","_shasum":"ee5d7952e114e30b18795e20e9fefcc5b4cf963d","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"maintainers":[{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"desandro","email":"desandrocodes@gmail.com"}],"dist":{"shasum":"ee5d7952e114e30b18795e20e9fefcc5b4cf963d","tarball":"http://registry.npmjs.org/bower/-/bower-1.5.3.tgz"}},"1.6.2":{"name":"bower","version":"1.6.2","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.2.1","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.4","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^2.13.0","node-uuid":"^1.4.2","npm-shrinkwrap":"^5.4.1","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"52463dea099f73c5fcfa4858f9a89ff91f3ef147","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.6.2","_shasum":"a5362d4dace0c106e2531143b72d862e4210805e","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"a5362d4dace0c106e2531143b72d862e4210805e","tarball":"http://registry.npmjs.org/bower/-/bower-1.6.2.tgz"},"maintainers":[{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"desandro","email":"desandrocodes@gmail.com"}]},"1.6.3":{"name":"bower","version":"1.6.3","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.2.2","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.4","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^2.13.0","node-uuid":"^1.4.2","npm-shrinkwrap":"^5.4.1","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"2330d59ffa8f4f543a9f6ee4b0301e396236bf45","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.6.3","_shasum":"70ab999e25dec5c078afcaf545a991f683dc1ea6","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"70ab999e25dec5c078afcaf545a991f683dc1ea6","tarball":"http://registry.npmjs.org/bower/-/bower-1.6.3.tgz"},"maintainers":[{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"desandro","email":"desandrocodes@gmail.com"}]},"1.6.4":{"name":"bower","version":"1.6.4","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.2.2","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.4","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^2.13.0","node-uuid":"^1.4.2","npm-shrinkwrap":"^5.4.1","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"bfd1e933250d51794372d3a2eba169d94686eda7","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.6.4","_shasum":"e2ea916e6b3d145c0e759f249b2e94157f201ee6","_from":".","_npmVersion":"2.14.8","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"e2ea916e6b3d145c0e759f249b2e94157f201ee6","tarball":"http://registry.npmjs.org/bower/-/bower-1.6.4.tgz"},"maintainers":[{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"desandro","email":"desandrocodes@gmail.com"}]},"1.6.5":{"name":"bower","version":"1.6.5","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.2.2","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.4","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^2.13.0","node-uuid":"^1.4.2","npm-shrinkwrap":"^5.4.1","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"a022cdc75ee0693af813a87b40f5de4c74b7baae","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.6.5","_shasum":"59d457122a161e42cc1625bbab8179c214b7ac11","_from":".","_npmVersion":"2.14.8","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"59d457122a161e42cc1625bbab8179c214b7ac11","tarball":"http://registry.npmjs.org/bower/-/bower-1.6.5.tgz"},"maintainers":[{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"desandro","email":"desandrocodes@gmail.com"}]},"1.5.4":{"name":"bower","version":"1.5.4","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^0.6.1","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^0.3.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"0.1.0","configstore":"^0.3.2","decompress-zip":"^0.1.0","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.8.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"2.7.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^0.56.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"c50d11b04fa9a6b4675952909078af29a0439f95","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.5.4","_shasum":"dae5c5c19b312161c6bbe5b71cf263e80d014bfb","_from":".","_npmVersion":"2.14.8","_nodeVersion":"0.10.35","_npmUser":{"name":"vladikoff","email":"vlad@vladikoff.com"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}],"dist":{"shasum":"dae5c5c19b312161c6bbe5b71cf263e80d014bfb","tarball":"http://registry.npmjs.org/bower/-/bower-1.5.4.tgz"}},"1.4.2":{"name":"bower","version":"1.4.2","description":"The browser package manager","author":{"name":"Twitter"},"licenses":[{"type":"MIT","url":"https://github.com/bower/bower/blob/master/LICENSE"}],"repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^0.6.1","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^0.3.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"0.1.0","configstore":"^0.3.2","decompress-zip":"^0.1.0","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.8.0","insight":"^0.5.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"2.7.0","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^0.56.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"preferGlobal":true,"gitHead":"47e583466217ce5f045b70fc3c8f5aedf665f5fa","bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.4.2","_shasum":"1b36b81cb7720e97b7abee4aa18cdc608e16e7a0","_from":".","_npmVersion":"2.14.8","_nodeVersion":"0.10.35","_npmUser":{"name":"vladikoff","email":"vlad@vladikoff.com"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}],"dist":{"shasum":"1b36b81cb7720e97b7abee4aa18cdc608e16e7a0","tarball":"http://registry.npmjs.org/bower/-/bower-1.4.2.tgz"}},"1.6.6":{"name":"bower","version":"1.6.6","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.2.2","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.4","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^2.13.0","node-uuid":"^1.4.2","npm-shrinkwrap":"^5.4.1","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"67bd5d026f58ba2f443ac9aa5f63d1b221c83fa2","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.6.6","_shasum":"b49c022866811e70e014261fb0aac67c41c6ea91","_from":".","_npmVersion":"2.14.8","_nodeVersion":"0.10.35","_npmUser":{"name":"vladikoff","email":"vlad@vladikoff.com"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}],"dist":{"shasum":"b49c022866811e70e014261fb0aac67c41c6ea91","tarball":"http://registry.npmjs.org/bower/-/bower-1.6.6.tgz"}},"1.6.7":{"name":"bower","version":"1.6.7","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.2.2","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.4","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^2.13.0","node-uuid":"^1.4.2","npm-shrinkwrap":"^5.4.1","proxyquire":"^1.3.0","spawn-sync":"^1.0.5"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"1a990f4563c6d2733b38792cc0c140d38ea57d12","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.6.7","_shasum":"bf7c8aa092b0096be53afbd039cfbb633c0ad457","_from":".","_npmVersion":"2.14.10","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"bf7c8aa092b0096be53afbd039cfbb633c0ad457","tarball":"http://registry.npmjs.org/bower/-/bower-1.6.7.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}]},"1.6.8":{"name":"bower","version":"1.6.8","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.2.3","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"github:sheerun/fs-write-stream-atomic#v1.0.4-fix","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^3.1.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"1.0.13"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"50ed13e4eed2cbd684e534087fd5f67030ae738d","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.6.8","_shasum":"4e9400d9f06efc97aed94518f42fceee93ec2a4d","_from":".","_npmVersion":"2.14.10","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"4e9400d9f06efc97aed94518f42fceee93ec2a4d","tarball":"http://registry.npmjs.org/bower/-/bower-1.6.8.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}]},"1.6.9":{"name":"bower","version":"1.6.9","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.2.3","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.5","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^3.1.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"1.0.13"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"fd4c9e6aca734ffe93170eb2998ea9168c65e968","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.6.9","_shasum":"cdd7c908f88f8e8908a9ac237e34f591d7058b99","_from":".","_npmVersion":"2.14.4","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"cdd7c908f88f8e8908a9ac237e34f591d7058b99","tarball":"http://registry.npmjs.org/bower/-/bower-1.6.9.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}]},"1.7.0":{"name":"bower","version":"1.7.0","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.3.0","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.5","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.3.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-jscs":"^2.3.0","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^3.1.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"1.0.13"},"scripts":{"test":"grunt test"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"338ac99080d464cbc7c2c27cddae31207da6e527","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.7.0","_shasum":"55c9bf39f5547c02ed5469f67635637128adae29","_from":".","_npmVersion":"2.14.4","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"55c9bf39f5547c02ed5469f67635637128adae29","tarball":"http://registry.npmjs.org/bower/-/bower-1.7.0.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}]},"1.7.1":{"name":"bower","version":"1.7.1","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.3.0","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"^1.0.5","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","semver-utils":"^1.1.1","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.6.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-jscs":"^2.3.0","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^3.1.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"1.0.13"},"scripts":{"test":"grunt test","ci":"grunt travis","coveralls":"coveralls"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"e168c894a2a810b2e89c21320914029193a82c42","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.7.1","_shasum":"8d0c1a31d85237b3629fd2af981bd11e1b1dca82","_from":".","_npmVersion":"2.14.4","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"8d0c1a31d85237b3629fd2af981bd11e1b1dca82","tarball":"http://registry.npmjs.org/bower/-/bower-1.7.1.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}]},"1.7.2":{"name":"bower","version":"1.7.2","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"dependencies":{"abbrev":"^1.0.5","archy":"1.0.0","bower-config":"^1.3.0","bower-endpoint-parser":"^0.2.2","bower-json":"^0.4.0","bower-logger":"^0.2.2","bower-registry-client":"^1.0.0","cardinal":"0.4.4","chalk":"^1.0.0","chmodr":"^1.0.2","configstore":"^0.3.2","decompress-zip":"^0.1.0","destroy":"^1.0.3","fs-write-stream-atomic":"1.0.5","fstream":"^1.0.3","fstream-ignore":"^1.0.2","github":"^0.2.3","glob":"^4.3.2","graceful-fs":"^3.0.5","handlebars":"^2.0.0","inquirer":"0.10.0","insight":"^0.7.0","is-root":"^1.0.0","junk":"^1.0.0","lockfile":"^1.0.0","lru-cache":"^2.5.0","md5-hex":"^1.0.2","mkdirp":"0.5.0","mout":"^0.11.0","nopt":"^3.0.1","opn":"^1.0.1","p-throttler":"0.1.1","promptly":"0.2.0","q":"^1.1.2","request":"2.53.0","request-progress":"0.3.1","retry":"0.6.1","rimraf":"^2.2.8","semver":"^2.3.0","semver-utils":"^1.1.1","shell-quote":"^1.4.2","stringify-object":"^1.0.0","tar-fs":"^1.4.1","tmp":"0.0.24","update-notifier":"^0.6.0","user-home":"^1.1.0","which":"^1.0.8"},"devDependencies":{"chai":"^1.10.0","coveralls":"^2.11.2","expect.js":"^0.3.1","grunt":"^0.4.5","grunt-cli":"^0.1.13","grunt-contrib-jshint":"^0.10.0","grunt-contrib-watch":"^0.6.1","grunt-exec":"^0.4.6","grunt-jscs":"^2.3.0","grunt-simple-mocha":"^0.4.0","istanbul":"^0.3.5","load-grunt-tasks":"^2.0.0","mocha":"^2.1.0","multiline":"^1.0.2","nock":"^3.1.0","node-uuid":"^1.4.2","proxyquire":"^1.3.0","spawn-sync":"1.0.13"},"scripts":{"test":"grunt test","ci":"grunt travis","coveralls":"coveralls"},"bin":{"bower":"bin/bower"},"files":["bin","lib","templates"],"gitHead":"a2f21e2703df020617bc35bbc2fb823c8a14b885","bugs":{"url":"https://github.com/bower/bower/issues"},"bundleDependencies":["abbrev","archy","bower-config","bower-endpoint-parser","bower-json","bower-logger","bower-registry-client","cardinal","chalk","chmodr","configstore","decompress-zip","destroy","fs-write-stream-atomic","fstream","fstream-ignore","github","glob","graceful-fs","handlebars","inquirer","insight","is-root","junk","lockfile","lru-cache","md5-hex","mkdirp","mout","nopt","opn","p-throttler","promptly","q","request","request-progress","retry","rimraf","semver","shell-quote","stringify-object","tar-fs","tmp","update-notifier","user-home","which"],"_id":"bower@1.7.2","_shasum":"b04228f9970f11777017e64ae39d71f9346c9575","_from":".","_npmVersion":"2.14.15","_nodeVersion":"4.2.3","_npmUser":{"name":"vladikoff","email":"vlad@vladikoff.com"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}],"dist":{"shasum":"b04228f9970f11777017e64ae39d71f9346c9575","tarball":"http://registry.npmjs.org/bower/-/bower-1.7.2.tgz"}},"1.7.5":{"name":"bower","version":"1.7.5","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib/lib","bin":{"bower":"lib/bin/bower"},"homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.7.5","scripts":{},"_shasum":"7f8e28d0be97f727a87f1445c1bf4086a728279b","_from":".","_npmVersion":"3.5.3","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"7f8e28d0be97f727a87f1445c1bf4086a728279b","tarball":"http://registry.npmjs.org/bower/-/bower-1.7.5.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}]},"1.7.6":{"name":"bower","version":"1.7.6","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","bin":{"bower":"bin/bower"},"homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.7.6","scripts":{},"_shasum":"c06e77967f9f08892e6409d0151780695d1ced72","_from":".","_npmVersion":"3.5.3","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"c06e77967f9f08892e6409d0151780695d1ced72","tarball":"http://registry.npmjs.org/bower/-/bower-1.7.6.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}]},"1.7.7":{"name":"bower","version":"1.7.7","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","bin":{"bower":"bin/bower"},"homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"files":["bin","lib"],"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.7.7","scripts":{},"_shasum":"2fd7ff3ebdcba5a8ffcd84c397c8fdfe9f825f92","_from":".","_npmVersion":"3.5.3","_nodeVersion":"4.1.1","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"2fd7ff3ebdcba5a8ffcd84c397c8fdfe9f825f92","tarball":"http://registry.npmjs.org/bower/-/bower-1.7.7.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}]},"1.7.8":{"name":"bower","version":"1.7.8","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","bin":{"bower":"bin/bower"},"homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"files":["bin","lib"],"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.7.8","scripts":{},"_shasum":"552714fd1582ff9628d0892c8eff18b43a957126","_from":".","_npmVersion":"3.7.3","_nodeVersion":"5.9.0","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"552714fd1582ff9628d0892c8eff18b43a957126","tarball":"http://registry.npmjs.org/bower/-/bower-1.7.8.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/bower-1.7.8.tgz_1459790075885_0.43250645138323307"}},"1.7.9":{"name":"bower","version":"1.7.9","description":"The browser package manager","author":{"name":"Twitter"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"main":"lib","bin":{"bower":"bin/bower"},"homepage":"http://bower.io","engines":{"node":">=0.10.0"},"keywords":["bower"],"files":["bin","lib"],"bugs":{"url":"https://github.com/bower/bower/issues"},"_id":"bower@1.7.9","scripts":{},"_shasum":"b7296c2393e0d75edaa6ca39648132dd255812b0","_from":".","_npmVersion":"3.7.3","_nodeVersion":"5.9.0","_npmUser":{"name":"sheerun","email":"sheerun@sher.pl"},"dist":{"shasum":"b7296c2393e0d75edaa6ca39648132dd255812b0","tarball":"http://registry.npmjs.org/bower/-/bower-1.7.9.tgz"},"maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/bower-1.7.9.tgz_1459857239351_0.9720134933013469"}}},"readme":"# Bower - A package manager for the web\n\n> Bower needs resources for its maintenance. Please fill [this form](https://docs.google.com/forms/d/1i-Opb-uPdqUBBZQSbngv3Y3bfolG1gbBvtRLfxMnzRE/viewform?c=0&w=1) if you think you can help.\n\n[![Build Status](https://travis-ci.org/bower/bower.svg?branch=master)](https://travis-ci.org/bower/bower)\n[![Windows Build](https://ci.appveyor.com/api/projects/status/jr6vfra8w84plh2g/branch/master?svg=true)](https://ci.appveyor.com/project/sheerun/bower/history)\n[![Coverage Status](https://img.shields.io/coveralls/bower/bower.svg)](https://coveralls.io/r/bower/bower?branch=master)\n[![Discord chat](https://img.shields.io/badge/discord-join%20chat%20%E2%86%92-brightgreen.svg?style=flat)](https://discord.gg/0fFM7QF0KpZRh2cY)\n[![Issue Stats](http://issuestats.com/github/bower/bower/badge/pr?style=flat)](http://issuestats.com/github/bower/bower)\n[![Issue Stats](http://issuestats.com/github/bower/bower/badge/issue?style=flat)](http://issuestats.com/github/bower/bower)\n\n\n\n---\n\nBower offers a generic, unopinionated solution to the problem of **front-end package management**, while exposing the package dependency model via an API that can be consumed by a more opinionated build stack. There are no system wide dependencies, no dependencies are shared between different apps, and the dependency tree is flat.\n\nBower runs over Git, and is package-agnostic. A packaged component can be made up of any type of asset, and use any type of transport (e.g., AMD, CommonJS, etc.).\n\n**View complete docs on [bower.io](http://bower.io)**\n\n[View all packages available through Bower's registry](http://bower.io/search/).\n\n## Install\n\n```sh\n$ npm install -g bower\n```\n\nBower depends on [Node.js](http://nodejs.org/) and [npm](http://npmjs.org/). Also make sure that [git](http://git-scm.com/) is installed as some bower\npackages require it to be fetched and installed.\n\n\n## Usage\n\nSee complete command line reference at [bower.io/docs/api/](http://bower.io/docs/api/)\n\n### Installing packages and dependencies\n\n```sh\n# install dependencies listed in bower.json\n$ bower install\n\n# install a package and add it to bower.json\n$ bower install --save\n\n# install specific version of a package and add it to bower.json\n$ bower install # --save\n```\n\n### Using packages\n\nWe discourage using bower components statically for performance and security reasons (if component has an `upload.php` file that is not ignored, that can be easily exploited to do malicious stuff).\n\nThe best approach is to process components installed by bower with build tool (like [Grunt](http://gruntjs.com/) or [gulp](http://gulpjs.com/)), and serve them concatenated or using a module loader (like [RequireJS](http://requirejs.org/)).\n\n### Uninstalling packages\n\nTo uninstall a locally installed package:\n\n```sh\n$ bower uninstall \n```\n\n### prezto and oh-my-zsh users\n\nOn `prezto` or `oh-my-zsh`, do not forget to `alias bower='noglob bower'` or `bower install jquery\\#1.9.1`\n\n### Never run Bower with sudo\n\nBower is a user command; there is no need to execute it with superuser permissions.\n\n### Windows users\n\nTo use Bower on Windows, you must install\n[Git for Windows](http://git-for-windows.github.io/) correctly. Be sure to check the\noptions shown below:\n\n\"Git\n\n\"Git\n\nNote that if you use TortoiseGit and if Bower keeps asking for your SSH\npassword, you should add the following environment variable: `GIT_SSH -\nC:\\Program Files\\TortoiseGit\\bin\\TortoisePlink.exe`. Adjust the `TortoisePlink`\npath if needed.\n\n### Ubuntu users\n\nTo use Bower on Ubuntu, you might need to link `nodejs` executable to `node`:\n\n```\nsudo ln -s /usr/bin/nodejs /usr/bin/node\n```\n\n## Configuration\n\nBower can be configured using JSON in a `.bowerrc` file. Read over available options at [bower.io/docs/config](http://bower.io/docs/config).\n\n\n## Support\n\n* [Discord chat](https://discord.gg/0fFM7QF0KpZRh2cY)\n* [StackOverflow](http://stackoverflow.com/questions/tagged/bower)\n* [Mailinglist](http://groups.google.com/group/twitter-bower) - twitter-bower@googlegroups.com\n\n## Contributing\n\nWe welcome [contributions](https://github.com/bower/bower/graphs/contributors) of all kinds from anyone. Please take a moment to review the [guidelines for contributing](CONTRIBUTING.md).\n\n* [Bug reports](https://github.com/bower/bower/wiki/Report-a-Bug)\n* [Feature requests](CONTRIBUTING.md#features)\n* [Pull requests](CONTRIBUTING.md#pull-requests)\n\n\nNote that on Windows for tests to pass you need to configure Git before cloning:\n\n```\ngit config --global core.autocrlf input\n```\n\n## License\n\nCopyright (c) 2015 Twitter and [other contributors](https://github.com/bower/bower/graphs/contributors)\n\nLicensed under the MIT License\n","maintainers":[{"name":"desandro","email":"desandrocodes@gmail.com"},{"name":"paulirish","email":"paul.irish@gmail.com"},{"name":"satazor","email":"andremiguelcruz@msn.com"},{"name":"sheerun","email":"sheerun@sher.pl"},{"name":"sindresorhus","email":"sindresorhus@gmail.com"},{"name":"vladikoff","email":"vlad@vladikoff.com"},{"name":"wibblymat","email":"mat@wibbly.org.uk"}],"time":{"modified":"2016-04-05T11:54:07.456Z","created":"2012-09-04T23:58:48.836Z","0.1.0":"2012-09-04T23:58:50.678Z","0.1.2":"2012-09-16T21:38:38.487Z","0.1.3":"2012-09-18T17:38:03.910Z","0.2.0":"2012-09-25T20:56:59.910Z","0.3.0":"2012-10-22T22:41:20.636Z","0.3.1":"2012-10-31T17:59:13.303Z","0.3.2":"2012-11-04T18:42:18.980Z","0.4.0":"2012-11-12T01:12:39.383Z","0.5.0":"2012-11-19T20:20:19.934Z","0.5.1":"2012-11-20T21:29:33.849Z","0.6.0":"2012-11-21T23:31:44.733Z","0.6.1":"2012-11-23T01:44:49.331Z","0.6.2":"2012-11-23T09:24:38.936Z","0.6.3":"2012-11-24T15:37:36.332Z","0.6.4":"2012-11-30T00:52:57.641Z","0.6.5":"2012-12-01T14:37:55.875Z","0.6.6":"2012-12-03T22:34:41.827Z","0.6.7":"2012-12-10T17:57:46.128Z","0.6.8":"2012-12-14T11:05:20.328Z","0.7.0":"2013-02-01T00:42:17.216Z","0.7.1":"2013-02-18T22:04:45.413Z","0.8.0":"2013-02-24T16:23:48.343Z","0.8.1":"2013-02-25T23:40:20.479Z","0.8.2":"2013-02-26T21:04:33.825Z","0.8.3":"2013-02-27T10:09:44.306Z","0.8.4":"2013-03-01T11:49:09.335Z","0.8.5":"2013-03-04T01:54:43.312Z","0.8.6":"2013-04-03T22:54:55.735Z","0.9.0":"2013-04-25T22:18:26.197Z","0.9.1":"2013-04-27T11:04:53.116Z","0.9.2":"2013-04-27T12:01:19.669Z","0.10.0":"2013-07-23T00:08:34.010Z","1.0.0":"2013-07-23T00:13:33.288Z","1.0.1":"2013-07-29T22:59:09.752Z","1.0.2":"2013-07-29T23:18:42.938Z","1.0.3":"2013-07-30T08:00:06.322Z","1.1.0":"2013-08-03T16:32:34.920Z","1.1.1":"2013-08-08T13:14:56.837Z","1.1.2":"2013-08-10T15:11:02.126Z","1.2.0":"2013-08-19T07:44:52.060Z","1.2.1":"2013-08-19T18:21:29.630Z","1.2.2":"2013-08-20T22:33:43.236Z","1.2.3":"2013-08-22T18:10:17.941Z","1.2.4":"2013-08-23T22:13:55.396Z","1.2.5":"2013-08-28T21:07:07.306Z","1.2.6":"2013-09-04T01:44:14.517Z","1.2.7":"2013-09-29T22:07:28.982Z","1.2.8":"2013-12-02T13:45:49.498Z","1.3.0":"2014-03-11T11:59:54.131Z","1.3.1":"2014-03-11T23:39:04.294Z","1.3.2":"2014-04-07T09:30:20.525Z","1.3.3":"2014-04-24T20:58:42.126Z","1.3.4":"2014-06-02T14:22:13.933Z","1.3.5":"2014-06-08T10:15:37.883Z","1.3.6":"2014-07-02T13:07:14.949Z","1.3.7":"2014-07-04T12:07:43.581Z","1.3.8":"2014-07-11T20:49:54.511Z","1.3.9":"2014-08-06T19:38:50.570Z","1.3.10":"2014-09-13T14:52:54.776Z","1.3.11":"2014-09-18T00:25:38.248Z","1.3.12":"2014-09-28T16:39:55.809Z","1.4.0":"2015-03-30T22:50:49.524Z","1.4.1":"2015-04-01T07:40:31.107Z","1.5.0":"2015-08-23T13:27:00.845Z","1.5.1":"2015-08-23T14:38:19.195Z","1.5.2":"2015-08-25T20:39:48.951Z","1.5.3":"2015-09-24T12:04:40.330Z","1.6.0":"2015-10-15T12:00:03.357Z","1.6.1":"2015-10-15T14:05:10.765Z","1.6.2":"2015-10-15T14:22:04.139Z","1.6.3":"2015-10-16T09:49:45.556Z","1.6.4":"2015-10-24T10:08:33.516Z","1.6.5":"2015-10-24T10:18:15.783Z","1.5.4":"2015-11-24T17:03:15.020Z","1.4.2":"2015-11-24T17:08:28.686Z","1.6.6":"2015-11-25T15:46:50.838Z","1.6.7":"2015-11-26T11:32:17.496Z","1.6.8":"2015-11-27T14:57:54.108Z","1.6.9":"2015-12-04T21:27:06.135Z","1.7.0":"2015-12-07T12:52:40.494Z","1.7.1":"2015-12-11T20:46:17.232Z","1.7.2":"2015-12-31T02:09:32.462Z","1.7.3":"2016-01-20T17:41:47.199Z","1.7.4":"2016-01-21T13:16:25.843Z","1.7.5":"2016-01-26T21:42:09.185Z","1.7.6":"2016-01-27T10:59:15.570Z","1.7.7":"2016-01-27T17:23:48.077Z","1.7.8":"2016-04-04T17:14:39.664Z","1.7.9":"2016-04-05T11:54:07.456Z"},"author":{"name":"Twitter"},"users":{"770554403":true,"sjonnet":true,"sjonnet19":true,"vincentmac":true,"liqweed":true,"alefteris":true,"maxmaximov":true,"cparker15":true,"passy":true,"jamesmgreene":true,"ianmcburnie":true,"moonpyk":true,"pid":true,"gableroux":true,"codylindley":true,"tigefa":true,"aniketpant":true,"mhaidarh":true,"cathymacars":true,"xtopher":true,"darosh":true,"denisix":true,"nuzoo":true,"oliversalzburg":true,"wibblymat":true,"priyaranjan":true,"davidrlee":true,"leodutra":true,"brentonhouse":true,"csbun":true,"celsogoya":true,"gion":true,"markymark":true,"fablouis":true,"evkline":true,"omichelsen":true,"davidhalldor":true,"hugojosefson":true,"lone112":true,"toogle":true,"runningtalus":true,"doriel":true,"sosana":true,"davidbaiguini":true,"agent_9191":true,"edalorzo":true,"sithengineer":true,"jayproulx":true,"dizlexik":true,"ssoldatenkov":true,"cfleschhut":true,"mikedfunk":true,"mswanson1524":true,"avelino":true,"orion-":true,"gabeio":true,"bkimminich":true,"arturmuller":true,"thebearingedge":true,"iisii":true,"jits":true,"llambda":true,"johno":true,"louxiaojian":true,"atheken":true,"marinangelo":true,"vsn4ik":true,"kewin":true,"cp102":true,"oakley349":true,"cwhopkins":true,"dgarlitt":true,"jostw":true,"ivangaravito":true,"swak":true,"limamedeiros":true,"kasperstuck":true,"richarddavenport":true,"modest":true,"rgraves90":true,"dimitriwalters":true,"cdubois":true,"alessiodionisi":true,"mavisland":true,"pillar0514":true,"aloesch":true,"azder":true,"bslayton":true,"stooboo":true,"chesleybrown":true,"codetheory":true,"danj":true,"io2work":true,"nmrony":true,"lucasmciruzzi":true,"saravntbe":true,"aitorllj93":true,"adamk":true,"stuligan":true,"dlpowless":true,"nitayneeman":true,"kenlimmj":true,"nadimix":true,"clhenrick":true,"squallium":true,"haeck":true,"pnevares":true,"princemaple":true,"dechowmedia":true,"lenage":true,"grimmjaw":true,"nachbar90":true,"stany":true,"itsnauman":true,"mykhael":true,"klarence1":true,"zmni":true,"sobering":true,"benittes":true,"gexplorer":true,"rebugger":true,"yoshihirootz":true,"gnostic":true,"noddycha":true,"fmoliveira":true,"mccarter":true,"rchanaud":true,"jimkropa":true,"jahnestacado":true,"emodus":true,"fleeting":true,"pedrofelipe":true,"joaocunha":true,"safinalexey":true,"f3r":true,"cannobbio":true,"dpkg":true,"yodairish":true,"shinyweb":true,"adambyrne":true,"john-cheesman":true,"asawq2006":true,"visormatt":true,"keeyanajones":true,"simplyianm":true,"risyasin":true,"joshterrill":true,"knugen":true,"alexandreferreira":true,"animezis":true,"darg":true,"josuehenry14":true,"leonardorb":true,"huntie":true,"itonyyo":true,"chrisdeaton":true,"jazoom":true,"vishnuvathsan":true,"mpcjazz":true,"marcghorayeb":true,"ericwbailey":true,"kilpiban":true,"coderaiser":true,"jackpinto":true,"alemohamad":true,"dcondrey":true,"malkaves":true,"dac2205":true,"felipemena1":true,"tagkiller":true,"wfsm":true,"deftbit":true,"chong.john":true,"yeltsin":true,"hughker":true,"mubaidr":true,"dolymood":true,"sanketss84":true,"duerer":true,"yasirmturk":true,"leidottw":true,"acterce":true,"a_cabello":true,"ishitcno1":true,"jakemiller":true,"francesco-nextology":true,"thefriendlydev":true,"nanhualyq":true,"aliemre":true,"disheart":true,"gokaygurcan":true,"modao":true,"hanksudo":true,"otravers":true,"steel1990":true,"maskedcoder":true,"abdullahceylan":true,"sublime718":true,"leejefon":true,"mauperruolo":true,"jyounce":true,"abrahamwilliams":true,"jota":true,"nex":true,"manten":true,"bertasus":true,"lmhs":true,"lukasjuhas":true,"niksudan":true,"arnoldstoba":true,"tamer1an":true,"gabrielscindian":true,"drewigg":true,"chsal2":true,"walkerbe":true,"felixjung":true,"lydiadugger":true,"dofy":true,"borriglione":true,"stretchgz":true,"theuves":true,"fvcproductions":true,"a7madev":true,"jshaw3":true,"chillcapped":true,"brentlintner":true,"octetstream":true,"dnedev":true,"m412c0":true,"shaddyhm":true,"zumanex":true,"despairblue":true,"grantgeorge":true,"dbck":true,"enriquecaballero":true,"liamcoded":true,"svgkrishnamurthy":true,"montyanderson":true,"joerice":true,"enricllagostera":true,"leandro.maioral":true,"labstersrak":true,"ibourgeois":true,"soluzionisubito":true,"fabian.schmid":true,"mavenrix":true,"justincann":true,"subarb":true,"karlbateman":true,"fleischer":true,"vishwasc":true,"kontrax":true,"freebird":true,"alagodich":true,"edusig":true,"decoda":true,"codeprowong":true,"matthewbauer":true,"trquoccuong":true,"utwo":true,"mamalat":true,"kurre":true,"micael-gabenna":true,"edwin_estrada":true,"vqoph":true,"starver":true,"antoinebou":true,"nicholaslp":true,"yanvalue":true,"charlestati":true,"quality520":true,"knoja4":true,"naokie":true,"gdaleson":true,"zava":true,"kparkov":true,"gnimuc":true,"helsner":true,"boterom89":true,"meligatt":true,"xgqfrms":true,"monadic.coffee":true,"gamr":true,"reekdeb":true,"alectic":true,"joanmi":true,"xeoneux":true,"n1kkou":true,"panoptican":true,"fafnirical":true,"kobleistvan":true,"milanowicz":true,"leoribeiro":true,"buzz-dee":true,"chharvey":true,"usedf295":true,"preco21":true,"luckyulin":true,"gustavomeloweb":true,"oscarelotero":true,"dubweis3r":true,"dreamseer":true,"kbarrows":true,"jclo":true,"klimnikita":true,"stigandr":true,"juk":true,"jaehong.lee":true,"diegoperini":true,"nickeltobias":true,"martl":true,"jerous":true,"tdy721":true,"arbourd":true,"lcdss":true,"mrasaint":true,"jaminroe":true,"egantz":true,"itskdk":true,"mrmalec":true,"amartelr":true,"ikeyan":true,"danail":true,"fadihania":true,"faelcorreia":true,"rsmccloskey":true,"artemigos":true,"iroc":true,"shinelin":true,"geese98":true,"potnox":true,"faicalbaki":true,"stuart.shi":true,"mccataldo":true,"arttse":true,"livfwds":true,"tobiasnickel":true,"djamseed":true,"medo_alouane":true,"anaumidis":true,"sternelee":true,"aditcmarix":true,"abdihaikal":true,"wolfhoundjesse":true,"corca":true,"jamesbedont":true,"msjcaetano":true,"redstrike":true,"nauwep":true,"jaredlinwood":true,"powellmedia":true,"bhenav":true,"txredking":true,"unkray":true,"porreh":true,"bruinebeer":true,"rplittle":true,"hyteer":true,"ismaelvsqz":true,"ansuman":true,"dennykuo":true,"shurickz":true,"chancearthur":true,"martijndevalk":true,"gooer":true,"bwade231":true,"thomas.miele":true,"hibrahimsafak":true,"favasconcelos":true,"demod":true,"demopark":true,"sopepos":true,"illuminator":true,"gabricom":true,"lucachaves":true,"pasimoes":true,"antoniordo":true,"filipve":true,"bemace":true,"hammedsal":true,"ristostevcev":true,"genediazjr":true,"joannerpena":true,"hngrhorace":true,"coalesce":true,"michelebroggi":true,"ahshum":true,"abdul":true,"reamd":true,"royling":true,"brend":true,"telco2011":true,"spencermathews":true,"tdmalone":true,"glider":true,"dangerdave":true,"lex_nel":true,"alexc1212":true,"lpelos":true,"alvajc":true,"muralibala":true,"ryanoasis":true,"decoded":true,"mate2":true,"miguelpalazzo":true,"giovannipds":true,"dnik":true,"net-burst":true,"sbvonline":true,"dbobrov":true,"tuomastolppi":true,"donkapetra":true,"asm2hex":true,"amandavianna":true,"yesseecity":true,"dahnielson":true,"nomedescargues":true,"eduardocereto":true,"mauriciolauffer":true,"garustar":true,"whatsamoorefor":true,"janggomgeun":true,"snarky":true,"cangulo":true,"narayanats":true,"cperezabo":true,"alimd":true,"angelxmoreno":true,"shanewholloway":true,"ions":true},"repository":{"type":"git","url":"git+https://github.com/bower/bower.git"},"homepage":"http://bower.io","bugs":{"url":"https://github.com/bower/bower/issues"},"readmeFilename":"README.md","keywords":["bower"],"license":"MIT"} ================================================ FILE: test/fixtures/analyze/collect/recorded/index/ae18615611dfb3f32feaf1c607df7bac.headers ================================================ { "statusCode": 200, "headers": { "server": "CouchDB/1.5.0 (Erlang OTP/R16B03)", "etag": "\"243-ee588285b884979435a37fcca5d73613\"", "date": "Fri, 13 May 2016 18:07:11 GMT", "content-type": "application/json", "content-length": "171593", "cache-control": "must-revalidate" }, "url": "https://skimdb.npmjs.com:443/registry/bower", "time": 2077, "request": { "method": "GET", "headers": { "content-type": "application/json", "accept": "application/json", "host": "skimdb.npmjs.com" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/index/d40cbb49129f01a9d5130a95f54d4f79 ================================================ {"error":"not_found","reason":"missing"} ================================================ FILE: test/fixtures/analyze/collect/recorded/index/d40cbb49129f01a9d5130a95f54d4f79.headers ================================================ { "statusCode": 404, "headers": { "server": "CouchDB/1.5.0 (Erlang OTP/R16B03)", "date": "Fri, 13 May 2016 18:07:13 GMT", "content-type": "application/json", "content-length": "41", "cache-control": "must-revalidate" }, "url": "https://skimdb.npmjs.com:443/registry/some-module-that-will-never-exist", "time": 469, "request": { "method": "GET", "headers": { "content-type": "application/json", "accept": "application/json", "host": "skimdb.npmjs.com" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/npm/278e742ec691d9647761d9e06a93c852.headers ================================================ { "statusCode": 200, "headers": { "server": "nginx/1.4.6 (Ubuntu)", "content-type": "application/json; charset=utf-8", "access-control-allow-origin": "*", "access-control-max-age": "86400", "access-control-allow-methods": "GET, HEAD, POST, PUT, DELETE, OPTIONS", "access-control-allow-headers": "Authorization, Content-Type, If-None-Match", "access-control-expose-headers": "WWW-Authenticate, Server-Authorization", "cache-control": "no-cache", "content-encoding": "gzip", "via": "1.1 varnish, 1.1 varnish", "content-length": "2394", "accept-ranges": "bytes", "date": "Mon, 09 May 2016 17:08:04 GMT", "age": "109", "connection": "keep-alive", "x-served-by": "cache-lax1435-LAX, cache-lcy1128-LCY", "x-cache": "HIT, HIT", "x-cache-hits": "1, 1", "vary": "accept-encoding" }, "url": "https://api.npmjs.org:443/downloads/range/2015-05-09:2016-05-08/cross-spawn", "time": 321, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/npm/6da574a19e30e15a2628bc2a7ae7d5a4 ================================================ {"rows":[ {"key":null,"value":149} ]} ================================================ FILE: test/fixtures/analyze/collect/recorded/npm/6da574a19e30e15a2628bc2a7ae7d5a4.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "server": "CouchDB/1.5.0 (Erlang OTP/R16B03)", "etag": "\"2WGXHV85LUY45038QDVTUJ9TP\"", "date": "Mon, 09 May 2016 17:08:04 GMT", "content-type": "application/json", "cache-control": "must-revalidate" }, "url": "https://skimdb.npmjs.com:443/registry/_design/app/_view/dependedUpon?startkey=%5B%22cross-spawn%22%5D&endkey=%5B%22cross-spawn%22%2C%22%EF%BF%B0%22%5D&limit=1&reduce=true&stale=update_after", "time": 615, "request": { "method": "GET", "headers": { "content-type": "application/json", "accept": "application/json", "host": "skimdb.npmjs.com" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/0046732f19ee23072e08f55d2a400eca.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:22:40 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dbd00d19f0bb1c71fe2a951f525a1a6351490552559; expires=Mon, 26-Mar-18 18:22:39 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:22:40 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c22fbd86a621e-LIS" }, "url": "https://img.shields.io:443/scrutinizer/coverage/g/MathieuTurcotte/node-backoff.json", "time": 755, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/02777f766910df6791475f44c0e2b57b.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:20:43 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d09460ff7acb1985cbc879d2f89afc3f81490552442; expires=Mon, 26-Mar-18 18:20:42 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:20:43 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c201f9f0d6236-LIS" }, "url": "https://img.shields.io:443/codecov/c/github/IndigoUnited/node-cross-spawn.json", "time": 1059, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/0429ac4bdf217161d9a2772fdb7861e2.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"b978ab1afd96cd9c5b41a642f2821c453ec35ba7\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=IndigoUnited-node-planify-1.1.0-2-gb978ab1.tar.gz", "x-geo-block-list": "", "date": "Sun, 26 Mar 2017 18:20:44 GMT", "x-github-request-id": "E1BE:2FE62:6BB23D:8A96C3:58D8067C" }, "url": "https://codeload.github.com:443/IndigoUnited/node-planify/legacy.tar.gz/b978ab1afd96cd9c5b41a642f2821c453ec35ba7", "time": 1121, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/0c774ab0c1fa72fb9dbba94b96693973.headers ================================================ { "statusCode": 200, "headers": { "server": "nginx/1.10.1", "content-type": "application/octet-stream", "last-modified": "Tue, 01 Apr 2014 22:51:11 GMT", "etag": "\"533b42df-fa\"", "expires": "Mon, 27 Mar 2017 00:22:36 GMT", "access-control-allow-origin": "*", "access-control-allow-methods": "GET", "cache-control": "max-age=21600", "content-length": "250", "accept-ranges": "bytes", "date": "Sun, 26 Mar 2017 18:22:36 GMT", "via": "1.1 varnish", "age": "0", "connection": "keep-alive", "x-served-by": "cache-mad9430-MAD", "x-cache": "MISS", "x-cache-hits": "0", "x-timer": "S1490552556.160551,VS0,VE217" }, "url": "http://registry.npmjs.org:80/0/-/0-0.0.0.tgz", "time": 564, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/1152654e8bfc034a9d043925c55fbe48.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 05 May 2019 23:28:51 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d88526b8d07637636ab796ff79246051f1557098930; expires=Mon, 04-May-20 23:28:50 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "max-age=120", "expires": "Sun, 05 May 2019 23:30:51 GMT", "access-control-allow-origin": "*", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "server": "cloudflare", "cf-ray": "4d267e3e184ace23-LHR", "content-encoding": "gzip" }, "url": "https://img.shields.io:443/codeclimate/coverage/reacttraining/react-router.json", "time": 343, "request": { "method": "GET", "headers": { "user-agent": "got/9.6.0 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/180995f905c69e6355ccbeb197109fb9.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"4637c5533ec7aa74b262da2fc353cdbf66826677\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=ReactTraining-react-router-v4.0.0-beta.8-210-g4637c55.tar.gz", "x-geo-block-list": "", "date": "Sun, 02 Apr 2017 20:36:57 GMT", "x-github-request-id": "D86E:0521:14D2FA:1A64C8:58E160E8" }, "url": "https://codeload.github.com:443/ReactTraining/react-router/legacy.tar.gz/master", "time": 1693, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/1b4935ddf796087a37e45c313edddd4f.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"811118fd1f89e9ca4e6b67292b9ef5da6c4f60e9\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=MathieuTurcotte-node-backoff-v2.5.0-1-g811118f.tar.gz", "x-geo-block-list": "", "date": "Sun, 26 Mar 2017 18:22:37 GMT", "x-github-request-id": "2EF7:2FE62:6BB3B4:8A9912:58D806ED" }, "url": "https://codeload.github.com:443/MathieuTurcotte/node-backoff/legacy.tar.gz/811118fd1f89e9ca4e6b67292b9ef5da6c4f60e9", "time": 2517, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/310c26a3622e22be3798b810bb056cd2.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:22:42 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d2a37657d7c9dc7b685ad80c8267b64b01539019361; expires=Tue, 08-Oct-19 17:22:41 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a4a82df0f623c-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "http://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=0&version=0.0.0", "time": 1252, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/32532aa076ea4d37a94def3f370e23fc ================================================ ================================================ FILE: test/fixtures/analyze/collect/recorded/source/32532aa076ea4d37a94def3f370e23fc.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 26 Mar 2017 18:20:44 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "60", "x-ratelimit-reset": "1490556044", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 26 Mar 2017 18:20:44 GMT", "location": "https://codeload.github.com/IndigoUnited/node-planify/legacy.tar.gz/b978ab1afd96cd9c5b41a642f2821c453ec35ba7", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "593010132f82159af0ded24b4932e109", "x-github-request-id": "2ED5:0CD4:117BCF3:15F8AF0:58D8067C" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-planify/tarball/b978ab1afd96cd9c5b41a642f2821c453ec35ba7", "time": 421, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/36d2b9e3113bb8656477a0866759fca3 ================================================ ================================================ FILE: test/fixtures/analyze/collect/recorded/source/36d2b9e3113bb8656477a0866759fca3.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 26 Mar 2017 18:22:37 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "60", "x-ratelimit-reset": "1490556157", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 26 Mar 2017 18:22:37 GMT", "location": "https://codeload.github.com/MathieuTurcotte/node-backoff/legacy.tar.gz/811118fd1f89e9ca4e6b67292b9ef5da6c4f60e9", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "4537b68c46a1b65b106078b0a2578ee2", "x-github-request-id": "E1D2:0CD5:2234A30:2B1D492:58D806ED" }, "url": "https://api.github.com:443/repos/MathieuTurcotte/node-backoff/tarball/811118fd1f89e9ca4e6b67292b9ef5da6c4f60e9", "time": 523, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/3f5a8e5d9434bbd4ec976c36835cdc49 ================================================ ================================================ FILE: test/fixtures/analyze/collect/recorded/source/3f5a8e5d9434bbd4ec976c36835cdc49.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 26 Mar 2017 18:20:41 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "60", "x-ratelimit-reset": "1490556041", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 26 Mar 2017 18:20:41 GMT", "location": "https://codeload.github.com/IndigoUnited/node-cross-spawn/legacy.tar.gz/7bc71932e517c974c80f54ae9f7687c9cd25db74", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "88531cdcf1929112ec480e1806d44a33", "x-github-request-id": "2ECD:0CD5:2232743:2B1A83D:58D80679" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/tarball/7bc71932e517c974c80f54ae9f7687c9cd25db74", "time": 617, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/40971c651c26e9ab81128eb0c10f37af.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:22:42 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d2a37657d7c9dc7b685ad80c8267b64b01539019361; expires=Tue, 08-Oct-19 17:22:41 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a4a82df0f623c-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "https://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=0&version=0.0.0", "time": 1256, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/44c08d748b72275a181e7820e9c258e8.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 02 Apr 2017 20:41:18 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d184285d3d869a5acfbcd198f29ab5c591491165678; expires=Mon, 02-Apr-18 20:41:18 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 02 Apr 2017 20:41:18 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "34969baf9faa620c-LIS" }, "url": "https://img.shields.io:443/codecov/c/github/facebook/jest.json", "time": 1187, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/4d7966a6e7249722abdff0a7555a2527.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:20:43 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d4e0e7fbaf565087824662da76ee0fee91490552442; expires=Mon, 26-Mar-18 18:20:42 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:20:42 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c201f8b43621e-LIS" }, "url": "https://img.shields.io:443/scrutinizer/coverage/g/IndigoUnited/node-cross-spawn.json", "time": 579, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/4ece6fa3645c526294eaf1b270113e6d.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:22:41 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dfa14211698121ee4bc07ac3df52bee351490552560; expires=Mon, 26-Mar-18 18:22:40 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:22:40 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c23010d5861fa-LIS" }, "url": "https://img.shields.io:443/codecov/c/github/lgeorgieff/ccbuild.json", "time": 522, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/50ec845be323513dc05d4ce6eeb56639.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:22:41 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d9f9e39152e0449c41ece80a33c6f352f1490552560; expires=Mon, 26-Mar-18 18:22:40 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:22:41 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c230108f76242-LIS" }, "url": "https://img.shields.io:443/coveralls/lgeorgieff/ccbuild.json", "time": 576, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/586e879d6364ca5313dd5f956d47dbd4.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:20:16 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d06d16c9320a96aef1fec27178363f2df1539019215; expires=Tue, 08-Oct-19 17:20:15 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a46edccfa622a-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "http://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=cross-spawn&version=2.2.3", "time": 1192, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/5fcfa736ff5a936752226c33baab7ce5.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:20:43 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d7fe55f7e64eeb737ec185cd90fa4ffa81490552442; expires=Mon, 26-Mar-18 18:20:42 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:20:43 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c201f9f8f61fa-LIS" }, "url": "https://img.shields.io:443/coveralls/IndigoUnited/node-cross-spawn.json", "time": 868, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/6566d9e3adefb1ed8fe60a17bbf13133.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:22:40 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dbd00d19f0bb1c71fe2a951f525a1a6351490552559; expires=Mon, 26-Mar-18 18:22:39 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:22:40 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c22fbd86b621e-LIS" }, "url": "https://img.shields.io:443/coveralls/MathieuTurcotte/node-backoff.json", "time": 458, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/6632454a445cfcd8152c30b4b8c64783.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 05 May 2019 23:28:49 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d782b51846ef24e7c8cf4d8f364fe29e71557098929; expires=Mon, 04-May-20 23:28:49 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "max-age=120", "expires": "Sun, 05 May 2019 23:30:49 GMT", "access-control-allow-origin": "*", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "server": "cloudflare", "cf-ray": "4d267e324c69ce47-LHR", "content-encoding": "gzip" }, "url": "https://img.shields.io:443/codeclimate/coverage/hapijs/hapi.json", "time": 647, "request": { "method": "GET", "headers": { "user-agent": "got/9.6.0 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/672a67ca0e6ca2125e9601f4e532dc2e.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"38ca942f6f2979ed25f54510173dbd2761dd7e04\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=facebook-jest-v19.0.2-122-g38ca942.tar.gz", "x-geo-block-list": "", "date": "Sun, 02 Apr 2017 20:41:13 GMT", "x-github-request-id": "D94B:0521:14D461:1A66D5:58E161E9" }, "url": "https://codeload.github.com:443/facebook/jest/legacy.tar.gz/master", "time": 3364, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/6ef5fd0be1ac70c0cc78c63dc72f97da.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:22:47 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=de677e3befd62e9f48bcd5f30de7b2f691539019366; expires=Tue, 08-Oct-19 17:22:46 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a4aa2eceb623c-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "http://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=babel-jest&version=19.0.0", "time": 1320, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/6f6f60463501ffe7964700fdb5262ea7.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 02 Apr 2017 20:36:59 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dc4087a72274818a17976af8237e842b11491165418; expires=Mon, 02-Apr-18 20:36:58 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 02 Apr 2017 20:36:59 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "3496955aeaa36254-LIS" }, "url": "https://img.shields.io:443/scrutinizer/coverage/g/reacttraining/react-router.json", "time": 1279, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/77c0ab2484ae068cadf90515cd2bb6d4.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:22:45 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dcbc3b030060742d490b32fe0226a01fa1539019364; expires=Tue, 08-Oct-19 17:22:44 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a4a94fa346224-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "https://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=react-router&version=4.0.0", "time": 1109, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/7fb20e04d9d456482d62b369a1c268c0.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:20:16 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d06d16c9320a96aef1fec27178363f2df1539019215; expires=Tue, 08-Oct-19 17:20:15 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a46edccfa622a-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "https://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=cross-spawn&version=2.2.3", "time": 1195, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/833f1d757cdb7cfa152b54680d0d2d73.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:20:18 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dfedc7409d369580f77705d82fccde3121539019217; expires=Tue, 08-Oct-19 17:20:17 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a46fd8dae622a-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "https://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=hapi&version=13.4.0", "time": 979, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/8881281d102f7688a2b0e5d7ffb48299 ================================================ ================================================ FILE: test/fixtures/analyze/collect/recorded/source/8881281d102f7688a2b0e5d7ffb48299.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 02 Apr 2017 20:36:56 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "59", "x-ratelimit-reset": "1491168654", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 02 Apr 2017 20:36:56 GMT", "location": "https://codeload.github.com/ReactTraining/react-router/legacy.tar.gz/master", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "c6c65e5196703428e7641f7d1e9bc353", "x-github-request-id": "D86D:2C8E4:9F4B3F:CC69BB:58E160E8" }, "url": "https://api.github.com:443/repos/reacttraining/react-router/tarball/", "time": 707, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/8acf97225f349b2c99978025ba5b8e92.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:22:35 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dfa6c13d9aca4bf96e2ca18462ef4be601490552555; expires=Mon, 26-Mar-18 18:22:35 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:22:35 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c22dd0bdf622a-LIS" }, "url": "https://img.shields.io:443/scrutinizer/coverage/g/hapijs/hapi.json", "time": 1130, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/8dcbc0b25ce4f37fd5c0bc06d633eb52.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:20:45 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d5d64ff2f006597a9ca0647cf974a6c5a1490552445; expires=Mon, 26-Mar-18 18:20:45 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:20:45 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c20308de96236-LIS" }, "url": "https://img.shields.io:443/coveralls/IndigoUnited/node-planify.json", "time": 492, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/92d4837e4094c3e096f398bc89aabb0f.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 02 Apr 2017 20:41:18 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d400a3137a45cec5914af7b281c042a751491165678; expires=Mon, 02-Apr-18 20:41:18 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 02 Apr 2017 20:41:18 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "34969baf9ebc61f4-LIS" }, "url": "https://img.shields.io:443/coveralls/facebook/jest.json", "time": 682, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/981d42650123f10d1600074d65aa4f43.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:20:17 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d48668196819527ef3d4e374375d710ad1539019216; expires=Tue, 08-Oct-19 17:20:16 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a46f65bb96224-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "http://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=planify&version=1.2.0", "time": 962, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/9a7bfe12b0910e8bd69ed06184030276.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 05 May 2019 23:28:50 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d96a39157f9cf59acbae470eb88aef8c11557098929; expires=Mon, 04-May-20 23:28:49 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "max-age=120", "expires": "Sun, 05 May 2019 23:30:50 GMT", "access-control-allow-origin": "*", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "server": "cloudflare", "cf-ray": "4d267e37fbf7ce3f-LHR", "content-encoding": "gzip" }, "url": "https://img.shields.io:443/codeclimate/coverage/MathieuTurcotte/node-backoff.json", "time": 347, "request": { "method": "GET", "headers": { "user-agent": "got/9.6.0 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/a27623f8433973cd8a3c9ac32782dd9b.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:22:47 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=de677e3befd62e9f48bcd5f30de7b2f691539019366; expires=Tue, 08-Oct-19 17:22:46 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a4aa2eceb623c-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "https://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=babel-jest&version=19.0.0", "time": 1323, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/a9be16a47e9b4e3762bfbcfbec14effd.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:22:43 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dcbfe66be84687e570cc2660aad8a01c91539019363; expires=Tue, 08-Oct-19 17:22:43 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a4a8b5bfd6212-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "https://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=backoff&version=2.5.0", "time": 1073, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/acd2d3271b8cd130cd75e572ada409c1.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:20:17 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d48668196819527ef3d4e374375d710ad1539019216; expires=Tue, 08-Oct-19 17:20:16 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a46f65bb96224-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "https://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=planify&version=1.2.0", "time": 965, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/afd6397af26789ff7e024c758e094e02.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 05 May 2019 23:28:48 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d7f82e796fecf2a782c9c6ddbca60a0731557098928; expires=Mon, 04-May-20 23:28:48 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "max-age=120", "expires": "Sun, 05 May 2019 23:30:48 GMT", "access-control-allow-origin": "*", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "server": "cloudflare", "cf-ray": "4d267e2c7b8bbc66-LHR", "content-encoding": "gzip" }, "url": "https://img.shields.io:443/codeclimate/coverage/IndigoUnited/node-cross-spawn.json", "time": 655, "request": { "method": "GET", "headers": { "user-agent": "got/9.6.0 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/b00ce31e18a32896ac83d6819e9816fe ================================================ ================================================ FILE: test/fixtures/analyze/collect/recorded/source/b00ce31e18a32896ac83d6819e9816fe.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 26 Mar 2017 18:22:31 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "60", "x-ratelimit-reset": "1490556151", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 26 Mar 2017 18:22:31 GMT", "location": "https://codeload.github.com/hapijs/hapi/legacy.tar.gz/faacf022488bc30748bb8f35aca71a24343dc0fc", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "15bc4ab707db6d6b474783868c7cc828", "x-github-request-id": "2EEF:0CD7:3A50257:49846FE:58D806E7" }, "url": "https://api.github.com:443/repos/hapijs/hapi/tarball/faacf022488bc30748bb8f35aca71a24343dc0fc", "time": 948, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/b6d2435e45a7f8f3b88152e577c55b84.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 02 Apr 2017 20:36:59 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d9dbf0423a443cd9207c466a3eac00e921491165418; expires=Mon, 02-Apr-18 20:36:58 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 02 Apr 2017 20:36:59 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "3496955aeeab620c-LIS" }, "url": "https://img.shields.io:443/codecov/c/github/reacttraining/react-router.json", "time": 1151, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/bb391b38e8f2529e20e3e313a7875566.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:22:40 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=defd02c2ba81a6c88bdfebf96364169ab1490552559; expires=Mon, 26-Mar-18 18:22:39 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:22:40 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c22fbda8d61fa-LIS" }, "url": "https://img.shields.io:443/codecov/c/github/MathieuTurcotte/node-backoff.json", "time": 576, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/bbd9372c326ea4fb4acc82bd30e9491c.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:20:18 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dfedc7409d369580f77705d82fccde3121539019217; expires=Tue, 08-Oct-19 17:20:17 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a46fd8dae622a-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "http://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=hapi&version=13.4.0", "time": 976, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/c2a263604b39c741dcba960ab7bdf64e.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"faacf022488bc30748bb8f35aca71a24343dc0fc\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=hapijs-hapi-v13.4.0-0-gfaacf02.tar.gz", "x-geo-block-list": "", "date": "Sun, 26 Mar 2017 18:22:32 GMT", "x-github-request-id": "E1CC:2FE62:6BB3A8:8A9900:58D806E8" }, "url": "https://codeload.github.com:443/hapijs/hapi/legacy.tar.gz/faacf022488bc30748bb8f35aca71a24343dc0fc", "time": 2770, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/ca1b5b9f76e662b613be43d64e92c4b4.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:22:35 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dba526d907b7b197cdf70684b9ef0bb161490552555; expires=Mon, 26-Mar-18 18:22:35 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:22:35 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c22dce9836236-LIS" }, "url": "https://img.shields.io:443/coveralls/hapijs/hapi.json", "time": 518, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/d4bf4a43cf4e7b6c27e40c732c9d8bfa.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 02 Apr 2017 20:36:59 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dc4087a72274818a17976af8237e842b11491165418; expires=Mon, 02-Apr-18 20:36:58 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 02 Apr 2017 20:36:59 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "3496955aeaa46254-LIS" }, "url": "https://img.shields.io:443/coveralls/reacttraining/react-router.json", "time": 1055, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/daaa6494600d82aa3e21e56452a8702a ================================================ ================================================ FILE: test/fixtures/analyze/collect/recorded/source/daaa6494600d82aa3e21e56452a8702a.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 02 Apr 2017 20:41:12 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "59", "x-ratelimit-reset": "1491168654", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 02 Apr 2017 20:41:12 GMT", "location": "https://codeload.github.com/facebook/jest/legacy.tar.gz/master", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "a7f8a126c9ed3f1c4715a34c0ddc7290", "x-github-request-id": "D948:2C8E6:3A0564E:4A8E10D:58E161E8" }, "url": "https://api.github.com:443/repos/facebook/jest/tarball/", "time": 901, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/e2d10b245b6bce60976eb41c755c5333.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 05 May 2019 23:28:52 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=d61ddb34b9f12b0628801e07b7e48a61e1557098932; expires=Mon, 04-May-20 23:28:52 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "max-age=120", "expires": "Sun, 05 May 2019 23:30:52 GMT", "access-control-allow-origin": "*", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "server": "cloudflare", "cf-ray": "4d267e466c61ce1b-LHR", "content-encoding": "gzip" }, "url": "https://img.shields.io:443/codeclimate/coverage/facebook/jest.json", "time": 361, "request": { "method": "GET", "headers": { "user-agent": "got/9.6.0 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/e66bf57e7754e3a75c0b3da3c7d3b894.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 26 Mar 2017 18:22:35 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=db5b57344bbeb9db9dc88805f5f6ae69f1490552555; expires=Mon, 26-Mar-18 18:22:35 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 26 Mar 2017 18:22:35 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "345c22dcebe6624e-LIS" }, "url": "https://img.shields.io:443/codecov/c/github/hapijs/hapi.json", "time": 827, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/f13ef1d336f7343f21a8f1e755ee4a1d.headers ================================================ { "statusCode": 200, "headers": { "date": "Sun, 02 Apr 2017 20:41:18 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=da57a43b87702fc5917579b9913835b271491165678; expires=Mon, 02-Apr-18 20:41:18 GMT; path=/; domain=.shields.io; HttpOnly" ], "cache-control": "no-cache, no-store, must-revalidate", "expires": "Sun, 02 Apr 2017 20:41:18 GMT", "access-control-allow-origin": "*", "content-encoding": "gzip", "server": "cloudflare-nginx", "cf-ray": "34969baf9d6a6254-LIS" }, "url": "https://img.shields.io:443/scrutinizer/coverage/g/facebook/jest.json", "time": 601, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/f4fbc0e6ea0806cdebfe05e95480858f.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"7bc71932e517c974c80f54ae9f7687c9cd25db74\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=IndigoUnited-node-cross-spawn-2.2.3-0-g7bc7193.tar.gz", "x-geo-block-list": "", "date": "Sun, 26 Mar 2017 18:20:42 GMT", "x-github-request-id": "E1B8:2FE61:4463F6:590B41:58D8067A" }, "url": "https://codeload.github.com:443/IndigoUnited/node-cross-spawn/legacy.tar.gz/7bc71932e517c974c80f54ae9f7687c9cd25db74", "time": 625, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/fba7a93bdb3f483048d32ccc0a105e2b.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:22:45 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dcbc3b030060742d490b32fe0226a01fa1539019364; expires=Tue, 08-Oct-19 17:22:44 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a4a94fa346224-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "http://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=react-router&version=4.0.0", "time": 1106, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/collect/recorded/source/febf07de22a7d2d7ffe02742c6b81857.headers ================================================ { "statusCode": 200, "headers": { "date": "Mon, 08 Oct 2018 17:22:43 GMT", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "keep-alive", "set-cookie": [ "__cfduid=dcbfe66be84687e570cc2660aad8a01c91539019363; expires=Tue, 08-Oct-19 17:22:43 GMT; path=/; domain=.registry.npmjs.org; HttpOnly" ], "content-encoding": "gzip", "cf-ray": "466a4a8b5bfd6212-LIS", "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "vary": "Accept-Encoding", "server": "cloudflare" }, "url": "http://registry.npmjs.org:443/-/npm/v1/security/advisories/search?module=backoff&version=2.5.0", "time": 1071, "request": { "method": "GET", "headers": { "user-agent": "got/9.2.2 (https://github.com/sindresorhus/got)", "accept": "application/json", "accept-encoding": "gzip, deflate" } } } ================================================ FILE: test/fixtures/analyze/download/mocked/broken-archive.tgz ================================================ broken tarball ================================================ FILE: test/fixtures/analyze/download/mocked/non-gzip-archive.tgz ================================================ Example Domain

Example Domain

This domain is established to be used for illustrative examples in documents. You may use this domain in examples without prior coordination or asking for permission.

More information...

================================================ FILE: test/fixtures/analyze/download/recorded/github/0ca08d9404d3be6b0f4b710e7dce325c ================================================ 404: Not Found ================================================ FILE: test/fixtures/analyze/download/recorded/github/0ca08d9404d3be6b0f4b710e7dce325c.headers ================================================ { "statusCode": 404, "headers": { "content-length": "15", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "date": "Sun, 02 Apr 2017 17:07:43 GMT", "x-github-request-id": "FF27:0521:1476D9:19E431:58E12FDE" }, "url": "https://codeload.github.com:443/IndigoUnited/node-cross-spawn/legacy.tar.gz/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "time": 615, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/0d6bf2e4d590ee9d6ece01c851500563.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"48573f1fb4e632add2c000bec3f95d88ebea4440\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=babel-babel-v6.23.0-0-g48573f1.tar.gz", "x-geo-block-list": "", "date": "Sun, 02 Apr 2017 17:07:06 GMT", "x-github-request-id": "FF00:0520:1EEDD5:26CA23:58E12FB9" }, "url": "https://codeload.github.com:443/babel/babel/legacy.tar.gz/48573f1fb4e632add2c000bec3f95d88ebea4440", "time": 1759, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/2197e3675f7b1189860675d45228c712.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"b5239f25c0274feba89242b77d8f0ce57dce83ad\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=IndigoUnited-node-cross-spawn-1.0.0-0-gb5239f2.tar.gz", "x-geo-block-list": "", "date": "Sun, 02 Apr 2017 17:07:41 GMT", "x-github-request-id": "FF25:0521:1476D3:19E426:58E12FDD" }, "url": "https://codeload.github.com:443/IndigoUnited/node-cross-spawn/legacy.tar.gz/b5239f25c0274feba89242b77d8f0ce57dce83ad", "time": 686, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/324da49a49b1bf9799ad0af735d42175 ================================================ ================================================ FILE: test/fixtures/analyze/download/recorded/github/324da49a49b1bf9799ad0af735d42175.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 02 Apr 2017 17:07:05 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "60", "x-ratelimit-reset": "1491156425", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 02 Apr 2017 17:07:05 GMT", "location": "https://codeload.github.com/babel/babel/legacy.tar.gz/48573f1fb4e632add2c000bec3f95d88ebea4440", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "1e9204dbc0447a6f39c3b3c44d87b3f8", "x-github-request-id": "FEFF:2C8E5:33F95D0:42DDB98:58E12FB9" }, "url": "https://api.github.com:443/repos/babel/babel/tarball/48573f1fb4e632add2c000bec3f95d88ebea4440", "time": 753, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/347ad9c22b702976e2e6304bee584cd2.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"966a1275e8c522470cee0802e760ea34fa03d159\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=IndigoUnited-node-cross-spawn-5.1.0-1-g966a127.tar.gz", "x-geo-block-list": "", "date": "Sun, 02 Apr 2017 17:07:44 GMT", "x-github-request-id": "FF29:0520:1EEE22:26CA9C:58E12FE0" }, "url": "https://codeload.github.com:443/IndigoUnited/node-cross-spawn/legacy.tar.gz/master", "time": 604, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/39c4db447b629049bd6c82625ecbb182 ================================================ ================================================ FILE: test/fixtures/analyze/download/recorded/github/39c4db447b629049bd6c82625ecbb182.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Fri, 09 Mar 2018 17:13:35 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "51", "x-ratelimit-reset": "1520618861", "cache-control": "public, must-revalidate, max-age=0", "expires": "Fri, 09 Mar 2018 17:13:35 GMT", "location": "https://codeload.github.com/moxystudio/babel-preset-moxy/legacy.tar.gz/b77ba80b71d6898970e2541b1f1c34d86ba493f7", "access-control-expose-headers": "ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "x-runtime-rack": "0.016191", "x-github-request-id": "D83A:BE15:ED1B93:292501B:5AA2C0BF" }, "url": "https://api.github.com:443/repos/moxystudio/babel-preset-moxy/tarball/b77ba80b71d6898970e2541b1f1c34d86ba493f7", "time": 657, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/598868e39b0c5f898b243dc6a7799590 ================================================ ================================================ FILE: test/fixtures/analyze/download/recorded/github/598868e39b0c5f898b243dc6a7799590.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 02 Apr 2017 17:07:43 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "60", "x-ratelimit-reset": "1491156463", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 02 Apr 2017 17:07:43 GMT", "location": "https://codeload.github.com/IndigoUnited/node-cross-spawn/legacy.tar.gz/master", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "c6c65e5196703428e7641f7d1e9bc353", "x-github-request-id": "FF28:2C8E5:33FAC68:42DF7E3:58E12FDF" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/tarball/", "time": 592, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/6b4c11cf7f1c30a3c0f45d6dee2c98c8.headers ================================================ { "statusCode": 200, "headers": { "transfer-encoding": "chunked", "access-control-allow-origin": "https://render.githubusercontent.com", "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'; sandbox", "strict-transport-security": "max-age=31536000", "vary": "Authorization,Accept-Encoding", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "etag": "\"b77ba80b71d6898970e2541b1f1c34d86ba493f7\"", "content-type": "application/x-gzip", "content-disposition": "attachment; filename=moxystudio-babel-preset-moxy-v2.3.1-0-gb77ba80.tar.gz", "x-geo-block-list": "", "date": "Fri, 09 Mar 2018 17:13:36 GMT", "x-github-request-id": "D843:7CA8:E679E:17FAA8:5AA2C0BF" }, "url": "https://codeload.github.com:443/moxystudio/babel-preset-moxy/legacy.tar.gz/b77ba80b71d6898970e2541b1f1c34d86ba493f7", "time": 1037, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/ce4fa3241f0364d1ea4e654f3cf13cb9 ================================================ ================================================ FILE: test/fixtures/analyze/download/recorded/github/ce4fa3241f0364d1ea4e654f3cf13cb9.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 02 Apr 2017 17:07:42 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "60", "x-ratelimit-reset": "1491156462", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 02 Apr 2017 17:07:42 GMT", "location": "https://codeload.github.com/IndigoUnited/node-cross-spawn/legacy.tar.gz/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "52189b7290fad804d77890ef34a1eeae", "x-github-request-id": "FF26:2C8E6:384DCAA:48592E3:58E12FDE" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/tarball/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "time": 756, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/github/d7c449b25de454b1b362bc5af32cc777 ================================================ ================================================ FILE: test/fixtures/analyze/download/recorded/github/d7c449b25de454b1b362bc5af32cc777.headers ================================================ { "statusCode": 302, "headers": { "server": "GitHub.com", "date": "Sun, 02 Apr 2017 17:07:41 GMT", "content-type": "text/html;charset=utf-8", "content-length": "0", "status": "302 Found", "x-ratelimit-limit": "60", "x-ratelimit-remaining": "60", "x-ratelimit-reset": "1491156461", "cache-control": "public, must-revalidate, max-age=0", "expires": "Sun, 02 Apr 2017 17:07:41 GMT", "location": "https://codeload.github.com/IndigoUnited/node-cross-spawn/legacy.tar.gz/b5239f25c0274feba89242b77d8f0ce57dce83ad", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-content-type-options": "nosniff", "x-frame-options": "deny", "x-xss-protection": "1; mode=block", "vary": "Accept-Encoding", "x-served-by": "77fbfb53269bbb85f82f23584d59f7c1", "x-github-request-id": "FF23:2C8E5:33FAAAD:42DF577:58E12FDC" }, "url": "https://api.github.com:443/repos/IndigoUnited/node-cross-spawn/tarball/b5239f25c0274feba89242b77d8f0ce57dce83ad", "time": 778, "request": { "method": "GET", "headers": { "user-agent": "got/6.7.1 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate", "accept": "application/vnd.github.v3+json" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/npm/57f54040bdda5ac6ffd196cac24be2d8.headers ================================================ { "statusCode": 200, "headers": { "server": "nginx/1.4.6 (Ubuntu)", "content-type": "application/octet-stream", "last-modified": "Wed, 24 Feb 2016 17:10:22 GMT", "etag": "\"56cde3fe-d0b\"", "expires": "Tue, 26 Apr 2016 15:04:20 GMT", "access-control-allow-origin": "*", "access-control-allow-methods": "GET", "cache-control": "max-age=21600", "content-length": "3339", "accept-ranges": "bytes", "date": "Sun, 01 May 2016 10:11:54 GMT", "via": "1.1 varnish", "age": "9067", "connection": "keep-alive", "x-served-by": "cache-ams4130-AMS", "x-cache": "HIT", "x-cache-hits": "1", "x-timer": "S1462097514.552245,VS0,VE0" }, "url": "https://registry.npmjs.org:443/cross-spawn/-/cross-spawn-1.0.0.tgz", "time": 4, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate" } } } ================================================ FILE: test/fixtures/analyze/download/recorded/npm/afed24ca0f8e9f12344ae6a851b46159.headers ================================================ { "statusCode": 200, "headers": { "server": "nginx/1.4.6 (Ubuntu)", "content-type": "application/octet-stream", "last-modified": "Wed, 24 Feb 2016 17:10:10 GMT", "etag": "\"56cde3f2-e51\"", "expires": "Sun, 01 May 2016 13:40:45 GMT", "access-control-allow-origin": "*", "access-control-allow-methods": "GET", "cache-control": "max-age=21600", "content-length": "3665", "accept-ranges": "bytes", "date": "Sun, 01 May 2016 10:10:17 GMT", "via": "1.1 varnish", "age": "8972", "connection": "keep-alive", "x-served-by": "cache-lcy1128-LCY", "x-cache": "HIT", "x-cache-hits": "1", "x-timer": "S1462097417.695732,VS0,VE0" }, "url": "https://registry.npmjs.org:443/cross-spawn/-/cross-spawn-0.1.0.tgz", "time": 5, "request": { "method": "GET", "headers": { "user-agent": "got/6.3.0 (https://github.com/sindresorhus/got)", "accept-encoding": "gzip,deflate" } } } ================================================ FILE: test/mocha.opts ================================================ --bail --timeout 60000 ================================================ FILE: test/spec/analyze/collect/github.js ================================================ 'use strict'; const expect = require('chai').expect; const betray = require('betray'); const chronokinesis = require('chronokinesis'); const loadJsonFile = require('load-json-file'); const sepia = require(`${process.cwd()}/test/util/sepia`); const packageJsonFromData = require(`${process.cwd()}/lib/analyze/util/packageJsonFromData`); const github = require(`${process.cwd()}/lib/analyze/collect/github`); const fixturesDir = `${process.cwd()}/test/fixtures/analyze/collect`; describe('github', () => { before(() => { sepia.fixtureDir(`${fixturesDir}/recorded/github`); chronokinesis.travel('2016-05-09T18:00:00.000Z'); }); after(() => chronokinesis.reset()); ['cross-spawn'].forEach((name) => { it(`should collect \`${name}\` correctly`, () => { const data = loadJsonFile.sync(`${fixturesDir}/modules/${name}/data.json`); const expected = loadJsonFile.sync(`${fixturesDir}/modules/${name}/expected-github.json`); sepia.enable(); return github(packageJsonFromData(name, data), {}) .then((collected) => expect(collected).to.eql(expected)) .finally(() => sepia.disable()); }); }); it('should skip if there\'s no repository or if it\'s not hosted on github', () => ( Promise.try(() => ( github({ name: 'cross-spawn' }, {}) .then((collected) => expect(collected).to.equal(null)) )) .then(() => ( github({ name: 'cross-spawn', repository: { type: 'git', url: 'https://foo.com/IndigoUnited/node-cross-spawn.git' }, }, {}) .then((collected) => expect(collected).to.equal(null)) )) )); it('should detect forks', () => { sepia.enable(); return github({ name: 'strong-fork-syslog', repository: { type: 'git', url: 'https://github.com/strongloop-forks/strong-fork-syslog' }, }, {}) .then((collected) => expect(collected.forkOf).to.equal('schamane/node-syslog')) .finally(() => sepia.disable()); }); it('should deal with empty repositories', () => { sepia.enable(); const betrayed = betray(logger.children['collect/github'], 'info'); return github({ name: 'Cat4D', repository: { type: 'git', url: 'git://github.com/Cat4D/Cat4D.git' }, }, {}) .then((collected) => { expect(betrayed.invoked).to.equal(1); expect(betrayed.invocations[0][0]).to.match(/is empty/i); expect(collected).to.equal(null); }) .finally(() => { sepia.disable(); betrayed.restore(); }); }); describe('commits activity', () => { it('should retry requests if cache is building up', () => { const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const expected = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/expected-github.json`); sepia.enable(); sepia.nock('https://api.github.com', { allowUnmocked: true }) .get('/repos/IndigoUnited/node-cross-spawn/stats/commit_activity') .reply(202, () => { sepia.nock.cleanAll(); return []; }); return github(packageJsonFromData('cross-spawn', data), {}) .then((collected) => { expect(sepia.nock.isDone()).to.equal(true); expect(collected).to.eql(expected); }) .finally(() => { sepia.nock.cleanAll(); sepia.disable(); }); }); it('should not fail if all retries were exhausted'); }); describe('unavailable status codes', () => { it('should deal with 404 - Not Found errors', () => { sepia.enable(); const betrayed = betray(logger.children['collect/github'], 'info'); return github({ name: 'foo', repository: { type: 'git', url: 'git://github.com/some-org-that-will-never-exist/some-repo-that-will-never-exist.git' }, }, {}) .then((collected) => { expect(betrayed.invoked).to.greaterThan(0); expect(betrayed.invocations[0][1]).to.match(/failed with 404/i); expect(collected).to.equal(null); }) .finally(() => { sepia.disable(); betrayed.restore(); }); }); it('should deal with 400 - Invalid repository name', () => { const betrayed = betray(logger.children['collect/github'], 'info'); // Can't use sepia because of https://github.com/linkedin/sepia/issues/15 sepia.nock('https://api.github.com') .persist() .get(/.*/) .reply(400); return github({ name: 'foo', repository: { type: 'git', url: 'git://github.com/some-org/some-repó' }, }, {}) .then((collected) => { expect(betrayed.invoked).to.be.greaterThan(1); expect(betrayed.invocations[0][1]).to.match(/failed with 400/i); expect(collected).to.equal(null); }) .finally(() => { betrayed.restore(); sepia.nock.cleanAll(); }); }); it('should deal with 403/451 - DMCA take down errors', () => { sepia.enable(); const betrayed = betray(logger.children['collect/github'], 'info'); return github({ name: 'ps3mca-tool', repository: { type: 'git', url: 'git://github.com/jimmikaelkael/ps3mca-tool.git' }, }, {}) .then((collected) => { expect(betrayed.invoked).to.be.greaterThan(1); expect(betrayed.invocations[0][1]).to.match(/failed with 451/i); expect(collected).to.equal(null); }) .finally(() => { sepia.disable(); betrayed.restore(); }); }); }); describe('statuses', () => { it('should use downloaded.gitRef when analyzing the commit status', () => { const packageJson = { name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn' }, gitHead: 'foo', }; sepia.enable(); // See: https://github.com/IndigoUnited/node-cross-spawn/pull/27 return github(packageJson, { gitRef: '9b77a14a370a6f0b81c9eb58ccade0fad94fe249' }) .then((collected) => { expect(collected.statuses).to.eql([ { context: 'continuous-integration/appveyor/pr', state: 'failure' }, { context: 'continuous-integration/travis-ci/pr', state: 'success' }, { context: 'continuous-integration/appveyor/branch', state: 'failure' }, { context: 'continuous-integration/travis-ci/push', state: 'success' }, ]); }) .finally(() => sepia.disable()); }); it('should default to master if downloaded.gitHead is not set when analyzing the commit status', () => { const packageJson = { name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn' }, }; sepia.enable(); return github(packageJson, {}) .then((collected) => { expect(collected.statuses).to.eql([ { context: 'continuous-integration/appveyor/branch', state: 'success' }, { context: 'continuous-integration/travis-ci/push', state: 'success' }, ]); }) .finally(() => sepia.disable()); }); }); it('should retry on network errors'); it('should pass the correct options to token-dealer'); it('should handle rate limit errors (wait/bail)'); }); ================================================ FILE: test/spec/analyze/collect/index.js ================================================ 'use strict'; const cp = require('child_process'); const loadJsonFile = require('load-json-file'); const nano = require('nano'); const expect = require('chai').expect; const betray = require('betray'); const sepia = require(`${process.cwd()}/test/util/sepia`); const collect = require(`${process.cwd()}/lib/analyze/collect`); const packageJsonFromData = require(`${process.cwd()}/lib/analyze/util/packageJsonFromData`); const tmpDir = `${process.cwd()}/test/tmp`; const fixturesDir = `${process.cwd()}/test/fixtures/analyze/collect`; const npmNano = Promise.promisifyAll(nano('https://skimdb.npmjs.com/registry')); describe('index', () => { before(() => sepia.fixtureDir(`${fixturesDir}/recorded/index`)); beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should call all the collectors with the correct arguments', () => { const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); const downloaded = { downloader: 'github', dir: tmpDir, packageJson, gitRef: packageJson.gitHead }; const options = { githubTokens: ['foo', 'bar'], waitRateLimit: true }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve('metadata')); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve('npm')); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve('github')); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve('source')); return collect(data, packageJson, downloaded, npmNano, options) .then((collected) => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedMetadata.invocations[0]).to.eql([data, packageJson]); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedNpm.invocations[0]).to.eql([data, packageJson, npmNano]); expect(betrayedGithub.invoked).to.equal(1); expect(betrayedGithub.invocations[0]).to.eql([packageJson, downloaded, { tokens: options.githubTokens, waitRateLimit: options.waitRateLimit, }]); expect(betrayedSource.invoked).to.equal(1); expect(betrayedSource.invocations[0]).to.eql([data, packageJson, downloaded, { npmRegistry: `${npmNano.config.url}/${npmNano.config.db}`, }]); expect(collected).to.eql({ metadata: 'metadata', npm: 'npm', github: 'github', source: 'source' }); }); }); describe('repository ownership', () => { it('should detect if name is the same as the downloaded one', () => { const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); const downloaded = { downloader: 'github', dir: tmpDir, packageJson, gitRef: packageJson.gitHead }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve()); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve()); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve()); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve()); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(1); expect(betrayedSource.invoked).to.equal(1); }); }); it('should detect if both have no repository', () => { const data = { name: 'cross-spawn' }; const packageJson = { name: 'cross-spawn-foo' }; const downloaded = { downloader: 'github', dir: tmpDir, packageJson: data, gitRef: packageJson.gitHead }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve()); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve()); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve()); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve()); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(1); expect(betrayedSource.invoked).to.equal(1); }); }); it('should detect empty downloaded package.json\'s (download failed)', () => { const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); const downloaded = { downloader: 'github', dir: tmpDir, packageJson: {}, gitRef: packageJson.gitHead }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve()); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve()); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve()); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve()); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(0); expect(betrayedSource.invoked).to.equal(0); }); }); it('should detect if any of maintainers are the same', () => { sepia.enable(); const data = { name: 'bower-fork', maintainers: [{ name: 'André Cruz', email: 'andremiguelcruz@msn.com' }], }; const packageJson = { name: 'bower-fork', repository: { type: 'git', url: 'git://github.com/user/bower.git' }, }; const downloadedPackageJson = { name: 'bower', repository: { type: 'git', url: 'git://github.com/bower/bower.git' }, }; const downloaded = { downloader: 'github', dir: tmpDir, packageJson: downloadedPackageJson, gitRef: null }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve()); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve()); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve()); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve()); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(1); expect(betrayedSource.invoked).to.equal(1); }) .finally(() => sepia.disable()); }); it('should not assume ownership for malicious modules', () => { sepia.enable(); // Complete example return Promise.try(() => { const data = { name: 'bower-fork', maintainers: [] }; const packageJson = { name: 'bower-fork', repository: { type: 'git', url: 'git://github.com/user/bower.git' }, }; const downloadedPackageJson = { name: 'bower', repository: { type: 'git', url: 'git://github.com/bower/bower.git' }, }; const downloaded = { downloader: 'github', dir: tmpDir, packageJson: downloadedPackageJson, gitRef: null }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve('metadata')); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve('npm')); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve('github')); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve('source')); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(0); expect(betrayedSource.invoked).to.equal(0); }); }) // Without repository .then(() => { const data = { name: 'bower-fork' }; const packageJson = data; const downloadedPackageJson = { name: 'bower', repository: { type: 'git', url: 'git://github.com/bower/bower.git' }, }; const downloaded = { downloader: 'github', dir: tmpDir, packageJson: downloadedPackageJson, gitRef: null }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve('metadata')); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve('npm')); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve('github')); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve('source')); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(0); expect(betrayedSource.invoked).to.equal(0); }); }) // Without maintainers .then(() => { const data = { name: 'graphql-shorthand-parser-fork' }; const packageJson = { name: 'graphql-shorthand-parser-fork', repository: { type: 'git', url: 'git://github.com/user/graphql-shorthand-parser.git' }, }; const downloadedPackageJson = { name: 'graphql-shorthand-parser', repository: { type: 'git', url: 'git://github.com/other-user/graphql-shorthand-parser.git' }, }; const downloaded = { downloader: 'github', dir: tmpDir, packageJson: downloadedPackageJson, gitRef: null }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve('metadata')); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve('npm')); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve('github')); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve('source')); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(0); expect(betrayedSource.invoked).to.equal(0); }); }) .finally(() => sepia.disable()); }); it('should still call the source collector if the downloaded source was not from a repository', () => { const data = { name: 'bower-fork', repository: { type: 'git', url: 'git://github.com/user/bower.git' }, }; const packageJson = data; const downloadedPackageJson = { name: 'bower', repository: { type: 'git', url: 'git://github.com/bower/bower.git' }, }; const downloaded = { downloader: 'npm', dir: tmpDir, packageJson: downloadedPackageJson }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve()); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve()); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve()); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve()); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(0); expect(betrayedSource.invoked).to.equal(1); }); }); it('should work around not_found errors when fetching the downloaded data', () => { sepia.enable(); const data = { name: 'bower-fork' }; const packageJson = { name: 'bower-fork', repository: { type: 'git', url: 'git://github.com/user/bower.git' }, }; const downloadedPackageJson = { name: 'some-module-that-will-never-exist', }; const downloaded = { downloader: 'github', dir: tmpDir, packageJson: downloadedPackageJson, gitRef: null }; const betrayedMetadata = betray(collect.collectors, 'metadata', () => Promise.resolve()); const betrayedNpm = betray(collect.collectors, 'npm', () => Promise.resolve()); const betrayedGithub = betray(collect.collectors, 'github', () => Promise.resolve()); const betrayedSource = betray(collect.collectors, 'source', () => Promise.resolve()); return collect(data, packageJson, downloaded, npmNano) .then(() => { expect(betrayedMetadata.invoked).to.equal(1); expect(betrayedNpm.invoked).to.equal(1); expect(betrayedGithub.invoked).to.equal(0); expect(betrayedSource.invoked).to.equal(0); }) .finally(() => sepia.disable()); }); }); describe('empty', () => { it('should generate an empty collected object'); }); }); ================================================ FILE: test/spec/analyze/collect/metadata.js ================================================ 'use strict'; const expect = require('chai').expect; const sepia = require(`${process.cwd()}/test/util/sepia`); const chronokinesis = require('chronokinesis'); const loadJsonFile = require('load-json-file'); const packageJsonFromData = require(`${process.cwd()}/lib/analyze/util/packageJsonFromData`); const metadata = require(`${process.cwd()}/lib/analyze/collect/metadata`); const fixturesDir = `${process.cwd()}/test/fixtures/analyze/collect`; describe('metadata', () => { before(() => { sepia.fixtureDir(`${fixturesDir}/recorded/metadata`); chronokinesis.travel('2016-05-08T10:00:00.000Z'); }); after(() => chronokinesis.reset()); ['cross-spawn', '@bcoe/express-oauth-server'].forEach((name) => { it(`should collect \`${name}\` correctly`, () => { const escapedName = name.replace('/', '%2f'); const data = loadJsonFile.sync(`${fixturesDir}/modules/${escapedName}/data.json`); const expected = loadJsonFile.sync(`${fixturesDir}/modules/${escapedName}/expected-metadata.json`); return metadata(data, packageJsonFromData(name, data)) .then((collected) => expect(collected).to.eql(expected)); }); }); it('should do a best effort to get the author username'); it('should do a best effort to extract the publisher', () => ( // Extract from npmUser Promise.try(() => { const packageJson = { name: 'cross-spawn', _npmUser: { name: 'satazor', email: 'andremiguelcruz@msn.com' }, }; return metadata({}, packageJson) .then((collected) => expect(collected.publisher).to.eql({ username: 'satazor', email: 'andremiguelcruz@msn.com' })); }) // Compare author with maintainers (top-level) .then(() => { const data = { maintainers: [{ name: 'satazor', email: 'andremiguelcruz@msn.com' }] }; const packageJson = { name: 'cross-spawn', author: { name: 'André Cruz', email: 'andremiguelcruz@msn.com' }, }; return metadata(data, packageJson) .then((collected) => expect(collected.publisher).to.eql({ username: 'satazor', email: 'andremiguelcruz@msn.com' })); }) // Compare author with maintainers .then(() => { const packageJson = { name: 'cross-spawn', author: { name: 'André Cruz', email: 'andremiguelcruz@msn.com' }, maintainers: [{ name: 'satazor', email: 'andremiguelcruz@msn.com' }], }; return metadata({}, packageJson) .then((collected) => expect(collected.publisher).to.eql({ username: 'satazor', email: 'andremiguelcruz@msn.com' })); }) )); it('should do a best effort to extract the maintainers', () => ( // Compare author with maintainers (top-level) Promise.try(() => { const data = { maintainers: [{ name: 'satazor', email: 'andremiguelcruz@msn.com' }] }; const packageJson = { name: 'cross-spawn' }; return metadata(data, packageJson) .then((collected) => expect(collected.maintainers).to.eql([{ username: 'satazor', email: 'andremiguelcruz@msn.com' }])); }) // Compare author with maintainers .then(() => { const packageJson = { name: 'cross-spawn', maintainers: [{ name: 'satazor', email: 'andremiguelcruz@msn.com' }], }; return metadata({}, packageJson) .then((collected) => expect(collected.maintainers).to.eql([{ username: 'satazor', email: 'andremiguelcruz@msn.com' }])); }) )); it('should not fail if there are no versions nor time properties', () => ( metadata({}, { name: 'cross-spawn' }) .then((collected) => expect(collected.name).to.equal('cross-spawn')) )); it('should handle strange README\'s', () => ( // In old modules the README is an object, e.g.: `flatsite` metadata({ readme: {} }, { name: 'flatsite' }) .then((collected) => expect(collected).to.not.have.property('readme')) )); it('should handle bundleDependencies compatibility', () => { const packageJson = { name: 'flatsite', bundleDependencies: { react: '15.0.0' }, }; // In old modules the README is an object, e.g.: `flatsite` return metadata({}, packageJson) .then((collected) => expect(collected.bundledDependencies).to.eql({ react: '15.0.0' })); }); it('should detect deprecated packages', () => ( Promise.try(() => ( metadata({}, { name: 'cross-spawn', deprecated: 'use something else' }) .then((collected) => expect(collected.deprecated).to.equal('use something else')) ) // Test when deprecated is not a string // There's some packages such as oh-flex that have an invalid deprecated field // that was manually written in the package.json... .then(() => ( metadata({}, { name: 'cross-spawn', deprecated: {} }) .then((collected) => expect(collected.deprecated).to.equal(undefined))) )) )); it('should detect repositories with no test script', () => ( // No scripts Promise.try(() => ( metadata({}, { name: 'cross-spawn' }) .then((collected) => expect(collected).to.not.have.property('hasTestScript')) )) // No test scripts .then(() => ( metadata({}, { name: 'cross-spawn', scripts: {} }) .then((collected) => expect(collected).to.not.have.property('hasTestScript')) )) // No tests specified .then(() => ( metadata({}, { name: 'cross-spawn', scripts: { test: 'no test specified' } }) .then((collected) => expect(collected).to.not.have.property('hasTestScript')) )) // Detect test .then(() => ( metadata({}, { name: 'cross-spawn', scripts: { test: 'mocha' } }) .then((collected) => expect(collected.hasTestScript).to.equal(true)) )) )); it('should detect & remove broken links', () => ( // Test all broken Promise.try(() => ( metadata({}, { name: 'broken-link', homepage: 'http://somedomainthatwillneverexist.org', repository: { type: 'git', url: 'git://github.com/some-org/some-module-that-will-never-exist.git' }, bugs: 'http://somedomainthatwillneverexist.org', }) .then((collected) => expect(Object.keys(collected.links)).to.eql(['npm'])) )) // Test broken homepage (should fallback to repository) .then(() => ( metadata({}, { name: 'broken-link', homepage: 'http://somedomainthatwillneverexist.org', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, }) .then((collected) => { expect(Object.keys(collected.links)).to.eql(['npm', 'homepage', 'repository', 'bugs']); expect(collected.links.homepage).to.equal('https://github.com/IndigoUnited/node-cross-spawn#readme'); }) )) )); describe('license', () => { it('should deal with licenses as arrays of strings', () => ( metadata({}, { name: 'cross-spawn', license: ['MIT'] }) .then((collected) => expect(collected.license).to.equal('MIT')) )); it('should deal with licenses as arrays of objects', () => ( metadata({}, { name: 'cross-spawn', license: [ { type: 'MIT', url: 'https://opensource.org/licenses/MIT' }, { type: 'GPL-3.0', url: 'https://opensource.org/licenses/GPL-3.0' }, ], }) .then((collected) => expect(collected.license).to.equal('MIT OR GPL-3.0')) )); it('should deal with licenses as objects', () => ( metadata({}, { name: 'cross-spawn', license: { type: 'MIT', url: 'https://opensource.org/licenses/MIT' }, }) .then((collected) => expect(collected.license).to.equal('MIT')) )); it('should deal with weird licenses value types', () => ( // Empty string Promise.try(() => ( metadata({}, { name: 'cross-spawn', license: { type: '', url: 'https://opensource.org/licenses/MIT' }, }) .then((collected) => expect(collected.license).to.equal(undefined)) )) // String with spaces (e.g.: webjs-cli) .then(() => ( metadata({}, { name: 'cross-spawn', license: { type: ' ', url: 'https://opensource.org/licenses/MIT' }, }) .then((collected) => expect(collected.license).to.equal(undefined)) )) // Nullish .then(() => ( metadata({}, { name: 'cross-spawn', license: { type: null, url: 'https://opensource.org/licenses/MIT' }, }) .then((collected) => expect(collected.license).to.equal(undefined)) )) )); it('should preserve spdx expressions', () => ( metadata({}, { name: 'cross-spawn', license: 'MIT OR GPL-3.0', }) .then((collected) => expect(collected.license).to.equal('MIT OR GPL-3.0')) )); it('should correct to spdx licenses', () => ( // Test auto-correct Promise.try(() => ( metadata({}, { name: 'cross-spawn', license: 'GPL', }) .then((collected) => expect(collected.license).to.equal('GPL-3.0-or-later')) )) // Test invalid license .then(() => ( metadata({}, { name: 'cross-spawn', license: 'foobar', }) .then((collected) => expect(collected.license).to.equal(undefined)) )) )); }); describe('empty', () => { it('should generate an empty metadata object'); }); }); ================================================ FILE: test/spec/analyze/collect/npm.js ================================================ 'use strict'; const expect = require('chai').expect; const sepia = require(`${process.cwd()}/test/util/sepia`); const chronokinesis = require('chronokinesis'); const nano = require('nano'); const loadJsonFile = require('load-json-file'); const packageJsonFromData = require(`${process.cwd()}/lib/analyze/util/packageJsonFromData`); const npm = require(`${process.cwd()}/lib/analyze/collect/npm`); const fixturesDir = `${process.cwd()}/test/fixtures/analyze/collect`; const npmNano = Promise.promisifyAll(nano('https://skimdb.npmjs.com/registry')); describe('npm', () => { before(() => { sepia.fixtureDir(`${fixturesDir}/recorded/npm`); chronokinesis.travel('2016-05-09T18:00:00.000Z'); }); after(() => chronokinesis.reset()); ['cross-spawn'].forEach((name) => { it(`should collect \`${name}\` correctly`, () => { const data = loadJsonFile.sync(`${fixturesDir}/modules/${name}/data.json`); const expected = loadJsonFile.sync(`${fixturesDir}/modules/${name}/expected-npm.json`); sepia.enable(); return npm(data, packageJsonFromData(name, data), npmNano) .then((collected) => expect(collected).to.eql(expected)) .finally(() => sepia.disable()); }); }); it('should handle no results when querying `app/dependedUpon` view'); // it('should handle no results when querying `app/dependedUpon` view', () => { // const betrayed = betray(npmNano, 'viewAsync', () => Promise.resolve({ rows: [] })); // const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); // return npm(data, packageJsonFromData('cross-spawn', data), npmNano) // .then((collected) => expect(collected.dependentsCount).to.equal(0)) // .finally(() => betrayed.restore()); // }); it('should handle no stats yet error from api.npmjs.org (404)', () => { sepia.nock('https://api.npmjs.org') .get((path) => path.indexOf('/downloads/range/') === 0) .reply(404, { error: 'package cross-spawn not found' }); const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); return npm(data, packageJsonFromData('cross-spawn', data), npmNano) .then((collected) => { collected.downloads.forEach((download) => expect(download.count).to.equal(0)); }) .finally(() => sepia.nock.cleanAll()); }); it('should retry on network errors'); }); ================================================ FILE: test/spec/analyze/collect/source.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const loadJsonFile = require('load-json-file'); const expect = require('chai').expect; const betray = require('betray'); const sepia = require(`${process.cwd()}/test/util/sepia`); const packageJsonFromData = require(`${process.cwd()}/lib/analyze/util/packageJsonFromData`); const githubDownloader = require(`${process.cwd()}/lib/analyze/download/github`); const npmDownloader = require(`${process.cwd()}/lib/analyze/download/npm`); const source = require(`${process.cwd()}/lib/analyze/collect/source`); const tmpDir = `${process.cwd()}/test/tmp`; const fixturesDir = `${process.cwd()}/test/fixtures/analyze/collect`; function mockExternal(mocks, dir) { mocks = Object.assign({ clone: () => {}, checkout: () => {} }, mocks); dir = dir || tmpDir; return betray(cp, 'exec', [ { match: (command) => command.indexOf('bin/david') !== -1, handle: (command, options, callback) => { let json; try { json = (mocks.david && mocks.david(command)) || {}; } catch (err) { return callback(err, err.stdout || '', err.stderr || ''); } fs.writeFileSync(`${dir}/.npms-david.json`, JSON.stringify(json)); callback(null, '', ''); }, }, { match: () => true, handle: () => { throw new Error('Not mocked'); }, }, ]); } describe('source', () => { before(() => sepia.fixtureDir(`${fixturesDir}/recorded/source`)); beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); [ { name: 'cross-spawn', downloader: githubDownloader }, { name: 'planify', downloader: githubDownloader }, { name: 'hapi', downloader: githubDownloader }, { name: '0', downloader: npmDownloader }, { name: 'backoff', downloader: githubDownloader }, ].forEach((entry) => { it(`should collect \`${entry.name}\` correctly`, () => { sepia.enable(); const escapedName = entry.name.replace('/', '%2f'); const data = loadJsonFile.sync(`${fixturesDir}/modules/${escapedName}/data.json`); const packageJson = packageJsonFromData(entry.name, data); const expected = loadJsonFile.sync(`${fixturesDir}/modules/${escapedName}/expected-source.json`); return entry.downloader(packageJson)(tmpDir) .then((downloaded) => { const betrayed = mockExternal(); return source(data, packageJson, downloaded) .then((collected) => expect(collected).to.eql(expected)) .finally(() => betrayed.restore()); }) .finally(() => sepia.disable()); }); }); describe('monorepos', () => { [ { name: 'react-router', downloader: githubDownloader }, { name: 'babel-jest', downloader: githubDownloader }, ].forEach((entry) => { it(`should collect \`${entry.name}\` correctly`, () => { sepia.enable(); const data = loadJsonFile.sync(`${fixturesDir}/modules/${entry.name}/data.json`); const packageJson = packageJsonFromData(entry.name, data); const expected = loadJsonFile.sync(`${fixturesDir}/modules/${entry.name}/expected-source.json`); return entry.downloader(packageJson)(tmpDir) .then((downloaded) => { const betrayed = mockExternal(null, downloaded.packageDir); return source(data, packageJson, downloaded) .then((collected) => expect(collected).to.eql(expected)) .finally(() => betrayed.restore()); }) .finally(() => sepia.disable()); }); }); it('should detect tests on the package dir and fallback to root', () => { sepia.enable(); const betrayed = mockExternal(null, `${tmpDir}/cross-spawn`); const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); fs.mkdirSync(`${tmpDir}/cross-spawn`); fs.writeFileSync(`${tmpDir}/cross-spawn/package.json`, JSON.stringify(packageJson)); fs.writeFileSync(`${tmpDir}/cross-spawn/test.js`, 'foo'); fs.writeFileSync(`${tmpDir}/test.js`, 'foobar'); return Promise.try(() => ( source(data, packageJson, { dir: tmpDir, packageDir: `${tmpDir}/cross-spawn` }) .then((collected) => expect(collected.files.testsSize).to.equal(3)) )) .then(() => { fs.unlinkSync(`${tmpDir}/cross-spawn/test.js`); return source(data, packageJson, { dir: tmpDir, packageDir: `${tmpDir}/cross-spawn` }) .then((collected) => expect(collected.files.testsSize).to.equal(6)); }) .finally(() => { sepia.disable(); betrayed.restore(); }); }); it('should detect changelog on the package dir and fallback to root', () => { sepia.enable(); const betrayed = mockExternal(null, `${tmpDir}/cross-spawn`); const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); fs.mkdirSync(`${tmpDir}/cross-spawn`); fs.writeFileSync(`${tmpDir}/cross-spawn/package.json`, JSON.stringify(packageJson)); fs.writeFileSync(`${tmpDir}/cross-spawn/CHANGELOG.md`, 'foo'); return Promise.try(() => ( source(data, packageJson, { dir: tmpDir, packageDir: `${tmpDir}/cross-spawn` }) .then((collected) => expect(collected.files.hasChangelog).to.equal(true)) )) .then(() => { fs.unlinkSync(`${tmpDir}/cross-spawn/CHANGELOG.md`); fs.writeFileSync(`${tmpDir}/CHANGELOG.md`, 'foo'); return source(data, packageJson, { dir: tmpDir, packageDir: `${tmpDir}/cross-spawn` }) .then((collected) => expect(collected.files.hasChangelog).to.equal(true)); }) .finally(() => { sepia.disable(); betrayed.restore(); }); }); it('should detect readme badges on the package dir and root', () => { sepia.enable(); const betrayed = mockExternal(null, `${tmpDir}/cross-spawn`); const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); fs.mkdirSync(`${tmpDir}/cross-spawn`); fs.writeFileSync(`${tmpDir}/cross-spawn/package.json`, JSON.stringify(packageJson)); fs.writeFileSync(`${tmpDir}/README.md`, ` # planify [![NPM version][npm-image]][npm-url] [npm-url]:https://npmjs.org/package/planify [npm-image]:http://img.shields.io/npm/v/planify.svg `); return Promise.try(() => ( source(data, packageJson, { dir: tmpDir, packageDir: `${tmpDir}/cross-spawn` }) .then((collected) => expect(collected.badges).to.have.length(7)) )) .then(() => { delete data.readme; return source(data, packageJson, { dir: tmpDir, packageDir: `${tmpDir}/cross-spawn` }) .then((collected) => expect(collected.badges).to.have.length(1)); }) .finally(() => { sepia.disable(); betrayed.restore(); }); }); it('should detect linters on the package dir and root', () => { sepia.enable(); const betrayed = mockExternal(null, `${tmpDir}/cross-spawn`); const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); fs.mkdirSync(`${tmpDir}/cross-spawn`); fs.writeFileSync(`${tmpDir}/cross-spawn/package.json`, JSON.stringify(packageJson)); fs.writeFileSync(`${tmpDir}/cross-spawn/.editorconfig`, 'foo'); fs.writeFileSync(`${tmpDir}/.eslintrc.json`, 'foo'); return Promise.try(() => ( source(data, packageJson, { dir: tmpDir, packageDir: `${tmpDir}/cross-spawn` }) .then((collected) => expect(collected.linters).to.eql(['editorconfig', 'eslint'])) )) .then(() => { fs.unlinkSync(`${tmpDir}/cross-spawn/.editorconfig`); return source(data, packageJson, { dir: tmpDir, packageDir: `${tmpDir}/cross-spawn` }) .then((collected) => expect(collected.linters).to.eql(['eslint'])); }) .finally(() => { sepia.disable(); betrayed.restore(); }); }); it('should ignore malformed downloaded package.json when detecting linters'); }); it('should work around NPM_TOKEN env var, e.g.: `babbel`'); it('should handle broken dependencies when checking outdated with david', () => { sepia.enable(); const betrayed = mockExternal({ david: () => { throw Object.assign(new Error('foo'), { stderr: 'failed to get versions' }); }, }); const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify(packageJson)); return source(data, packageJson, { dir: tmpDir, packageDir: tmpDir }) .then((collected) => expect(collected.outdatedDependencies).to.equal(false)) .finally(() => { sepia.disable(); betrayed.restore(); }); }); it('should handle broken package data when checking outdated with david', () => { sepia.enable(); const betrayed = mockExternal({ david: () => { throw Object.assign(new Error('foo'), { stderr: 'data[currentVersion].versions.sort is not a function' }); }, }); const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify(packageJson)); return source(data, packageJson, { dir: tmpDir, packageDir: tmpDir }) .then((collected) => expect(collected.outdatedDependencies).to.equal(false)) .finally(() => { sepia.disable(); betrayed.restore(); }); }); it('should handle broken package name when checking outdated with david', () => { sepia.enable(); const betrayed = mockExternal({ david: () => { throw Object.assign(new Error('foo'), { stderr: 'AssertionError [ERR_ASSERTION]' }); }, }); const data = loadJsonFile.sync(`${fixturesDir}/modules/cross-spawn/data.json`); const packageJson = packageJsonFromData('cross-spawn', data); fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify(packageJson)); return source(data, packageJson, { dir: tmpDir, packageDir: tmpDir }) .then((collected) => expect(collected.outdatedDependencies).to.equal(false)) .finally(() => { sepia.disable(); betrayed.restore(); }); }); it('should signal as unrecoverable if there\'s a .npmrc pointing to a private registry'); it('should retry on network errors'); }); ================================================ FILE: test/spec/analyze/collect/util/fileContents.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const expect = require('chai').expect; const fileContents = require(`${process.cwd()}/lib/analyze/collect/util/fileContents`); const tmpDir = `${process.cwd()}/test/tmp`; describe('fileContents', () => { beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should return the file contents of the given path', () => { fs.writeFileSync(`${tmpDir}/foo`, 'foo'); return fileContents(`${tmpDir}/foo`) .then((contents) => expect(contents).to.equal('foo')); }); it('should return 0 if the path does not exist', () => ( fileContents(`${tmpDir}/foo`) .then((contents) => expect(contents).to.equal(null)) )); it('should return 0 on recursive symlinks', () => { fs.symlinkSync(`${tmpDir}/foo`, `${tmpDir}/bar`); fs.symlinkSync(`${tmpDir}/bar`, `${tmpDir}/foo`); return fileContents(`${tmpDir}/foo`) .then((contents) => expect(contents).to.equal(null)); }); it('should return 0 for non-file paths', () => { fs.mkdirSync(`${tmpDir}/foo`); return fileContents(`${tmpDir}/foo`) .then((contents) => expect(contents).to.equal(null)); }); }); ================================================ FILE: test/spec/analyze/collect/util/fileSize.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const expect = require('chai').expect; const fileSize = require(`${process.cwd()}/lib/analyze/collect/util/fileSize`); const tmpDir = `${process.cwd()}/test/tmp`; describe('fileSize', () => { beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should return the size of the given path', () => { fs.writeFileSync(`${tmpDir}/foo`, 'foo'); return fileSize(`${tmpDir}/foo`) .then((size) => expect(size).to.equal(3)); }); it('should return the size of the given paths', () => { fs.writeFileSync(`${tmpDir}/foo`, 'foo'); fs.writeFileSync(`${tmpDir}/fooz`, 'fooz'); return fileSize([`${tmpDir}/foo`, `${tmpDir}/fooz`]) .then((size) => expect(size).to.equal(7)); }); it('should return 0 if the path does not exist', () => ( fileSize(`${tmpDir}/foo`) .then((size) => expect(size).to.equal(0)) .then(() => fileSize([`${tmpDir}/foo`, `${tmpDir}/bar`])) .then((size) => expect(size).to.equal(0)) )); it('should return 0 on recursive symlinks', () => { fs.symlinkSync(`${tmpDir}/foo`, `${tmpDir}/bar`); fs.symlinkSync(`${tmpDir}/bar`, `${tmpDir}/foo`); return fileSize(`${tmpDir}/foo`) .then((size) => expect(size).to.equal(0)); }); it('should return 0 for non-file paths', () => { fs.mkdirSync(`${tmpDir}/foo`); return fileSize(`${tmpDir}/foo`) .then((size) => expect(size).to.equal(0)); }); describe('dir', () => { it('should recursively sum the size of all files in a directory', () => { fs.writeFileSync(`${tmpDir}/foo`, 'foo'); fs.writeFileSync(`${tmpDir}/.foo`, '.foo'); // Test hidden files fs.mkdirSync(`${tmpDir}/dir`); fs.writeFileSync(`${tmpDir}/dir/bar`, 'bar'); fs.writeFileSync(`${tmpDir}/dir/.bar`, '.bar'); // Test hidden files return fileSize.dir(`${tmpDir}`) .then((size) => expect(size).to.equal(14)); }); }); }); ================================================ FILE: test/spec/analyze/collect/util/pointsToRanges.js ================================================ 'use strict'; const expect = require('chai').expect; const chronokinesis = require('chronokinesis'); const pointsToRanges = require(`${process.cwd()}/lib/analyze/collect/util/pointsToRanges`); describe('pointsToRanges', () => { it('should arrange points into ranges', () => { const points = { a: { date: '2016-05-01T00:00:00.000Z', value: 'foo', }, b: { date: '2016-05-10T00:00:00.000Z', value: 'foo', }, c: { date: '2016-05-20T00:00:00.000Z', value: 'foo', }, d: { date: '2016-05-30T00:00:00.000Z', value: 'foo', }, e: { date: '2016-06-10T00:00:00.000Z', value: 'foo', }, f: { date: '2016-06-20T00:00:00.000Z', value: 'foo', }, }; const ranges = pointsToRanges(Object.values(points), [ { start: '2016-05-01T00:00:00.000Z', end: '2016-05-11T00:00:00.000Z' }, { start: '2016-05-11T00:00:00.000Z', end: '2016-05-12T00:00:00.000Z' }, { start: '2016-05-12T00:00:00.000Z', end: '2016-06-10T00:00:00.000Z' }, { start: '2016-06-10T00:00:00.000Z', end: '2017-01-01T00:00:00.000Z' }, ]); expect(ranges).to.eql([ { from: '2016-05-01T00:00:00.000Z', to: '2016-05-11T00:00:00.000Z', points: [points.a, points.b], }, { from: '2016-05-11T00:00:00.000Z', to: '2016-05-12T00:00:00.000Z', points: [], }, { from: '2016-05-12T00:00:00.000Z', to: '2016-06-10T00:00:00.000Z', points: [points.c, points.d], }, { from: '2016-06-10T00:00:00.000Z', to: '2017-01-01T00:00:00.000Z', points: [points.e, points.f], }, ]); }); describe('bucketsFromBreakpoints', () => { before(() => chronokinesis.travel('2016-05-14T15:00:00.000Z')); after(() => chronokinesis.reset()); it('should generate ranges based on breakpoints', () => { const ranges = pointsToRanges.bucketsFromBreakpoints([1, 7, 15, 30, 90]); const dates = ranges.map((range) => [range.start.toISOString(), range.end.toISOString()]); expect(dates).to.eql([ ['2016-05-13T00:00:00.000Z', '2016-05-14T00:00:00.000Z'], ['2016-05-07T00:00:00.000Z', '2016-05-14T00:00:00.000Z'], ['2016-04-29T00:00:00.000Z', '2016-05-14T00:00:00.000Z'], ['2016-04-14T00:00:00.000Z', '2016-05-14T00:00:00.000Z'], ['2016-02-14T00:00:00.000Z', '2016-05-14T00:00:00.000Z'], ]); }); }); }); ================================================ FILE: test/spec/analyze/collect/util/promisePropsSettled.js ================================================ 'use strict'; const expect = require('chai').expect; const promisePropsSettled = require(`${process.cwd()}/lib/analyze/collect/util/promisePropsSettled`); describe('promisePropsSettled', () => { it('should behave like Promise.props', () => ( promisePropsSettled({ foo: 'foo', bar: Promise.resolve('bar'), }) .then((props) => expect(props).to.eql({ foo: 'foo', bar: 'bar' })) )); it('should resolve only when all promises are finished', () => { const startTime = Date.now(); return promisePropsSettled({ foo: Promise.delay(500), bar: Promise.reject(new Error('foo')), }) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.message).to.equal('foo'); expect(Date.now() - startTime).to.be.above(498); }); }); }); ================================================ FILE: test/spec/analyze/download/git.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const loadJsonFile = require('load-json-file'); const expect = require('chai').expect; const betray = require('betray'); const git = require(`${process.cwd()}/lib/analyze/download/git`); const tmpDir = `${process.cwd()}/test/tmp`; function mock(mocks) { mocks = Object.assign({ clone: () => {}, checkout: () => {} }, mocks); return betray(cp, 'exec', [ { match: (command) => command.indexOf('clone') !== -1, handle: (command, options, callback) => { try { mocks.clone && mocks.clone(command); } catch (err) { return callback(err, err.stdout || '', err.stderr || ''); } cp.execSync(`mkdir -p ${tmpDir}/.git`); callback(null, '', ''); }, }, { match: (command) => command.indexOf('checkout') !== -1, handle: (command, options, callback) => { try { mocks.checkout && mocks.checkout(command); } catch (err) { return callback(err, err.stdout || '', err.stderr || ''); } callback(null, '', ''); }, }, ]); } describe('git', () => { beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should detect GitHub, GitLab and BitBucket endpoints', () => { let download; download = git({ repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' } }); expect(download).to.be.a('function'); download = git({ repository: { type: 'git', url: 'git@github.com:IndigoUnited/node-cross-spawn.git' } }); expect(download).to.be.a('function'); download = git({ repository: { type: 'git', url: 'https://github.com/IndigoUnited/node-cross-spawn.git' } }); expect(download).to.be.a('function'); download = git({ repository: { type: 'git', url: 'git@bitbucket.org:fvdm/node-xml2json.git' } }); expect(download).to.be.a('function'); download = git({ repository: { type: 'git', url: 'https://bitbucket.org/fvdm/node-xml2json.git' } }); expect(download).to.be.a('function'); download = git({ repository: { type: 'git', url: 'git@gitlab.com:codium/angular-ui-select.git' } }); expect(download).to.be.a('function'); download = git({ repository: { type: 'git', url: 'https://gitlab.com/codium/angular-ui-select.git' } }); expect(download).to.be.a('function'); download = git({ repository: { type: 'git', url: 'https://foo.com/IndigoUnited/node-cross-spawn.git' } }); expect(download).to.equal(null); download = git({ repository: null }); expect(download).to.equal(null); download = git({}); expect(download).to.equal(null); }); it('should clone a GitHub repository and checkout a specific ref', () => { const betrayed = mock({ checkout: () => fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cross-spawn', version: '0.1.0' })), }); return Promise.each([ 'git://github.com/IndigoUnited/node-cross-spawn.git', 'git@github.com:IndigoUnited/node-cross-spawn.git', 'https://github.com/IndigoUnited/node-cross-spawn.git', ], (url) => { const download = git({ name: 'cross-spawn', repository: { type: 'git', url }, gitHead: '5fb20ce2f44d9947fcf59e8809fe6cb1d767433b', }); return download(tmpDir) .then((downloaded) => { expect(downloaded.downloader).to.equal('git'); expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('cross-spawn'); expect(downloaded.gitRef).to.equal('5fb20ce2f44d9947fcf59e8809fe6cb1d767433b'); }) .then(() => loadJsonFile.sync(`${tmpDir}/package.json`)) .then((packageJson) => { expect(betrayed.invoked).to.be.greaterThan(1); expect(packageJson.version).to.equal('0.1.0'); cp.execSync(`rm -rf ${tmpDir}`); cp.execSync(`mkdir -p ${tmpDir}`); }); }) .finally(() => betrayed.restore()); }); it('should clone a Bitbucket repository and checkout a specific ref', () => { const betrayed = mock({ checkout: () => fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'xml2json', version: '0.2.2' })), }); return Promise.each([ 'git@bitbucket.org:fvdm/node-xml2json.git', 'https://bitbucket.org/fvdm/node-xml2json.git', ], (url) => { const download = git({ name: 'xml2json', repository: { type: 'git', url }, gitHead: '4c8dc5c636f7bbb746ed519a39bb1b183a27064d', }); return download(tmpDir) .then((downloaded) => { expect(downloaded.downloader).to.equal('git'); expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('xml2json'); expect(downloaded.gitRef).to.equal('4c8dc5c636f7bbb746ed519a39bb1b183a27064d'); }) .then(() => loadJsonFile.sync(`${tmpDir}/package.json`)) .then((packageJson) => { expect(betrayed.invoked).to.be.greaterThan(1); expect(packageJson.version).to.equal('0.2.2'); cp.execSync(`rm -rf ${tmpDir}`); cp.execSync(`mkdir -p ${tmpDir}`); }); }) .finally(() => betrayed.restore()) .then(() => expect(betrayed.invoked).to.be.greaterThan(1)); }); it('should clone a GitLab repository and checkout a specific ref', () => { const betrayed = mock({ checkout: () => fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'angular-ui-select', version: '0.2.0' })), }); return Promise.each([ 'git@gitlab.com:codium/angular-ui-select.git', 'https://gitlab.com/codium/angular-ui-select.git', ], (url) => { const download = git({ name: 'angular-ui-select', repository: { type: 'git', url }, gitHead: '560042cc9005e5f2c2889a3c7e64ea3ea0b80c88', }); return download(tmpDir) .then((downloaded) => { expect(downloaded.downloader).to.equal('git'); expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('angular-ui-select'); expect(downloaded.gitRef).to.equal('560042cc9005e5f2c2889a3c7e64ea3ea0b80c88'); }) .then(() => loadJsonFile.sync(`${tmpDir}/package.json`)) .then((packageJson) => { expect(betrayed.invoked).to.be.greaterThan(1); expect(packageJson.version).to.equal('0.2.0'); cp.execSync(`rm -rf ${tmpDir}`); cp.execSync(`mkdir -p ${tmpDir}`); }); }) .finally(() => betrayed.restore()) .then(() => expect(betrayed.invoked).to.be.greaterThan(1)); }); it('should not fail if the ref does not exist (commit hash)', () => { const betrayed = mock({ clone: () => { fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cross-spawn' })); fs.writeFileSync(`${tmpDir}/appveyor.yml`, ''); }, checkout: () => { throw Object.assign(new Error('foo'), { stderr: 'fatal: reference is not a tree: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' }); }, }); const download = git({ name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', }); return download(tmpDir) .then((downloaded) => { expect(betrayed.invoked).to.be.greaterThan(1); expect(downloaded.downloader).to.equal('git'); expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('cross-spawn'); expect(downloaded.gitRef).to.equal(null); expect(() => fs.accessSync(`${tmpDir}/package.json`)).to.not.throw(); expect(() => fs.accessSync(`${tmpDir}/appveyor.yml`)).to.not.throw(); }) .finally(() => betrayed.restore()); }); it('should not fail if the ref does not exist (branch)', () => { const betrayed = mock({ clone: () => { fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cross-spawn' })); fs.writeFileSync(`${tmpDir}/appveyor.yml`, ''); }, checkout: () => { throw Object.assign(new Error('foo'), { stderr: 'error: pathspec \'foo\' did not match any file(s) known to git.' }); }, }); const download = git({ name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'foo', }); return download(tmpDir) .then(() => { expect(betrayed.invoked).to.be.greaterThan(1); expect(() => fs.accessSync(`${tmpDir}/package.json`)).to.not.throw(); expect(() => fs.accessSync(`${tmpDir}/appveyor.yml`)).to.not.throw(); }) .finally(() => betrayed.restore()); }); it('should deal with non-existent repositories', () => { const betrayed = mock({ clone: () => { throw Object.assign(new Error('foo'), { stderr: '\nline\nERROR: Repository not found.\nline\nline' }); }, }); const download = git({ name: 'cool-module', repository: { type: 'git', url: 'git://github.com/some-org/repo-404.git' }, }); return download(tmpDir) .then(() => { expect(betrayed.invoked).to.be.greaterThan(1); expect(fs.readdirSync(tmpDir)).to.eql(['package.json']); }) .finally(() => betrayed.restore()); }); it('should deal with permission errors', () => { const stderrArray = [ 'not found', '\nline\nfatal: Authentication failed for `url`.\nline\nline', ]; return Promise.map(stderrArray, (stderr) => { const betrayed = mock({ clone: () => { throw Object.assign(new Error('foo'), { stderr }); }, }); const download = git({ name: 'cool-module', repository: { type: 'git', url: 'git://github.com/some-org/repo-private.git' }, }); return download(tmpDir) .then(() => { expect(betrayed.invoked).to.be.greaterThan(1); expect(fs.readdirSync(tmpDir)).to.eql(['package.json']); }) .finally(() => betrayed.restore()); }); }); it('should deal with invalid repositories', () => { const stderrArray = [ '\nline\nfatal: unable to access url: The requested URL returned error: `code`', 'is this a git repository', ]; return Promise.map(stderrArray, (stderr) => { const betrayed = mock({ clone: () => { throw Object.assign(new Error('foo'), { stderr }); }, }); const download = git({ name: 'cool-module', repository: { type: 'git', url: 'git://github.com/some-org/foo%25bar.git' }, }); return download(tmpDir) .then(() => { expect(betrayed.invoked).to.be.greaterThan(1); expect(fs.readdirSync(tmpDir)).to.eql(['package.json']); }) .finally(() => betrayed.restore()); }); }); it('should abort if it\'s taking too much time'); it('should fail if the tarball has too many files', () => { const betrayed = mock({ clone: () => fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cross-spawn', version: '0.1.0' })), }); const download = git({ name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, }, { maxFiles: 1 }); return download(tmpDir) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.message).to.match(/too many file/i); expect(err.unrecoverable).to.equal(true); }) .finally(() => betrayed.restore()); }); it('should delete the .git folder', () => { const betrayed = mock(); const download = git({ name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, }); return download(tmpDir) .then(() => { expect(betrayed.invoked).to.be.greaterThan(1); expect(() => fs.accessSync(`${tmpDir}/.git`)).to.throw(/ENOENT/); cp.execSync(`rm -rf ${tmpDir}`); cp.execSync(`mkdir -p ${tmpDir}`); }) .finally(() => betrayed.restore()); }); it('should merge package.json', () => { const betrayed = mock({ checkout: () => fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cross-spawn', version: '1.0.0', description: 'Cross platform child_process#spawn and child_process#spawnSync', })), }); const npmPackageJson = { name: 'cool-module', version: '0.1.0', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'b5239f25c0274feba89242b77d8f0ce57dce83ad', // This is the ref for 1.0.0 }; const download = git(npmPackageJson); return download(tmpDir) .then(() => loadJsonFile.sync(`${tmpDir}/package.json`)) .then((packageJson) => { expect(betrayed.invoked).to.be.greaterThan(1); expect(packageJson.name).to.equal('cool-module'); expect(packageJson.version).to.equal('0.1.0'); expect(packageJson.description).to.equal('Cross platform child_process#spawn and child_process#spawnSync'); // Test if properties were merged back expect(npmPackageJson.name).to.equal('cool-module'); expect(npmPackageJson.version).to.equal('0.1.0'); expect(npmPackageJson.description).to.equal('Cross platform child_process#spawn and child_process#spawnSync'); }) .finally(() => betrayed.restore()); }); it('should remove the package-lock.json file', () => { const betrayed = mock({ checkout: () => { fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ version: '1.0.0' })); fs.writeFileSync(`${tmpDir}/package-lock.json`, JSON.stringify({ version: '1.0.0' })); }, }); const download = git({ name: 'babel-preset-moxy', version: '2.3.1', repository: { type: 'git', url: 'git://github.com/moxystudio/babel-preset-moxy' }, gitHead: 'b77ba80b71d6898970e2541b1f1c34d86ba493f7', // This is the ref for 2.3.1 }); return download(tmpDir) .then(() => { expect(fs.existsSync(`${tmpDir}/package-lock.json`)).to.equal(false); }) .finally(() => betrayed.restore()); }); it('should resolve with the downloaded object', () => { const betrayed = mock({ checkout: () => fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cross-spawn', version: '1.0.0' })), }); const download = git({ name: 'cool-module', version: '0.1.0', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'b5239f25c0274feba89242b77d8f0ce57dce83ad', // This is the ref for 1.0.0 }); return download(tmpDir) .then((downloaded) => { expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('cross-spawn'); expect(downloaded.packageJson.version).to.equal('1.0.0'); }) .finally(() => betrayed.restore()); }); it('should detect the proper `packageDir` for mono-repositories', () => { const betrayed = mock({ checkout: () => { fs.mkdirSync(`${tmpDir}/cool-module`); fs.writeFileSync(`${tmpDir}/cool-module/package.json`, JSON.stringify({ name: 'cool-module', version: '1.0.0', })); }, }); const download = git({ name: 'cool-module', version: '0.1.0', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'b5239f25c0274feba89242b77d8f0ce57dce83ad', // This is the ref for 1.0.0 }); return download(tmpDir) .then((downloaded) => { expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(`${tmpDir}/cool-module`); expect(downloaded.packageJson.name).to.equal('cool-module'); expect(downloaded.packageJson.version).to.equal('1.0.0'); }) .finally(() => betrayed.restore()); }); it('should retry on network errors'); }); ================================================ FILE: test/spec/analyze/download/github.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const loadJsonFile = require('load-json-file'); const expect = require('chai').expect; const sepia = require(`${process.cwd()}/test/util/sepia`); const github = require(`${process.cwd()}/lib/analyze/download/github`); const tmpDir = `${process.cwd()}/test/tmp`; const fixturesDir = `${process.cwd()}/test/fixtures/analyze/download`; describe('github', () => { before(() => sepia.fixtureDir(`${fixturesDir}/recorded/github`)); beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should detect various GitHub urls', () => { let download; download = github({ repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' } }); expect(download).to.be.a('function'); download = github({ repository: { type: 'git', url: 'git@github.com:IndigoUnited/node-cross-spawn.git' } }); expect(download).to.be.a('function'); download = github({ repository: { type: 'git', url: 'https://github.com/IndigoUnited/node-cross-spawn.git' } }); expect(download).to.be.a('function'); download = github({ repository: { type: 'git', url: 'https://foo.com/IndigoUnited/node-cross-spawn.git' } }); expect(download).to.equal(null); download = github({ repository: null }); expect(download).to.equal(null); download = github({}); expect(download).to.equal(null); }); it('should download a specific commit hash', () => { sepia.enable(); const download = github({ name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'b5239f25c0274feba89242b77d8f0ce57dce83ad', }); return download(tmpDir) .then((downloaded) => { expect(downloaded.downloader).to.equal('github'); expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('cross-spawn'); expect(downloaded.gitRef).to.equal('b5239f25c0274feba89242b77d8f0ce57dce83ad'); }) .then(() => loadJsonFile.sync(`${tmpDir}/package.json`)) .then((packageJson) => expect(packageJson.version).to.equal('1.0.0')) .finally(() => sepia.disable()); }); it('should fallback to default branch if the commit hash does not exist', () => { sepia.enable(); const download = github({ name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', }); return download(tmpDir) .then((downloaded) => { expect(downloaded.downloader).to.equal('github'); expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('cross-spawn'); expect(downloaded.gitRef).to.equal(null); expect(() => fs.accessSync(`${tmpDir}/package.json`)).to.not.throw(); expect(() => fs.accessSync(`${tmpDir}/appveyor.yml`)).to.not.throw(); }) .finally(() => sepia.disable()); }); it('should fail if the tarball is too large', () => { sepia.nock('https://api.github.com') .get('/repos/liferay/liferay-portal/tarball/') .reply(200, 'foo', { 'Content-Length': '1000000000000', }); const download = github({ name: 'liferay-frontend-theme-classic-web', repository: { type: 'git', url: 'git+https://github.com/liferay/liferay-portal.git' }, }); return download(tmpDir) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(sepia.nock.isDone()).to.equal(true); expect(err.message).to.match(/too large/i); expect(err.unrecoverable).to.equal(true); }) .then(() => Promise.delay(2500)) // Wait some time because request.abort() might take a while .finally(() => sepia.nock.cleanAll()); }); it('should fail if the tarball has too many files', () => { sepia.enable(); const download = github({ name: 'cross-spawn', version: '0.1.0', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'b5239f25c0274feba89242b77d8f0ce57dce83ad', // This is the ref for 1.0.0 }, { maxFiles: 1 }); return download(tmpDir) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.message).to.match(/too many file/i); expect(err.unrecoverable).to.equal(true); }) .finally(() => sepia.disable()); }); it('should handle some 4xx errors', () => ( Promise.each([404, 403, 400], (code) => { sepia.nock('https://api.github.com') .get(`/repos/some-org/repo-${code}/tarball/`) .reply(code); const download = github({ name: 'cool-module', repository: { type: 'git', url: `git+https://github.com/some-org/repo-${code}.git` }, }); return download(tmpDir) .then(() => { expect(sepia.nock.isDone()).to.equal(true); expect(fs.readdirSync(tmpDir)).to.eql(['package.json']); }) .finally(() => sepia.nock.cleanAll()); }) )); it('should handle unavailable repositories'); it('should handle malformed URLs'); it('should prefer the passed package.json over the downloaded one', () => { sepia.enable(); const npmPackageJson = { name: 'cool-module', version: '0.1.0', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'b5239f25c0274feba89242b77d8f0ce57dce83ad', // This is the ref for 1.0.0 }; const download = github(npmPackageJson); return download(tmpDir) .then(() => loadJsonFile.sync(`${tmpDir}/package.json`)) .then((packageJson) => { expect(packageJson.name).to.equal('cool-module'); expect(packageJson.version).to.equal('0.1.0'); expect(packageJson.description).to.be.a('string'); // Test if properties were merged back expect(npmPackageJson.name).to.equal('cool-module'); expect(npmPackageJson.version).to.equal('0.1.0'); expect(npmPackageJson.description).to.be.a('string'); }) .finally(() => sepia.disable()); }); it('should remove the package-lock.json file', () => { sepia.enable(); const download = github({ name: 'babel-preset-moxy', version: '2.3.1', repository: { type: 'git', url: 'git://github.com/moxystudio/babel-preset-moxy' }, gitHead: 'b77ba80b71d6898970e2541b1f1c34d86ba493f7', // This is the ref for 2.3.1 }); return download(tmpDir) .then(() => { expect(fs.existsSync(`${tmpDir}/package-lock.json`)).to.equal(false); }) .finally(() => sepia.disable()); }); it('should resolve with the downloaded object', () => { sepia.enable(); const download = github({ name: 'cool-module', version: '0.1.0', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, gitHead: 'b5239f25c0274feba89242b77d8f0ce57dce83ad', // This is the ref for 1.0.0 }); return download(tmpDir) .then((downloaded) => { expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('cross-spawn'); expect(downloaded.packageJson.version).to.equal('1.0.0'); }) .finally(() => sepia.disable()); }); it('should detect the proper `packageDir` for mono-repositories', () => { sepia.enable(); const download = github({ name: 'babel-cli', version: '6.23.0', repository: { type: 'git', url: 'git://github.com/babel/babel.git' }, gitHead: '48573f1fb4e632add2c000bec3f95d88ebea4440', // This is the ref for 6.23.0 }); return download(tmpDir) .then((downloaded) => { expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(`${tmpDir}/packages/babel-cli`); expect(downloaded.packageJson.name).to.equal('babel-cli'); expect(downloaded.packageJson.version).to.equal('6.23.0'); }) .finally(() => sepia.disable()); }); it('should retry on network errors'); it('should pass the correct options to token-dealer'); it('should handle rate limit errors (wait/bail)'); }); ================================================ FILE: test/spec/analyze/download/index.js ================================================ 'use strict'; const fs = require('fs'); const os = require('os'); const cp = require('child_process'); const expect = require('chai').expect; const betray = require('betray'); const download = require(`${process.cwd()}/lib/analyze/download`); describe('index', () => { it('should use the github downloader, passing in the correct options', () => { const betrayed = betray(download.downloaders, 'github', () => () => Promise.resolve({})); const options = { githubTokens: ['foo', 'bar'], waitRateLimit: true, }; return download({ name: 'cross-spawn', repository: { type: 'git', url: 'git://github.com/IndigoUnited/node-cross-spawn.git' }, }, options) .then((downloaded) => { expect(betrayed.invoked).to.equal(1); const invocation = betrayed.invocations[0]; expect(invocation[0].name).to.equal('cross-spawn'); expect(invocation[1]).to.eql({ tokens: options.githubTokens, waitRateLimit: options.waitRateLimit, }); expect(downloaded).to.eql({}); }) .finally(() => betrayed.restore()); }); it('should use the git downloader, passing in the correct options', () => { const betrayed = betray(download.downloaders, 'git', () => () => Promise.resolve({})); const options = { githubTokens: ['foo', 'bar'], waitRateLimit: true, }; return download({ name: 'angular-ui-select', repository: { type: 'git', url: 'git@gitlab.com:codium/angular-ui-select.git' }, }, options) .then((downloaded) => { expect(betrayed.invoked).to.equal(1); const invocation = betrayed.invocations[0]; expect(invocation[0].name).to.equal('angular-ui-select'); expect(invocation[1]).to.equal(undefined); expect(downloaded).to.eql({}); }) .finally(() => betrayed.restore()); }); it('should use the npm downloader, passing in the correct options', () => { const betrayed = betray(download.downloaders, 'npm', () => () => Promise.resolve({})); const options = { githubTokens: ['foo', 'bar'], waitRateLimit: true, }; return download({ name: 'cross-spawn', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz' }, }, options) .then((downloaded) => { expect(betrayed.invoked).to.equal(1); const invocation = betrayed.invocations[0]; expect(invocation[0].name).to.equal('cross-spawn'); expect(invocation[1]).to.equal(undefined); expect(downloaded).to.eql({}); }) .finally(() => betrayed.restore()); }); it('should call downloader with the temporary folder', () => { let tmpDir; const betrayed = betray(download.downloaders, 'npm', () => (tmpDir_) => { tmpDir = tmpDir_; return Promise.resolve({}); }); return download({ name: 'cross-spawn', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz' }, }) .then(() => { expect(betrayed.invoked).to.equal(1); expect(tmpDir.indexOf(`${os.tmpdir()}/npms-analyzer/cross-spawn-`)).to.equal(0); expect(tmpDir).to.match(/-[a-z0-9]+$/); }) .finally(() => betrayed.restore()); }); it('should create a unique and kebab-cased temporary folder'); it('should delete the temporary folder on failure', () => { let tmpDir; const betrayed = betray(download.downloaders, 'npm', () => (tmpDir_) => { tmpDir = tmpDir_; return Promise.reject(new Error('foo')); }); return download({ name: 'cross-spawn', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz' }, }) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.message).to.equal('foo'); expect(betrayed.invoked).to.equal(1); expect(() => fs.statSync(tmpDir)).to.throw(/ENOENT/i); }) .finally(() => betrayed.restore()); }); describe('cleanTmpDir', () => { const tmpDir = `${os.tmpdir()}/npms-analyzer`; it('should clean old folders from the temporary folder', () => { cp.execSync(`mkdir -p ${tmpDir}/foo`); cp.execSync(`mkdir -p ${tmpDir}/bar`); fs.utimesSync(`${tmpDir}/bar`, new Date(), new Date(Date.now() - (20 * 24 * 60 * 60 * 1000))); return download.cleanTmpDir() .then(() => fs.readdirSync(tmpDir)) .then((files) => { expect(files).to.contain('foo'); expect(files).not.to.contain('bar'); }); }); it('should not fail to clean the folder if it doesn\'t yet exists', () => { cp.execSync(`rm -rf ${tmpDir}`); return download.cleanTmpDir(); }); }); }); ================================================ FILE: test/spec/analyze/download/npm.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const loadJsonFile = require('load-json-file'); const expect = require('chai').expect; const sepia = require(`${process.cwd()}/test/util/sepia`); const npm = require(`${process.cwd()}/lib/analyze/download/npm`); const tmpDir = `${process.cwd()}/test/tmp`; const fixturesDir = `${process.cwd()}/test/fixtures/analyze/download`; describe('npm', () => { before(() => sepia.fixtureDir(`${fixturesDir}/recorded/npm`)); beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should download the dist tarball', () => { sepia.enable(); const download = npm({ name: 'cross-spawn', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz' }, }); return download(tmpDir) .then(() => { expect(() => fs.accessSync(`${tmpDir}/package.json`)).to.not.throw(); expect(() => fs.accessSync(`${tmpDir}/appveyor.yml`)).to.throw(/ENOENT/); }) .finally(() => sepia.disable()); }); it('should still work if there\'s no dist tarball', () => { const download = npm({ name: 'cool-module', }); return download(tmpDir) .then(() => { expect(fs.readdirSync(tmpDir)).to.eql(['package.json']); }); }); it('should fail if the tarball is too large', () => { sepia.nock('https://registry.npmjs.org') .get('/cross-spawn/-/cross-spawn-0.1.0.tgz') .reply(200, 'foo', { 'Content-Length': '1000000000000', }); const download = npm({ name: 'cross-spawn', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz' }, }); return download(tmpDir) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(sepia.nock.isDone()).to.equal(true); expect(err.message).to.match(/too large/i); expect(err.unrecoverable).to.equal(true); }) .finally(() => sepia.nock.cleanAll()); }); it('should fail if the tarball has too many files', () => { sepia.enable(); const download = npm({ name: 'cross-spawn', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz' }, }, { maxFiles: 1 }); return download(tmpDir) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.message).to.match(/too many file/i); expect(err.unrecoverable).to.equal(true); }) .finally(() => sepia.disable()); }); it('should handle 404 errors', () => { sepia.nock('https://registry.npmjs.org') .get('/cross-spawn/-/cross-spawn-0.1.0.tgz') .reply(404); const download = npm({ name: 'cool-module', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz' }, }); return download(tmpDir) .then(() => { expect(sepia.nock.isDone()).to.equal(true); expect(fs.readdirSync(tmpDir)).to.eql(['package.json']); }) .finally(() => sepia.nock.cleanAll()); }); it('should merge package.json', () => { sepia.enable(); const npmPackageJson = { name: 'cool-module', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.1.0.tgz' }, }; const download = npm(npmPackageJson); return download(tmpDir) .then(() => loadJsonFile.sync(`${tmpDir}/package.json`)) .then((packageJson) => { expect(packageJson.name).to.equal('cool-module'); expect(packageJson.version).to.equal('0.1.0'); expect(packageJson.description).to.be.a('string'); // Test if properties were merged back expect(npmPackageJson.name).to.equal('cool-module'); expect(npmPackageJson.version).to.equal('0.1.0'); expect(npmPackageJson.description).to.be.a('string'); }) .finally(() => sepia.disable()); }); it('should resolve with the downloaded object', () => { sepia.enable(); const npmPackageJson = { name: 'cool-module', version: '0.1.0', dist: { tarball: 'https://registry.npmjs.org/cross-spawn/-/cross-spawn-1.0.0.tgz' }, }; const download = npm(npmPackageJson); return download(tmpDir) .then((downloaded) => { expect(downloaded.dir).to.equal(tmpDir); expect(downloaded.packageDir).to.equal(tmpDir); expect(downloaded.packageJson.name).to.equal('cross-spawn'); expect(downloaded.packageJson.version).to.equal('1.0.0'); }) .finally(() => sepia.disable()); }); it('should retry on network errors'); }); ================================================ FILE: test/spec/analyze/download/util/findPackageDir.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const expect = require('chai').expect; const findPackageDir = require(`${process.cwd()}/lib/analyze/download/util/findPackageDir`); const tmpDir = `${process.cwd()}/test/tmp`; describe('findPackageDir', () => { beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should return the same dir if the root package.json points to the same package', () => { fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cool-module', })); const packageJson = { name: 'cool-module', }; return findPackageDir(packageJson, tmpDir) .then((dir) => expect(dir).to.equal(tmpDir)); }); it('should return the dir by looking for it in the folder', () => { fs.mkdirSync(`${tmpDir}/cool-module-foo`); fs.writeFileSync(`${tmpDir}/cool-module-foo/package.json`, JSON.stringify({ name: 'cool-module', })); fs.mkdirSync(`${tmpDir}/cool-module-zoo`); fs.writeFileSync(`${tmpDir}/cool-module-zoo/package.json`, JSON.stringify({ name: 'cool-module-zoo', })); fs.mkdirSync(`${tmpDir}/cool-module-bar`); fs.writeFileSync(`${tmpDir}/cool-module-bar/package.json`, JSON.stringify({ name: 'cool-module-xxx', })); fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cool-module-builder', })); const packageJson = { name: 'cool-module', }; return findPackageDir(packageJson, tmpDir) .then((dir) => expect(dir).to.equal(`${tmpDir}/cool-module-foo`)); }); it('should swallow invalid json errors', () => { fs.mkdirSync(`${tmpDir}/cool-module-foo`); fs.writeFileSync(`${tmpDir}/cool-module-foo/package.json`, 'wow'); fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cool-module-builder', })); const packageJson = { name: 'cool-module', }; return findPackageDir(packageJson, tmpDir) .then((dir) => expect(dir).to.equal(tmpDir)); }); it('should not crash if there\'s no package.json in the root', () => { const packageJson = { name: 'cool-module', }; return findPackageDir(packageJson, tmpDir) .then((dir) => expect(dir).to.equal(tmpDir)); }); }); ================================================ FILE: test/spec/analyze/download/util/mergePackageJson.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const expect = require('chai').expect; const mergePackageJson = require(`${process.cwd()}/lib/analyze/download/util/mergePackageJson`); const tmpDir = `${process.cwd()}/test/tmp`; describe('mergePackageJson', () => { beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should merge the files, preferring the passed one', () => { fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cool-module', version: '2.0.0', description: 'bar', dependencies: { 'foo-dep': '^1.0.0' }, scripts: {}, })); const packageJson = { name: 'cool-module', version: '1.0.0', keywords: ['cool'], dependencies: { 'cool-dep': '^1.0.0' }, scripts: { test: 'mocha' }, }; return mergePackageJson(packageJson, tmpDir) .then(() => { expect(packageJson.name).to.equal('cool-module'); expect(packageJson.version).to.equal('1.0.0'); expect(packageJson.description).to.equal('bar'); expect(packageJson.keywords).to.eql(['cool']); expect(packageJson.dependencies).to.eql({ 'cool-dep': '^1.0.0' }); expect(packageJson.scripts).to.eql({ test: 'mocha' }); }); }); it('should merge the files, preferring the passed one', () => { fs.writeFileSync(`${tmpDir}/package.json`, JSON.stringify({ name: 'cool-module', version: '2.0.0', description: 'bar', dependencies: { 'foo-dep': '^1.0.0' }, })); const packageJson = { name: 'cool-module', version: '1.0.0', keywords: ['cool'], dependencies: { 'cool-dep': '^1.0.0' }, }; return mergePackageJson(packageJson, tmpDir) .then(() => { expect(packageJson.name).to.equal('cool-module'); expect(packageJson.version).to.equal('1.0.0'); expect(packageJson.description).to.equal('bar'); expect(packageJson.keywords).to.eql(['cool']); expect(packageJson.dependencies).to.eql({ 'cool-dep': '^1.0.0' }); }); }); it('should deal with broken downloaded package.json files', () => { fs.writeFileSync(`${tmpDir}/package.json`, 'brokenjson'); const packageJson = { name: 'cool-module', version: '1.0.0', keywords: ['cool'], dependencies: { 'cool-dep': '^1.0.0' }, }; return mergePackageJson(packageJson, tmpDir) .then(() => { expect(packageJson.name).to.equal('cool-module'); expect(packageJson.version).to.equal('1.0.0'); expect(packageJson.keywords).to.eql(['cool']); expect(packageJson.dependencies).to.eql({ 'cool-dep': '^1.0.0' }); }); }); }); ================================================ FILE: test/spec/analyze/download/util/untar.js ================================================ 'use strict'; const fs = require('fs'); const cp = require('child_process'); const which = require('which'); const expect = require('chai').expect; const untar = require(`${process.cwd()}/lib/analyze/download/util/untar`); /* eslint-disable max-statements-per-line */ const hasBsdTar = (() => { try { return !!which.sync('gtar'); } catch (err) { return false; } })(); /* eslint-enable max-statements-per-line */ const tmpDir = `${process.cwd()}/test/tmp`; const fixturesDir = `${process.cwd()}/test/fixtures/analyze/download`; describe('untar', () => { beforeEach(() => cp.execSync(`mkdir -p ${tmpDir}`)); afterEach(() => cp.execSync(`rm -rf ${tmpDir}`)); it('should decompress a tar.gz archive file', () => { fs.writeFileSync(`${tmpDir}/test.tgz`, fs.readFileSync(`${fixturesDir}/downloaded/couchdb-iterator-2.0.2.tgz`)); return untar(`${tmpDir}/test.tgz`) .then(() => { const files = fs.readdirSync(tmpDir); expect(files).to.contain('index.js'); expect(files).to.contain('package.json'); }); }); it('should chmod 0777 extracted files recursively', () => { fs.writeFileSync(`${tmpDir}/test.tgz`, fs.readFileSync(`${fixturesDir}/downloaded/couchdb-iterator-2.0.2.tgz`)); return untar(`${tmpDir}/test.tgz`) .then(() => { const stat = fs.statSync(`${tmpDir}/index.js`); const permStr = `0${(stat.mode & 0o777).toString(8)}`; // eslint-disable-line no-bitwise expect(permStr).to.equal('0777'); }); }); it('should deal with malformed archives', () => ( // Test malformed archive Promise.try(() => { fs.writeFileSync(`${tmpDir}/test.tgz`, fs.readFileSync(`${fixturesDir}/mocked/broken-archive.tgz`)); return untar(`${tmpDir}/test.tgz`) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.message).to.contain('malformed'); }); }) // Test non-gzip archive (e.g.: testing233 module) .then(() => { fs.writeFileSync(`${tmpDir}/test.tgz`, fs.readFileSync(`${fixturesDir}/mocked/non-gzip-archive.tgz`)); return untar(`${tmpDir}/test.tgz`) .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.message).to.contain('malformed'); }); }) )); it('should deal with archives that have extended/unknown headers', () => { fs.writeFileSync(`${tmpDir}/test.tgz`, fs.readFileSync(`${fixturesDir}/downloaded/pickles2-contents-editor-2.0.0-alpha.1.tgz`)); return untar(`${tmpDir}/test.tgz`) .then(() => { const files = fs.readdirSync(tmpDir); expect(files).to.contain('package.json'); expect(files).to.contain('tests'); expect(files).to.contain('src'); expect(files).to.contain('dist'); }); }); it('should deal with "is out of uid_t range" errors by using bsdtar', () => { // Only bsdtar is benevolent with these kind of errors if (!hasBsdTar) { return; } fs.writeFileSync(`${tmpDir}/test.tgz`, fs.readFileSync(`${fixturesDir}/downloaded/citong-1.3.1.tgz`)); return untar(`${tmpDir}/test.tgz`) .then(() => { const files = fs.readdirSync(tmpDir); expect(files).to.contain('package.json'); }); }); it('should fail if extraction fails', () => ( untar(`${tmpDir}/archive-that-will-never-exist.tgz`) .then(() => { throw new Error('Expected to fail'); }, (err) => { expect(err.stderr).to.match(/(error opening|no such file)/i); }) )); it('should delete the archive file if successful', () => ( // Good tar Promise.try(() => { fs.writeFileSync(`${tmpDir}/test.tgz`, fs.readFileSync(`${fixturesDir}/downloaded/couchdb-iterator-2.0.2.tgz`)); return untar(`${tmpDir}/test.tgz`) .then(() => expect(() => fs.accessSync(`${tmpDir}/test.tgz`)).to.throw(/ENOENT/)); }) // Broken tar .then(() => { cp.execSync(`rm -rf ${tmpDir}`); cp.execSync(`mkdir -p ${tmpDir}`); fs.writeFileSync(`${tmpDir}/test.tgz`, fs.readFileSync(`${fixturesDir}/mocked/broken-archive.tgz`)); return untar(`${tmpDir}/test.tgz`) .catch(() => {}) .then(() => fs.accessSync(`${tmpDir}/test.tgz`)); }) )); }); ================================================ FILE: test/spec/analyze/evaluate/index.js ================================================ ================================================ FILE: test/spec/analyze/evaluate/maintenance.js ================================================ ================================================ FILE: test/spec/analyze/evaluate/popularity.js ================================================ ================================================ FILE: test/spec/analyze/evaluate/quality.js ================================================ ================================================ FILE: test/spec/analyze/util/exec.js ================================================ 'use strict'; const expect = require('chai').expect; const exec = require(`${process.cwd()}/lib/analyze/util/exec`); describe('exec', () => { it('should provide a promise based child_processed#exec', () => ( exec('echo foo') .then(() => {}) )); it('should resolve with an array with `stdout` and `stderr` items', () => ( Promise.try(() => ( exec('echo foo') .spread((stdout, stderr) => { expect(stdout).to.equal('foo\n'); expect(stderr).to.equal(''); }) )) .then(() => ( exec('echo foo 1>&2') .spread((stdout, stderr) => { expect(stdout).to.equal(''); expect(stderr).to.equal('foo\n'); }) )) )); it('should reject with an error, containing an additional `stdout` and `stderr` properties', () => ( Promise.try(() => ( exec('echo foo && exit 1') .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.exitCode).to.equal(1); expect(err.stdout).to.equal('foo\n'); expect(err.stderr).to.equal(''); }) )) .then(() => ( exec('echo foo 1>&2 && exit 2') .then(() => { throw new Error('Should have failed'); }, (err) => { expect(err.exitCode).to.equal(2); expect(err.stdout).to.equal(''); expect(err.stderr).to.equal('foo\n'); }) )) )); describe('escape', () => { it('should offer an es6 template tag for escaping arguments', () => { const command = exec.escape`echo ${'foo>bar'} ${'| something'}`; expect(command).to.equal('echo \'foo>bar\' \'| something\''); }); }); }); ================================================ FILE: test/spec/analyze/util/gotRetry.js ================================================ 'use strict'; const expect = require('chai').expect; const betray = require('betray'); const gotRetry = require(`${process.cwd()}/lib/analyze/util/gotRetry`); const gotRetries = gotRetry.retries; const transientError = Object.assign(new Error('foo'), { code: 'EAI_AGAIN', href: 'http://google.com' }); const httpError = Object.assign(new Error('foo'), { statusCode: 503, method: 'GET', href: 'http://google.com' }); describe('gotRetry', () => { it('should export an object', () => { expect(gotRetry).to.be.an('object'); expect(gotRetry.retries).to.be.an('function'); }); it('should retry on transient errors', () => { expect(gotRetries(1, transientError)).to.be.above(0); }); it('should retry on some HTTP errors', () => { expect(gotRetries(1, httpError)).to.be.above(0); }); it('should not retry when an unrecognized error occurs', () => { expect(gotRetries(1, new Error())).to.equal(0); }); it('should not retry after attempt 5', () => { expect(gotRetries(5 + 1, transientError)).to.equal(0); expect(gotRetries(Number.MAX_VALUE, transientError)).to.equal(0); }); it('should log when retrying', () => { const betrayed = betray(logger.children['util/got-retry'], 'warn'); gotRetries(1, transientError); expect(betrayed.invoked).to.greaterThan(0); expect(betrayed.invocations[0][0]).to.eql({ url: transientError.href, iteration: 1, error: transientError }); expect(betrayed.invocations[0][1]).to.match(/retrying request../i); }); }); ================================================ FILE: test/spec/analyze/util/hostedGitInfo.js ================================================ 'use strict'; const expect = require('chai').expect; const hostedGitInfo = require(`${process.cwd()}/lib/analyze/util/hostedGitInfo`); describe('hostedGitInfo', () => { it('should be wrapper to hosted-git-info#fromUrl', () => { [ 'git://github.com/IndigoUnited/node-cross-spawn.git', 'git@github.com:IndigoUnited/node-cross-spawn.git', 'https://github.com/IndigoUnited/node-cross-spawn.git', ].forEach((url) => { const info = hostedGitInfo(url); expect(info).to.be.an('object'); expect(info.type).to.equal('github'); expect(info.domain).to.equal('github.com'); expect(info.user).to.equal('IndigoUnited'); expect(info.project).to.equal('node-cross-spawn'); }); [ 'git@gitlab.com:codium/angular-ui-select.git', 'https://gitlab.com/codium/angular-ui-select.git', ].forEach((url) => { const info = hostedGitInfo(url); expect(info).to.be.an('object'); expect(info.type).to.equal('gitlab'); expect(info.domain).to.equal('gitlab.com'); expect(info.user).to.equal('codium'); expect(info.project).to.equal('angular-ui-select'); }); [ 'git@bitbucket.org:fvdm/node-xml2json.git', 'https://bitbucket.org/fvdm/node-xml2json.git', ].forEach((url) => { const info = hostedGitInfo(url); expect(info).to.be.an('object'); expect(info.type).to.equal('bitbucket'); expect(info.domain).to.equal('bitbucket.org'); expect(info.user).to.equal('fvdm'); expect(info.project).to.equal('node-xml2json'); }); }); it('should not crash on malformed URLs', () => { let info; try { info = hostedGitInfo('git://github.com/balderdashy/waterline-%s.git'); } catch (e) { throw new Error('Should not crash'); } expect(info).to.equal(undefined); }); it('should not crash on incomplete URLs', () => { let info; try { info = hostedGitInfo('git://github.com'); } catch (e) { throw new Error('Should not crash'); } expect(info).to.equal(undefined); }); }); ================================================ FILE: test/spec/analyze/util/normalizePackageJson.js ================================================ 'use strict'; const expect = require('chai').expect; const normalizePackageJson = require(`${process.cwd()}/lib/analyze/util/normalizePackageJson`); describe('normalizePackageJson', () => { it('should mutate original object', () => { const packageJson = { name: 'foo' }; const normalizedPackageJson = normalizePackageJson(packageJson); expect(packageJson).to.equal(normalizedPackageJson); }); it('should normalize package json', () => { expect(normalizePackageJson({ name: 'foo' }).readme).to.equal('ERROR: No README data found!'); }); it('should throw an unrecoverable error if normalize-package-data crashes', () => { try { normalizePackageJson({ name: 'foo', repository: { type: 'git', url: 'git://github.com/balderdashy/waterline-%s.git' }, }); } catch (err) { expect(err.message).to.match(/uri malformed/i); expect(err.unrecoverable).to.equal(true); } }); it('should throw an unrecoverable error if there\'s no name', () => { try { normalizePackageJson({}); } catch (err) { expect(err.message).to.match(/missing name/i); expect(err.unrecoverable).to.equal(true); } }); it('should normalize repository trailing slashes', () => { const packageJson = normalizePackageJson({ name: 'foo', repository: { type: 'git', url: 'git://github.com/balderdashy/waterline.git/' }, }); expect(packageJson.repository.url).to.equal('git://github.com/balderdashy/waterline.git'); }); it('should remove paths from repository URLs', () => { let packageJson; packageJson = normalizePackageJson({ name: 'babel-helper-fixtures', repository: 'https://github.com/babel/babel/tree/master/packages/babel-helper-fixtures', }); expect(packageJson.repository.url).to.equal('git+https://github.com/babel/babel.git'); packageJson = normalizePackageJson({ name: 'babel-helper-fixtures', repository: { type: 'git', url: 'https://github.com/babel/babel/tree/master/packages/babel-helper-fixtures' }, }); expect(packageJson.repository.url).to.equal('git+https://github.com/babel/babel.git'); }); }); ================================================ FILE: test/spec/analyze/util/packageJsonFromData.js ================================================ 'use strict'; const expect = require('chai').expect; const packageJsonFromData = require(`${process.cwd()}/lib/analyze/util/packageJsonFromData`); describe('packageJsonFromData', () => { it('should return the latest package json', () => { const packageJson = packageJsonFromData('foo', { name: 'foo', 'dist-tags': { latest: '1.0.0' }, versions: { '0.1.0': { name: 'foo', version: '0.1.0' }, '1.0.0': { name: 'foo', version: '1.0.0' }, '2.0.0': { name: 'foo', version: '2.0.0' }, }, }); expect(packageJson).to.be.an('object'); expect(packageJson.name).to.equal('foo'); expect(packageJson.version).to.equal('1.0.0'); }); it('should not crash if there\'s no latest dist-tags', () => { [ { name: 'foo', versions: { '1.0.0': { name: 'foo', version: '1.0.0' }, '2.0.0': { name: 'foo', version: '2.0.0' }, }, }, { name: 'foo', 'dist-tags': {}, versions: { '1.0.0': { name: 'foo', version: '1.0.0' }, '2.0.0': { name: 'foo', version: '2.0.0' }, }, }, ].forEach((data) => { const packageJson = packageJsonFromData('foo', data); expect(packageJson).to.be.an('object'); expect(packageJson.name).to.equal('foo'); expect(packageJson.version).to.equal('0.0.1'); }); }); it('should not crash if there\'s no matching version', () => { let packageJson; packageJson = packageJsonFromData('foo', { name: 'foo', 'dist-tags': { latest: '1.0.0' }, }); expect(packageJson).to.be.an('object'); expect(packageJson.name).to.equal('foo'); expect(packageJson.version).to.equal('1.0.0'); packageJson = packageJsonFromData('foo', { name: 'foo', 'dist-tags': { latest: '1.0.0' }, versions: { '2.0.0': { name: 'foo', version: '2.0.0' }, }, }); expect(packageJson).to.be.an('object'); expect(packageJson.name).to.equal('foo'); expect(packageJson.version).to.equal('1.0.0'); }); it('should fail if names mismatch', () => { expect(() => packageJsonFromData('foo', { name: 'bar', 'dist-tags': { latest: '1.0.0' }, versions: { '1.0.0': { name: 'foo', version: '2.0.0' }, }, })).to.throw(/name mismatch/i); expect(() => packageJsonFromData('bar', { name: 'foo', 'dist-tags': { latest: '1.0.0' }, versions: { '1.0.0': { name: 'foo', version: '2.0.0' }, }, })).to.throw(/name mismatch/i); // Data is ok but package.json is not, it should simply overwrite expect(() => packageJsonFromData('foo', { name: 'foo', 'dist-tags': { latest: '1.0.0' }, versions: { '1.0.0': { name: 'bar', version: '2.0.0' }, }, })).to.throw(/name mismatch/i); // All ok expect(packageJsonFromData('foo', { name: 'foo', 'dist-tags': { latest: '1.0.0' }, versions: { '1.0.0': { name: 'foo', version: '2.0.0' }, }, }).name).to.equal('foo'); }); it('should check if versions mismatch', () => { const packageJson = packageJsonFromData('foo', { name: 'foo', 'dist-tags': { latest: '1.0.0' }, versions: { '1.0.0': { name: 'foo', version: '2.0.0' }, }, }); expect(packageJson.version).to.equal('1.0.0'); }); it('should normalize package json with normalize-package-data', () => { const packageJson = packageJsonFromData('foo', { name: 'foo', 'dist-tags': { latest: '1.0.0' }, versions: { '1.0.0': { name: 'foo', version: '1.0.0' }, }, }); expect(packageJson).to.be.an('object'); expect(packageJson.readme).to.equal('ERROR: No README data found!'); }); }); ================================================ FILE: test/test.js ================================================ /* eslint global-require:0 */ 'use strict'; const path = require('path'); const fs = require('fs'); if (process.cwd() !== path.join(__dirname, '..')) { throw new Error('Tests must be run from the project root'); } // Configure require('../lib/configure'); require('./util/sepia'); logger.level = 'fatal'; // Auto-load tests const walk = (dir) => fs.readdirSync(dir).forEach((file) => { const filePath = `${dir}/${file}`; if (fs.statSync(filePath).isDirectory()) { describe(file, () => walk(filePath)); } else { require(filePath); } }); walk(`${__dirname}/spec`); ================================================ FILE: test/util/sepia.js ================================================ 'use strict'; /** * This file adds .enable() and .disable() to sepia. * Additionally any usage of nock must use sepia.nock so that interoperability with sepia works without issues. */ const glob = require('glob'); const http = require('http'); const https = require('https'); const wrap = require('lodash/wrap'); const mockRequire = require('mock-require'); // Grab original requests const originalRequests = { http: http.request, https: https.request }; // Grab sepia requests + nock (used when enabled) const sepia = require('sepia'); const enabledNock = require('nock'); const sepiaRequests = { http: http.request, https: https.request }; // Grab standalone requests + nock (used when disabled) http.request = originalRequests.http; https.request = originalRequests.https; delete require.cache[require.resolve('nock')]; glob.sync('**/*.js', { cwd: `${process.cwd()}/node_modules/nock/lib` }).forEach((file) => { delete require.cache[require.resolve(`nock/lib/${file}`)]; }); const disabledNock = require('nock'); // Map abort to end due to a bug in nock, see: https://github.com/nock/nock/issues/867 http.request = wrap(http.request, (request, options, callback) => { const req = request(options, callback); return Object.assign(req, { abort: req.end }); }); https.request = wrap(https.request, (request, options, callback) => { const req = request(options, callback); return Object.assign(req, { abort: req.end }); }); const nockedRequests = { http: http.request, https: https.request }; // Mock the timed-out module used by got() to avoid timeouts being triggered: the socket 'connect' event // is never fired when using sepia/nock // See: https://github.com/floatdrop/timed-out/blob/bdc812346570a0ed4e6d7d5fdc668e2feb72f239/index.js#L21 mockRequire('timed-out', (req) => req); function enable() { http.request = sepiaRequests.http; https.request = sepiaRequests.https; sepia.nock = enabledNock; } function disable() { http.request = nockedRequests.http; https.request = nockedRequests.https; sepia.nock = disabledNock; } sepia.enable = enable; sepia.disable = disable; sepia.nock = disabledNock; module.exports = sepia;