├── .editorconfig ├── .github ├── contributing.md ├── issue_template.md └── pull_request_template.md ├── .gitignore ├── .istanbul.yml ├── .npmignore ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── lib └── index.js ├── mocha.opts ├── package-lock.json ├── package.json └── test ├── events.js ├── index.test.js └── methods.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.github/contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing to Feathers 2 | 3 | Thank you for contributing to Feathers! :heart: :tada: 4 | 5 | This repo is the main core and where most issues are reported. Feathers embraces modularity and is broken up across many repos. To make this easier to manage we currently use [Zenhub](https://www.zenhub.com/) for issue triage and visibility. They have a free browser plugin you can install so that you can see what is in flight at any time, but of course you also always see current issues in Github. 6 | 7 | ## Report a bug 8 | 9 | Before creating an issue please make sure you have checked out the docs, specifically the [FAQ](https://docs.feathersjs.com/help/faq.html) section. You might want to also try searching Github. It's pretty likely someone has already asked a similar question. 10 | 11 | If you haven't found your answer please feel free to join our [slack channel](http://slack.feathersjs.com), create an issue on Github, or post on [Stackoverflow](http://stackoverflow.com) using the `feathers` or `feathersjs` tag. We try our best to monitor Stackoverflow but you're likely to get more immediate responses in Slack and Github. 12 | 13 | Issues can be reported in the [issue tracker](https://github.com/feathersjs/feathers/issues). Since feathers combines many modules it can be hard for us to assess the root cause without knowing which modules are being used and what your configuration looks like, so **it helps us immensely if you can link to a simple example that reproduces your issue**. 14 | 15 | ## Report a Security Concern 16 | 17 | We take security very seriously at Feathers. We welcome any peer review of our 100% open source code to ensure nobody's Feathers app is ever compromised or hacked. As a web application developer you are responsible for any security breaches. We do our very best to make sure Feathers is as secure as possible by default. 18 | 19 | In order to give the community time to respond and upgrade we strongly urge you report all security issues to us. Send one of the core team members a PM in [Slack](http://slack.feathersjs.com) or email us at hello@feathersjs.com with details and we will respond ASAP. 20 | 21 | For full details refer to our [Security docs](https://docs.feathersjs.com/SECURITY.html). 22 | 23 | ## Pull Requests 24 | 25 | We :heart: pull requests and we're continually working to make it as easy as possible for people to contribute, including a [Plugin Generator](https://github.com/feathersjs/generator-feathers-plugin) and a [common test suite](https://github.com/feathersjs/feathers-service-tests) for database adapters. 26 | 27 | We prefer small pull requests with minimal code changes. The smaller they are the easier they are to review and merge. A core team member will pick up your PR and review it as soon as they can. They may ask for changes or reject your pull request. This is not a reflection of you as an engineer or a person. Please accept feedback graciously as we will also try to be sensitive when providing it. 28 | 29 | Although we generally accept many PRs they can be rejected for many reasons. We will be as transparent as possible but it may simply be that you do not have the same context or information regarding the roadmap that the core team members have. We value the time you take to put together any contributions so we pledge to always be respectful of that time and will try to be as open as possible so that you don't waste it. :smile: 30 | 31 | **All PRs (except documentation) should be accompanied with tests and pass the linting rules.** 32 | 33 | ### Code style 34 | 35 | Before running the tests from the `test/` folder `npm test` will run ESlint. You can check your code changes individually by running `npm run lint`. 36 | 37 | ### ES6 compilation 38 | 39 | Feathers uses [Babel](https://babeljs.io/) to leverage the latest developments of the JavaScript language. All code and samples are currently written in ES2015. To transpile the code in this repository run 40 | 41 | > npm run compile 42 | 43 | __Note:__ `npm test` will run the compilation automatically before the tests. 44 | 45 | ### Tests 46 | 47 | [Mocha](http://mochajs.org/) tests are located in the `test/` folder and can be run using the `npm run mocha` or `npm test` (with ESLint and code coverage) command. 48 | 49 | ### Documentation 50 | 51 | Feathers documentation is contained in Markdown files in the [feathers-docs](https://github.com/feathersjs/feathers-docs) repository. To change the documentation submit a pull request to that repo, referencing any other PR if applicable, and the docs will be updated with the next release. 52 | 53 | ## External Modules 54 | 55 | If you're written something awesome for Feathers, the Feathers ecosystem, or using Feathers please add it to the [showcase](https://docs.feathersjs.com/why/showcase.html). You also might want to check out the [Plugin Generator](https://github.com/feathersjs/generator-feathers-plugin) that can be used to scaffold plugins to be Feathers compliant from the start. 56 | 57 | If you think it would be a good core module then please contact one of the Feathers core team members in [Slack](http://slack.feathersjs.com) and we can discuss whether it belongs in core and how to get it there. :beers: 58 | 59 | ## Contributor Code of Conduct 60 | 61 | As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. 62 | 63 | We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion. 64 | 65 | Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct. 66 | 67 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team. 68 | 69 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. 70 | 71 | This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/) 72 | -------------------------------------------------------------------------------- /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | ### Steps to reproduce 2 | 3 | (First please check that this issue is not already solved as [described 4 | here](https://github.com/feathersjs/feathers/blob/master/.github/contributing.md#report-a-bug)) 5 | 6 | - [ ] Tell us what broke. The more detailed the better. 7 | - [ ] If you can, please create a simple example that reproduces the issue and link to a gist, jsbin, repo, etc. 8 | 9 | ### Expected behavior 10 | Tell us what should happen 11 | 12 | ### Actual behavior 13 | Tell us what happens instead 14 | 15 | ### System configuration 16 | 17 | Tell us about the applicable parts of your setup. 18 | 19 | **Module versions** (especially the part that's not working): 20 | 21 | **NodeJS version**: 22 | 23 | **Operating System**: 24 | 25 | **Browser Version**: 26 | 27 | **React Native Version**: 28 | 29 | **Module Loader**: -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ### Summary 2 | 3 | (If you have not already please refer to the contributing guideline as [described 4 | here](https://github.com/feathersjs/feathers/blob/master/.github/contributing.md#pull-requests)) 5 | 6 | - [ ] Tell us about the problem your pull request is solving. 7 | - [ ] Are there any open issues that are related to this? 8 | - [ ] Is this PR dependent on PRs in other repos? 9 | 10 | If so, please mention them to keep the conversations linked together. 11 | 12 | ### Other Information 13 | 14 | If there's anything else that's important and relevant to your pull 15 | request, mention that information here. This could include 16 | benchmarks, or other information. 17 | 18 | Your PR will be reviewed by a core team member and they will work with you to get your changes merged in a timely manner. If merged your PR will automatically be added to the changelog in the next release. 19 | 20 | If your changes involve documentation updates please mention that and link the appropriate PR in [feathers-docs](https://github.com/feathersjs/feathers-docs). 21 | 22 | Thanks for contributing to Feathers! :heart: -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Logs 4 | logs 5 | *.log 6 | 7 | # Runtime data 8 | pids 9 | *.pid 10 | *.seed 11 | 12 | # Directory for instrumented libs generated by jscoverage/JSCover 13 | lib-cov 14 | 15 | # Coverage directory used by tools like istanbul 16 | coverage 17 | 18 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 19 | .grunt 20 | 21 | # Compiled binary addons (http://nodejs.org/api/addons.html) 22 | build/Release 23 | 24 | # Dependency directory 25 | # Commenting this out is preferred by some people, see 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- 27 | node_modules 28 | 29 | # Users Environment Variables 30 | .lock-wscript 31 | 32 | dist/ 33 | -------------------------------------------------------------------------------- /.istanbul.yml: -------------------------------------------------------------------------------- 1 | verbose: false 2 | instrumentation: 3 | root: ./lib/ 4 | include-all-sources: true 5 | reporting: 6 | print: summary 7 | reports: 8 | - html 9 | - text 10 | - lcov 11 | watermarks: 12 | statements: [50, 80] 13 | lines: [50, 80] 14 | functions: [50, 80] 15 | branches: [50, 80] 16 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .editorconfig 2 | .jshintrc 3 | .travis.yml 4 | .istanbul.yml 5 | .babelrc 6 | .idea/ 7 | .vscode/ 8 | test/ 9 | coverage/ 10 | .github/ 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | install: npm install 4 | node_js: 5 | - node 6 | - '6' 7 | addons: 8 | code_climate: 9 | repo_token: ae4d3ff4d2549c5e848d9027e4cd216a3ff2cab67c3845fceeb9f1871e8ae2c4 10 | before_script: 11 | - 'npm install -g codeclimate-test-reporter' 12 | after_script: 13 | - 'codeclimate-test-reporter < coverage/lcov.info' 14 | notifications: 15 | email: false 16 | slack: 17 | rooms: 18 | secure: GPsvHA1kNtrRhPmba/zWpcD/uwzHlHSJyVdr1mJv59733TzuGGo5fSzgA/gFFSA5L4VWImBlvQr+jW7a9+zAT4bFK8ntudUhOvoJ9eefZ7I6S/8Ub8MB9vRhk0XyWaNrg4IC3b57OjtcjgnwsHuaXWwIFp/ZYlssHpKMaa++b8pl+HNhRdGdGS+G8/HuaH6LrmIhTydOleg53xJB3DfIIhWZyQJrHjOx50Wk1dKigYeu6wYaV0yRlBYI8iVloUSVrlwFASQQks5ifqeye3U1qahkxVgLGSqDWi0ohZMYOLW1i1I01kZIxs/DidEGK3m8IyzbhOE+xsE/+TZA87Szg1gRH74gu8QFon81eEY57dmyuzP2l2jibtpGAoaUMYPfH0Slsq9jXvtubPY8tt+lSVIjRWimrC/2dtLjCoy8a0ReGJdrZyBFnNspt4wjzctA9OLWDQhHQd9sM7U4EbBfSB/FnLKC4HV8GFLJqiMDi2tv5voyOFLzV8E526KFybLMaFNVAGRA9uOLGYhMjWm7ruzTsJNtfkpYb0TC4incW1+dQzyodemVsw3pktP3Tf4VJizqPXMcZgUCigt8kLW5dfcOhihHd5eWmf+ByEbIXXhWN5af2e/gLASiWpABMaCTi4wfqgnRUlNjMLva4I/IG+bwDZOhaBxLQoIqicfrNis= 19 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## [v3.2.1](https://github.com/feathersjs/primus/tree/v3.2.1) (2018-06-03) 4 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.2.0...v3.2.1) 5 | 6 | **Merged pull requests:** 7 | 8 | - Update uberproto to the latest version 🚀 [\#80](https://github.com/feathersjs/primus/pull/80) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 9 | - Update uws to the latest version 🚀 [\#79](https://github.com/feathersjs/primus/pull/79) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 10 | - Update ws to the latest version 🚀 [\#78](https://github.com/feathersjs/primus/pull/78) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 11 | 12 | ## [v3.2.0](https://github.com/feathersjs/primus/tree/v3.2.0) (2018-02-09) 13 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.1.0...v3.2.0) 14 | 15 | **Merged pull requests:** 16 | 17 | - Update @feathersjs/transport-commons to the latest version 🚀 [\#77](https://github.com/feathersjs/primus/pull/77) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 18 | 19 | ## [v3.1.0](https://github.com/feathersjs/primus/tree/v3.1.0) (2018-01-30) 20 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.0.3...v3.1.0) 21 | 22 | **Merged pull requests:** 23 | 24 | - Update dependency to @feathersjs/transport-commons [\#76](https://github.com/feathersjs/primus/pull/76) ([daffl](https://github.com/daffl)) 25 | 26 | ## [v3.0.3](https://github.com/feathersjs/primus/tree/v3.0.3) (2018-01-18) 27 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.0.2...v3.0.3) 28 | 29 | **Merged pull requests:** 30 | 31 | - Remove setMaxListeners [\#75](https://github.com/feathersjs/primus/pull/75) ([daffl](https://github.com/daffl)) 32 | - Update mocha to the latest version 🚀 [\#74](https://github.com/feathersjs/primus/pull/74) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 33 | - Update ws to the latest version 🚀 [\#73](https://github.com/feathersjs/primus/pull/73) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 34 | 35 | ## [v3.0.2](https://github.com/feathersjs/primus/tree/v3.0.2) (2018-01-03) 36 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.0.1...v3.0.2) 37 | 38 | **Merged pull requests:** 39 | 40 | - Update documentation to correspond with latest release [\#72](https://github.com/feathersjs/primus/pull/72) ([daffl](https://github.com/daffl)) 41 | - Update semistandard to the latest version 🚀 [\#71](https://github.com/feathersjs/primus/pull/71) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 42 | - Update feathers-memory to the latest version 🚀 [\#70](https://github.com/feathersjs/primus/pull/70) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 43 | - Update uws to the latest version 🚀 [\#69](https://github.com/feathersjs/primus/pull/69) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 44 | 45 | ## [v3.0.1](https://github.com/feathersjs/primus/tree/v3.0.1) (2017-11-16) 46 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.0.0...v3.0.1) 47 | 48 | **Merged pull requests:** 49 | 50 | - Add default ES module default exports to make TypeScript integration … [\#68](https://github.com/feathersjs/primus/pull/68) ([daffl](https://github.com/daffl)) 51 | 52 | ## [v3.0.0](https://github.com/feathersjs/primus/tree/v3.0.0) (2017-11-01) 53 | [Full Changelog](https://github.com/feathersjs/primus/compare/v2.2.1...v3.0.0) 54 | 55 | **Merged pull requests:** 56 | 57 | - Update dependencies for release [\#67](https://github.com/feathersjs/primus/pull/67) ([daffl](https://github.com/daffl)) 58 | - Throw an error when using an incompatible version of Feathers [\#66](https://github.com/feathersjs/primus/pull/66) ([daffl](https://github.com/daffl)) 59 | 60 | ## [v2.2.1](https://github.com/feathersjs/primus/tree/v2.2.1) (2017-10-31) 61 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.0.0-pre.4...v2.2.1) 62 | 63 | **Merged pull requests:** 64 | 65 | - Add an error when trying to use earlier versions with Feathers v3 [\#65](https://github.com/feathersjs/primus/pull/65) ([daffl](https://github.com/daffl)) 66 | 67 | ## [v3.0.0-pre.4](https://github.com/feathersjs/primus/tree/v3.0.0-pre.4) (2017-10-25) 68 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.0.0-pre.3...v3.0.0-pre.4) 69 | 70 | ## [v3.0.0-pre.3](https://github.com/feathersjs/primus/tree/v3.0.0-pre.3) (2017-10-23) 71 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.0.0-pre.2...v3.0.0-pre.3) 72 | 73 | **Merged pull requests:** 74 | 75 | - Updates for Feathers v3 \(Buzzard\) [\#64](https://github.com/feathersjs/primus/pull/64) ([daffl](https://github.com/daffl)) 76 | - Update to use npm scopes [\#63](https://github.com/feathersjs/primus/pull/63) ([daffl](https://github.com/daffl)) 77 | 78 | ## [v3.0.0-pre.2](https://github.com/feathersjs/primus/tree/v3.0.0-pre.2) (2017-10-19) 79 | [Full Changelog](https://github.com/feathersjs/primus/compare/v3.0.0-pre.1...v3.0.0-pre.2) 80 | 81 | ## [v3.0.0-pre.1](https://github.com/feathersjs/primus/tree/v3.0.0-pre.1) (2017-10-18) 82 | [Full Changelog](https://github.com/feathersjs/primus/compare/v2.2.0...v3.0.0-pre.1) 83 | 84 | **Closed issues:** 85 | 86 | - An in-range update of babel-core is breaking the build 🚨 [\#56](https://github.com/feathersjs/primus/issues/56) 87 | - Update npm version [\#55](https://github.com/feathersjs/primus/issues/55) 88 | 89 | **Merged pull requests:** 90 | 91 | - Compatibility and updates for Feathers v3 [\#62](https://github.com/feathersjs/primus/pull/62) ([daffl](https://github.com/daffl)) 92 | - Update to new plugin infrastructure [\#61](https://github.com/feathersjs/primus/pull/61) ([daffl](https://github.com/daffl)) 93 | - Update mocha to the latest version 🚀 [\#60](https://github.com/feathersjs/primus/pull/60) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 94 | - Update debug to the latest version 🚀 [\#59](https://github.com/feathersjs/primus/pull/59) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 95 | - Update primus type definition [\#58](https://github.com/feathersjs/primus/pull/58) ([Sieabah](https://github.com/Sieabah)) 96 | - Update uws to the latest version 🚀 [\#57](https://github.com/feathersjs/primus/pull/57) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 97 | 98 | ## [v2.2.0](https://github.com/feathersjs/primus/tree/v2.2.0) (2017-05-29) 99 | [Full Changelog](https://github.com/feathersjs/primus/compare/v2.1.0...v2.2.0) 100 | 101 | **Closed issues:** 102 | 103 | - An in-range update of feathers-hooks is breaking the build 🚨 [\#53](https://github.com/feathersjs/primus/issues/53) 104 | - An in-range update of debug is breaking the build 🚨 [\#52](https://github.com/feathersjs/primus/issues/52) 105 | - An in-range update of primus is breaking the build 🚨 [\#51](https://github.com/feathersjs/primus/issues/51) 106 | - An in-range update of uws is breaking the build 🚨 [\#50](https://github.com/feathersjs/primus/issues/50) 107 | - Expose headers and remote ip on feathers object [\#46](https://github.com/feathersjs/primus/issues/46) 108 | - docs are out of date [\#28](https://github.com/feathersjs/primus/issues/28) 109 | 110 | **Merged pull requests:** 111 | 112 | - Update ws to the latest version 🚀 [\#54](https://github.com/feathersjs/primus/pull/54) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 113 | - Update semistandard to the latest version 🚀 [\#49](https://github.com/feathersjs/primus/pull/49) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 114 | - Update feathers-hooks to the latest version 🚀 [\#48](https://github.com/feathersjs/primus/pull/48) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 115 | - Update dependencies to enable Greenkeeper 🌴 [\#47](https://github.com/feathersjs/primus/pull/47) ([greenkeeper[bot]](https://github.com/apps/greenkeeper)) 116 | - Update uws to version 0.14.0 🚀 [\#45](https://github.com/feathersjs/primus/pull/45) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 117 | 118 | ## [v2.1.0](https://github.com/feathersjs/primus/tree/v2.1.0) (2017-03-01) 119 | [Full Changelog](https://github.com/feathersjs/primus/compare/v2.0.0...v2.1.0) 120 | 121 | **Closed issues:** 122 | 123 | - Issues with using feathers-primus/client and feathers-client [\#41](https://github.com/feathersjs/primus/issues/41) 124 | - Any breaking change in 2.0.0? [\#39](https://github.com/feathersjs/primus/issues/39) 125 | 126 | **Merged pull requests:** 127 | 128 | - Update uws to version 0.13.0 🚀 [\#44](https://github.com/feathersjs/primus/pull/44) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 129 | - Typescript Definitions [\#43](https://github.com/feathersjs/primus/pull/43) ([AbraaoAlves](https://github.com/AbraaoAlves)) 130 | - Update ws to version 2.0.0 🚀 [\#42](https://github.com/feathersjs/primus/pull/42) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 131 | - Update uws to version 0.12.0 🚀 [\#37](https://github.com/feathersjs/primus/pull/37) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 132 | 133 | ## [v2.0.0](https://github.com/feathersjs/primus/tree/v2.0.0) (2016-12-02) 134 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.4.1...v2.0.0) 135 | 136 | **Closed issues:** 137 | 138 | - uws [\#36](https://github.com/feathersjs/primus/issues/36) 139 | 140 | **Merged pull requests:** 141 | 142 | - Update feathers-memory to version 1.0.0 🚀 [\#35](https://github.com/feathersjs/primus/pull/35) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 143 | - Update feathers-commons to version 0.8.0 🚀 [\#34](https://github.com/feathersjs/primus/pull/34) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 144 | - Swapping rm to rifraf and using relative path to \_mocha for windows support [\#33](https://github.com/feathersjs/primus/pull/33) ([corymsmith](https://github.com/corymsmith)) 145 | - Update primus to version 6.0.5 🚀 [\#32](https://github.com/feathersjs/primus/pull/32) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 146 | - jshint —\> semistandard [\#30](https://github.com/feathersjs/primus/pull/30) ([corymsmith](https://github.com/corymsmith)) 147 | - adding code coverage [\#29](https://github.com/feathersjs/primus/pull/29) ([ekryski](https://github.com/ekryski)) 148 | - Update feathers-memory to version 0.8.0 🚀 [\#24](https://github.com/feathersjs/primus/pull/24) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 149 | - Update mocha to version 3.0.0 🚀 [\#22](https://github.com/feathersjs/primus/pull/22) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 150 | 151 | ## [v1.4.1](https://github.com/feathersjs/primus/tree/v1.4.1) (2016-05-23) 152 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.4.0...v1.4.1) 153 | 154 | **Merged pull requests:** 155 | 156 | - Update feathers-socket-commons to version 2.0.0 🚀 [\#18](https://github.com/feathersjs/primus/pull/18) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 157 | - Update babel-plugin-add-module-exports to version 0.2.0 🚀 [\#17](https://github.com/feathersjs/primus/pull/17) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 158 | 159 | ## [v1.4.0](https://github.com/feathersjs/primus/tree/v1.4.0) (2016-04-28) 160 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.3.3...v1.4.0) 161 | 162 | **Merged pull requests:** 163 | 164 | - Implement options for setting client timeout [\#16](https://github.com/feathersjs/primus/pull/16) ([daffl](https://github.com/daffl)) 165 | - Update feathers-socket-commons to version 1.0.0 🚀 [\#15](https://github.com/feathersjs/primus/pull/15) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 166 | - More tests for error cases [\#14](https://github.com/feathersjs/primus/pull/14) ([daffl](https://github.com/daffl)) 167 | 168 | ## [v1.3.3](https://github.com/feathersjs/primus/tree/v1.3.3) (2016-04-16) 169 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.3.2...v1.3.3) 170 | 171 | **Merged pull requests:** 172 | 173 | - Increase the default number of maximum event listeners [\#13](https://github.com/feathersjs/primus/pull/13) ([daffl](https://github.com/daffl)) 174 | - Update feathers-memory to version 0.7.0 🚀 [\#12](https://github.com/feathersjs/primus/pull/12) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 175 | - Update primus to version 5.0.1 🚀 [\#11](https://github.com/feathersjs/primus/pull/11) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 176 | - Update primus to version 5.0.0 🚀 [\#10](https://github.com/feathersjs/primus/pull/10) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 177 | 178 | ## [v1.3.2](https://github.com/feathersjs/primus/tree/v1.3.2) (2016-02-11) 179 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.3.1...v1.3.2) 180 | 181 | **Merged pull requests:** 182 | 183 | - Allow to instantiate a client instance [\#9](https://github.com/feathersjs/primus/pull/9) ([daffl](https://github.com/daffl)) 184 | 185 | ## [v1.3.1](https://github.com/feathersjs/primus/tree/v1.3.1) (2016-02-09) 186 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.3.0...v1.3.1) 187 | 188 | **Merged pull requests:** 189 | 190 | - Update feathers-commons to version 0.7.0 🚀 [\#8](https://github.com/feathersjs/primus/pull/8) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 191 | 192 | ## [v1.3.0](https://github.com/feathersjs/primus/tree/v1.3.0) (2016-02-09) 193 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.2.1...v1.3.0) 194 | 195 | **Merged pull requests:** 196 | 197 | - Update feathers-memory to version 0.6.0 🚀 [\#6](https://github.com/feathersjs/primus/pull/6) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 198 | - Update lodash to version 4.0.1 🚀 [\#5](https://github.com/feathersjs/primus/pull/5) ([greenkeeperio-bot](https://github.com/greenkeeperio-bot)) 199 | - Adding nsp check [\#4](https://github.com/feathersjs/primus/pull/4) ([marshallswain](https://github.com/marshallswain)) 200 | 201 | ## [v1.2.1](https://github.com/feathersjs/primus/tree/v1.2.1) (2016-01-21) 202 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.2.0...v1.2.1) 203 | 204 | ## [v1.2.0](https://github.com/feathersjs/primus/tree/v1.2.0) (2016-01-21) 205 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.1.0...v1.2.0) 206 | 207 | **Merged pull requests:** 208 | 209 | - Refactoring to use feathers-socket-commons that support event filtering [\#3](https://github.com/feathersjs/primus/pull/3) ([daffl](https://github.com/daffl)) 210 | 211 | ## [v1.1.0](https://github.com/feathersjs/primus/tree/v1.1.0) (2016-01-10) 212 | [Full Changelog](https://github.com/feathersjs/primus/compare/v1.0.0...v1.1.0) 213 | 214 | **Merged pull requests:** 215 | 216 | - feathers-primus/client service and tests [\#1](https://github.com/feathersjs/primus/pull/1) ([daffl](https://github.com/daffl)) 217 | 218 | ## [v1.0.0](https://github.com/feathersjs/primus/tree/v1.0.0) (2016-01-03) 219 | 220 | 221 | \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Feathers 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @feathersjs/primus 2 | 3 | > __Important:__ The code for this module has been moved into the main Feathers repository at [feathersjs/feathers](https://github.com/feathersjs/feathers) ([package direct link](https://github.com/feathersjs/feathers/tree/master/packages/primus)). Please open issues and pull requests there. No changes in your existing Feathers applications are necessary. 4 | 5 | [![Build Status](https://travis-ci.org/feathersjs/primus.png?branch=master)](https://travis-ci.org/feathersjs/primus) 6 | 7 | The Feathers Primus real-time API provider 8 | 9 | ## Installation 10 | 11 | ``` 12 | npm install @feathersjs/primus --save 13 | ``` 14 | 15 | ## Quick example 16 | 17 | ```js 18 | const feathers = require('@feathersjs/feathers'); 19 | const primus = require('@feathersjs/primus'); 20 | 21 | const app = feathers(); 22 | 23 | // Set up Primus with SockJS 24 | app.configure(primus({ transformer: 'ws' })); 25 | 26 | app.listen(3030); 27 | ``` 28 | 29 | ## Documentation 30 | 31 | Please refer to the [@feathersjs/primus documentation](https://docs.feathersjs.com/api/primus.html) for more details. 32 | 33 | ## License 34 | 35 | Copyright (c) 2018 36 | 37 | Licensed under the [MIT license](LICENSE). 38 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | const { socket: commons } = require('@feathersjs/transport-commons'); 2 | const makeDebug = require('debug'); 3 | const Proto = require('uberproto'); 4 | const Primus = require('primus'); 5 | const http = require('http'); 6 | const Emitter = require('primus-emitter'); 7 | 8 | const debug = makeDebug('@feathersjs/primus'); 9 | const socketKey = Symbol('@feathersjs/primus/socket'); 10 | 11 | function configurePrimus (config, configurer) { 12 | return function () { 13 | const app = this; 14 | const getParams = spark => spark.request.feathers; 15 | 16 | if (!app.version || app.version < '3.0.0') { 17 | throw new Error('@feathersjs/primus is not compatible with this version of Feathers. Use the latest at @feathersjs/feathers.'); 18 | } 19 | 20 | const done = new Promise(resolve => { 21 | Proto.mixin({ 22 | listen (...args) { 23 | if (typeof this._super === 'function') { 24 | // If `listen` already exists 25 | // usually the case when the app has been expressified 26 | return this._super(...args); 27 | } 28 | 29 | const server = http.createServer(); 30 | 31 | this.setup(server); 32 | 33 | return server.listen(...args); 34 | }, 35 | 36 | setup (server) { 37 | debug('Setting up Primus'); 38 | 39 | if (!this.primus) { 40 | const primus = this.primus = new Primus(server, config); 41 | 42 | primus.plugin('emitter', Emitter); 43 | 44 | primus.use('feathers', function (req, res, next) { 45 | req.feathers = { provider: 'primus' }; 46 | 47 | next(); 48 | }, 0); 49 | 50 | primus.on('connection', spark => 51 | Object.defineProperty(getParams(spark), socketKey, { 52 | value: spark 53 | }) 54 | ); 55 | 56 | primus.on('disconnection', spark => { 57 | const { channels } = app; 58 | 59 | if (channels.length) { 60 | app.channel(app.channels).leave(getParams(spark)); 61 | } 62 | }); 63 | } 64 | 65 | if (typeof configurer === 'function') { 66 | debug('Calling Primus configuration function'); 67 | configurer.call(this, this.primus); 68 | } 69 | 70 | resolve(this.primus); 71 | 72 | return this._super.apply(this, arguments); 73 | } 74 | }, app); 75 | }); 76 | 77 | app.configure(commons({ 78 | done, 79 | socketKey, 80 | getParams, 81 | emit: 'send' 82 | })); 83 | }; 84 | } 85 | 86 | module.exports = configurePrimus; 87 | module.exports.SOCKET_KEY = socketKey; 88 | module.exports.default = configurePrimus; 89 | -------------------------------------------------------------------------------- /mocha.opts: -------------------------------------------------------------------------------- 1 | --recursive test/ 2 | --timeout 5000 3 | --exit 4 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@feathersjs/primus", 3 | "version": "3.2.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@feathersjs/commons": { 8 | "version": "1.4.0", 9 | "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-1.4.0.tgz", 10 | "integrity": "sha512-21/E+KpFJO32fK8snn9kVCWi7R3C2CEPUsuxgYg61mKqydXBvo0lDzMfhp//o4pu9rdZrvNSGyb32Gvi3eK3OA==" 11 | }, 12 | "@feathersjs/errors": { 13 | "version": "3.2.2", 14 | "resolved": "https://registry.npmjs.org/@feathersjs/errors/-/errors-3.2.2.tgz", 15 | "integrity": "sha512-j2SiZBUimcUAFXGnmiByQKV+8/OehnJFGP5wT3XKjU6nyiLft6Av5ti1/sRV+ji2Tu80H6YVfhIoVG8ndEpBnA==", 16 | "requires": { 17 | "debug": "^3.1.0" 18 | } 19 | }, 20 | "@feathersjs/express": { 21 | "version": "1.1.2", 22 | "resolved": "https://registry.npmjs.org/@feathersjs/express/-/express-1.1.2.tgz", 23 | "integrity": "sha512-oxXZs3QAZB80fBajb7nh3Pbongm8ESXVnJw1EuX7fui4JOXh2qGw9hf8e3xKAZ/fmkHmgofdA1A3iqIzBg3Isw==", 24 | "dev": true, 25 | "requires": { 26 | "@feathersjs/commons": "^1.2.0", 27 | "@feathersjs/errors": "^3.0.0", 28 | "debug": "^3.1.0", 29 | "express": "^4.16.2", 30 | "uberproto": "^1.2.0" 31 | }, 32 | "dependencies": { 33 | "uberproto": { 34 | "version": "1.2.0", 35 | "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-1.2.0.tgz", 36 | "integrity": "sha1-YdTqsCT5CcTm6lK+hnxIlKS+63Y=", 37 | "dev": true 38 | } 39 | } 40 | }, 41 | "@feathersjs/feathers": { 42 | "version": "3.1.0", 43 | "resolved": "https://registry.npmjs.org/@feathersjs/feathers/-/feathers-3.1.0.tgz", 44 | "integrity": "sha512-Ug8dhvxmsotQuRUf/fKxjSXLCH2D71+eaO6uOeJ5VEkqeGxg40AIwnHjP02Uxh1Tf2ON89S0OSq253G2hxsnIw==", 45 | "dev": true, 46 | "requires": { 47 | "@feathersjs/commons": "^1.4.0", 48 | "debug": "^3.1.0", 49 | "events": "^1.1.1", 50 | "uberproto": "^1.2.0" 51 | }, 52 | "dependencies": { 53 | "uberproto": { 54 | "version": "1.2.0", 55 | "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-1.2.0.tgz", 56 | "integrity": "sha1-YdTqsCT5CcTm6lK+hnxIlKS+63Y=", 57 | "dev": true 58 | } 59 | } 60 | }, 61 | "@feathersjs/transport-commons": { 62 | "version": "4.0.0", 63 | "resolved": "https://registry.npmjs.org/@feathersjs/transport-commons/-/transport-commons-4.0.0.tgz", 64 | "integrity": "sha512-O+kuJWpdao0Lw5Pg/65eOuMIlxu+aP9bnK9jNlxfwVdqCxw4eX3Jh8WS0WmQpfZYILk5oyhP/IUdHgSqcjaXgw==", 65 | "requires": { 66 | "@feathersjs/commons": "^1.4.0", 67 | "@feathersjs/errors": "^3.0.0", 68 | "debug": "^3.1.0", 69 | "lodash": "^4.17.4", 70 | "radix-router": "^3.0.1" 71 | } 72 | }, 73 | "abbrev": { 74 | "version": "1.0.9", 75 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", 76 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" 77 | }, 78 | "accepts": { 79 | "version": "1.3.4", 80 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", 81 | "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", 82 | "dev": true, 83 | "requires": { 84 | "mime-types": "~2.1.16", 85 | "negotiator": "0.6.1" 86 | } 87 | }, 88 | "access-control": { 89 | "version": "1.0.0", 90 | "resolved": "https://registry.npmjs.org/access-control/-/access-control-1.0.0.tgz", 91 | "integrity": "sha1-rrooLO53MT6FJAFj1p41sp421iY=", 92 | "requires": { 93 | "millisecond": "0.1.x", 94 | "setheader": "0.0.x", 95 | "vary": "1.1.x" 96 | } 97 | }, 98 | "acorn": { 99 | "version": "5.3.0", 100 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", 101 | "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", 102 | "dev": true 103 | }, 104 | "acorn-jsx": { 105 | "version": "3.0.1", 106 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 107 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 108 | "dev": true, 109 | "requires": { 110 | "acorn": "^3.0.4" 111 | }, 112 | "dependencies": { 113 | "acorn": { 114 | "version": "3.3.0", 115 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 116 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 117 | "dev": true 118 | } 119 | } 120 | }, 121 | "ajv": { 122 | "version": "5.5.2", 123 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 124 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 125 | "dev": true, 126 | "requires": { 127 | "co": "^4.6.0", 128 | "fast-deep-equal": "^1.0.0", 129 | "fast-json-stable-stringify": "^2.0.0", 130 | "json-schema-traverse": "^0.3.0" 131 | } 132 | }, 133 | "ajv-keywords": { 134 | "version": "2.1.1", 135 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", 136 | "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", 137 | "dev": true 138 | }, 139 | "align-text": { 140 | "version": "0.1.4", 141 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 142 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 143 | "requires": { 144 | "kind-of": "^3.0.2", 145 | "longest": "^1.0.1", 146 | "repeat-string": "^1.5.2" 147 | }, 148 | "dependencies": { 149 | "kind-of": { 150 | "version": "3.2.2", 151 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 152 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 153 | "requires": { 154 | "is-buffer": "^1.1.5" 155 | } 156 | } 157 | } 158 | }, 159 | "amdefine": { 160 | "version": "1.0.1", 161 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 162 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" 163 | }, 164 | "ansi-escapes": { 165 | "version": "3.0.0", 166 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", 167 | "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", 168 | "dev": true 169 | }, 170 | "ansi-regex": { 171 | "version": "2.1.1", 172 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 173 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 174 | }, 175 | "ansi-styles": { 176 | "version": "2.2.1", 177 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 178 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 179 | }, 180 | "append-transform": { 181 | "version": "0.4.0", 182 | "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", 183 | "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", 184 | "requires": { 185 | "default-require-extensions": "^1.0.0" 186 | } 187 | }, 188 | "argparse": { 189 | "version": "1.0.9", 190 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 191 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 192 | "requires": { 193 | "sprintf-js": "~1.0.2" 194 | } 195 | }, 196 | "array-flatten": { 197 | "version": "1.1.1", 198 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 199 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", 200 | "dev": true 201 | }, 202 | "array-includes": { 203 | "version": "3.0.3", 204 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", 205 | "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", 206 | "dev": true, 207 | "requires": { 208 | "define-properties": "^1.1.2", 209 | "es-abstract": "^1.7.0" 210 | } 211 | }, 212 | "array-union": { 213 | "version": "1.0.2", 214 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 215 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 216 | "dev": true, 217 | "requires": { 218 | "array-uniq": "^1.0.1" 219 | } 220 | }, 221 | "array-uniq": { 222 | "version": "1.0.3", 223 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 224 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 225 | "dev": true 226 | }, 227 | "arrify": { 228 | "version": "1.0.1", 229 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 230 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 231 | "dev": true 232 | }, 233 | "asap": { 234 | "version": "2.0.6", 235 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 236 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", 237 | "dev": true 238 | }, 239 | "asn1": { 240 | "version": "0.2.3", 241 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 242 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 243 | "dev": true 244 | }, 245 | "assert-plus": { 246 | "version": "1.0.0", 247 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 248 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 249 | "dev": true 250 | }, 251 | "async": { 252 | "version": "1.5.2", 253 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 254 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" 255 | }, 256 | "async-limiter": { 257 | "version": "1.0.0", 258 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 259 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", 260 | "dev": true 261 | }, 262 | "asyncemit": { 263 | "version": "3.0.1", 264 | "resolved": "https://registry.npmjs.org/asyncemit/-/asyncemit-3.0.1.tgz", 265 | "integrity": "sha1-zD4P4No5tTzBXls6qGFupqcr1Zk=" 266 | }, 267 | "asynckit": { 268 | "version": "0.4.0", 269 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 270 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 271 | "dev": true 272 | }, 273 | "aws-sign2": { 274 | "version": "0.7.0", 275 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 276 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 277 | "dev": true 278 | }, 279 | "aws4": { 280 | "version": "1.6.0", 281 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 282 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", 283 | "dev": true 284 | }, 285 | "babel-code-frame": { 286 | "version": "6.26.0", 287 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 288 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 289 | "requires": { 290 | "chalk": "^1.1.3", 291 | "esutils": "^2.0.2", 292 | "js-tokens": "^3.0.2" 293 | } 294 | }, 295 | "babel-generator": { 296 | "version": "6.26.0", 297 | "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", 298 | "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", 299 | "requires": { 300 | "babel-messages": "^6.23.0", 301 | "babel-runtime": "^6.26.0", 302 | "babel-types": "^6.26.0", 303 | "detect-indent": "^4.0.0", 304 | "jsesc": "^1.3.0", 305 | "lodash": "^4.17.4", 306 | "source-map": "^0.5.6", 307 | "trim-right": "^1.0.1" 308 | } 309 | }, 310 | "babel-messages": { 311 | "version": "6.23.0", 312 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 313 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 314 | "requires": { 315 | "babel-runtime": "^6.22.0" 316 | } 317 | }, 318 | "babel-runtime": { 319 | "version": "6.26.0", 320 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 321 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 322 | "requires": { 323 | "core-js": "^2.4.0", 324 | "regenerator-runtime": "^0.11.0" 325 | } 326 | }, 327 | "babel-template": { 328 | "version": "6.26.0", 329 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 330 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 331 | "requires": { 332 | "babel-runtime": "^6.26.0", 333 | "babel-traverse": "^6.26.0", 334 | "babel-types": "^6.26.0", 335 | "babylon": "^6.18.0", 336 | "lodash": "^4.17.4" 337 | } 338 | }, 339 | "babel-traverse": { 340 | "version": "6.26.0", 341 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 342 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 343 | "requires": { 344 | "babel-code-frame": "^6.26.0", 345 | "babel-messages": "^6.23.0", 346 | "babel-runtime": "^6.26.0", 347 | "babel-types": "^6.26.0", 348 | "babylon": "^6.18.0", 349 | "debug": "^2.6.8", 350 | "globals": "^9.18.0", 351 | "invariant": "^2.2.2", 352 | "lodash": "^4.17.4" 353 | }, 354 | "dependencies": { 355 | "debug": { 356 | "version": "2.6.9", 357 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 358 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 359 | "requires": { 360 | "ms": "2.0.0" 361 | } 362 | } 363 | } 364 | }, 365 | "babel-types": { 366 | "version": "6.26.0", 367 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 368 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 369 | "requires": { 370 | "babel-runtime": "^6.26.0", 371 | "esutils": "^2.0.2", 372 | "lodash": "^4.17.4", 373 | "to-fast-properties": "^1.0.3" 374 | } 375 | }, 376 | "babylon": { 377 | "version": "6.18.0", 378 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 379 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" 380 | }, 381 | "balanced-match": { 382 | "version": "1.0.0", 383 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 384 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 385 | }, 386 | "bcrypt-pbkdf": { 387 | "version": "1.0.1", 388 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 389 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 390 | "dev": true, 391 | "optional": true, 392 | "requires": { 393 | "tweetnacl": "^0.14.3" 394 | } 395 | }, 396 | "body-parser": { 397 | "version": "1.18.2", 398 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 399 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 400 | "dev": true, 401 | "requires": { 402 | "bytes": "3.0.0", 403 | "content-type": "~1.0.4", 404 | "debug": "2.6.9", 405 | "depd": "~1.1.1", 406 | "http-errors": "~1.6.2", 407 | "iconv-lite": "0.4.19", 408 | "on-finished": "~2.3.0", 409 | "qs": "6.5.1", 410 | "raw-body": "2.3.2", 411 | "type-is": "~1.6.15" 412 | }, 413 | "dependencies": { 414 | "debug": { 415 | "version": "2.6.9", 416 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 417 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 418 | "dev": true, 419 | "requires": { 420 | "ms": "2.0.0" 421 | } 422 | } 423 | } 424 | }, 425 | "boom": { 426 | "version": "4.3.1", 427 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 428 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 429 | "dev": true, 430 | "requires": { 431 | "hoek": "4.x.x" 432 | } 433 | }, 434 | "brace-expansion": { 435 | "version": "1.1.8", 436 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 437 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 438 | "requires": { 439 | "balanced-match": "^1.0.0", 440 | "concat-map": "0.0.1" 441 | } 442 | }, 443 | "browser-stdout": { 444 | "version": "1.3.0", 445 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 446 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 447 | "dev": true 448 | }, 449 | "builtin-modules": { 450 | "version": "1.1.1", 451 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 452 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 453 | "dev": true 454 | }, 455 | "bytes": { 456 | "version": "3.0.0", 457 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 458 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", 459 | "dev": true 460 | }, 461 | "caller-path": { 462 | "version": "0.1.0", 463 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 464 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 465 | "dev": true, 466 | "requires": { 467 | "callsites": "^0.2.0" 468 | } 469 | }, 470 | "callsites": { 471 | "version": "0.2.0", 472 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 473 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 474 | "dev": true 475 | }, 476 | "camelcase": { 477 | "version": "1.2.1", 478 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 479 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 480 | "optional": true 481 | }, 482 | "caseless": { 483 | "version": "0.12.0", 484 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 485 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 486 | "dev": true 487 | }, 488 | "center-align": { 489 | "version": "0.1.3", 490 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 491 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 492 | "optional": true, 493 | "requires": { 494 | "align-text": "^0.1.3", 495 | "lazy-cache": "^1.0.3" 496 | } 497 | }, 498 | "chalk": { 499 | "version": "1.1.3", 500 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 501 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 502 | "requires": { 503 | "ansi-styles": "^2.2.1", 504 | "escape-string-regexp": "^1.0.2", 505 | "has-ansi": "^2.0.0", 506 | "strip-ansi": "^3.0.0", 507 | "supports-color": "^2.0.0" 508 | } 509 | }, 510 | "chardet": { 511 | "version": "0.4.2", 512 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", 513 | "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", 514 | "dev": true 515 | }, 516 | "circular-json": { 517 | "version": "0.3.3", 518 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 519 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 520 | "dev": true 521 | }, 522 | "cli-cursor": { 523 | "version": "2.1.0", 524 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 525 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 526 | "dev": true, 527 | "requires": { 528 | "restore-cursor": "^2.0.0" 529 | } 530 | }, 531 | "cli-width": { 532 | "version": "2.2.0", 533 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 534 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 535 | "dev": true 536 | }, 537 | "cliui": { 538 | "version": "2.1.0", 539 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 540 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 541 | "optional": true, 542 | "requires": { 543 | "center-align": "^0.1.1", 544 | "right-align": "^0.1.1", 545 | "wordwrap": "0.0.2" 546 | }, 547 | "dependencies": { 548 | "wordwrap": { 549 | "version": "0.0.2", 550 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 551 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 552 | "optional": true 553 | } 554 | } 555 | }, 556 | "clone-deep": { 557 | "version": "2.0.2", 558 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", 559 | "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", 560 | "dev": true, 561 | "requires": { 562 | "for-own": "^1.0.0", 563 | "is-plain-object": "^2.0.4", 564 | "kind-of": "^6.0.0", 565 | "shallow-clone": "^1.0.0" 566 | } 567 | }, 568 | "co": { 569 | "version": "4.6.0", 570 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 571 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 572 | "dev": true 573 | }, 574 | "color": { 575 | "version": "0.8.0", 576 | "resolved": "https://registry.npmjs.org/color/-/color-0.8.0.tgz", 577 | "integrity": "sha1-iQwHw/1OZJU3Y4kRz2keVFi2/KU=", 578 | "requires": { 579 | "color-convert": "^0.5.0", 580 | "color-string": "^0.3.0" 581 | } 582 | }, 583 | "color-convert": { 584 | "version": "0.5.3", 585 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", 586 | "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=" 587 | }, 588 | "color-name": { 589 | "version": "1.1.3", 590 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 591 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 592 | }, 593 | "color-string": { 594 | "version": "0.3.0", 595 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", 596 | "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", 597 | "requires": { 598 | "color-name": "^1.0.0" 599 | } 600 | }, 601 | "colornames": { 602 | "version": "0.0.2", 603 | "resolved": "https://registry.npmjs.org/colornames/-/colornames-0.0.2.tgz", 604 | "integrity": "sha1-2BH9bIT1kClJmorEQ2ICk1uSvjE=" 605 | }, 606 | "colorspace": { 607 | "version": "1.0.1", 608 | "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.0.1.tgz", 609 | "integrity": "sha1-yZx5btMRKLmHalLh7l7gOkpxl0k=", 610 | "requires": { 611 | "color": "0.8.x", 612 | "text-hex": "0.0.x" 613 | } 614 | }, 615 | "combined-stream": { 616 | "version": "1.0.5", 617 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 618 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 619 | "dev": true, 620 | "requires": { 621 | "delayed-stream": "~1.0.0" 622 | } 623 | }, 624 | "commander": { 625 | "version": "2.11.0", 626 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 627 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 628 | "dev": true 629 | }, 630 | "concat-map": { 631 | "version": "0.0.1", 632 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 633 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 634 | }, 635 | "concat-stream": { 636 | "version": "1.6.0", 637 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 638 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 639 | "dev": true, 640 | "requires": { 641 | "inherits": "^2.0.3", 642 | "readable-stream": "^2.2.2", 643 | "typedarray": "^0.0.6" 644 | } 645 | }, 646 | "connected": { 647 | "version": "0.0.2", 648 | "resolved": "https://registry.npmjs.org/connected/-/connected-0.0.2.tgz", 649 | "integrity": "sha1-e1dVshbOMf+rzMOOn04d/Bw7fG0=" 650 | }, 651 | "contains-path": { 652 | "version": "0.1.0", 653 | "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", 654 | "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", 655 | "dev": true 656 | }, 657 | "content-disposition": { 658 | "version": "0.5.2", 659 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 660 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", 661 | "dev": true 662 | }, 663 | "content-type": { 664 | "version": "1.0.4", 665 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 666 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 667 | "dev": true 668 | }, 669 | "cookie": { 670 | "version": "0.3.1", 671 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 672 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 673 | "dev": true 674 | }, 675 | "cookie-signature": { 676 | "version": "1.0.6", 677 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 678 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", 679 | "dev": true 680 | }, 681 | "core-js": { 682 | "version": "2.5.3", 683 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", 684 | "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" 685 | }, 686 | "core-util-is": { 687 | "version": "1.0.2", 688 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 689 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 690 | "dev": true 691 | }, 692 | "create-server": { 693 | "version": "1.0.1", 694 | "resolved": "https://registry.npmjs.org/create-server/-/create-server-1.0.1.tgz", 695 | "integrity": "sha1-FkNCg08Yi77Hx7xGZ0Y8wrEwTEQ=", 696 | "requires": { 697 | "connected": "0.0.x" 698 | } 699 | }, 700 | "cross-spawn": { 701 | "version": "5.1.0", 702 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 703 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 704 | "dev": true, 705 | "requires": { 706 | "lru-cache": "^4.0.1", 707 | "shebang-command": "^1.2.0", 708 | "which": "^1.2.9" 709 | } 710 | }, 711 | "cryptiles": { 712 | "version": "3.1.2", 713 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 714 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 715 | "dev": true, 716 | "requires": { 717 | "boom": "5.x.x" 718 | }, 719 | "dependencies": { 720 | "boom": { 721 | "version": "5.2.0", 722 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 723 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 724 | "dev": true, 725 | "requires": { 726 | "hoek": "4.x.x" 727 | } 728 | } 729 | } 730 | }, 731 | "dashdash": { 732 | "version": "1.14.1", 733 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 734 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 735 | "dev": true, 736 | "requires": { 737 | "assert-plus": "^1.0.0" 738 | } 739 | }, 740 | "debug": { 741 | "version": "3.1.0", 742 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 743 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 744 | "requires": { 745 | "ms": "2.0.0" 746 | } 747 | }, 748 | "debug-log": { 749 | "version": "1.0.1", 750 | "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", 751 | "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", 752 | "dev": true 753 | }, 754 | "decamelize": { 755 | "version": "1.2.0", 756 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 757 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 758 | "optional": true 759 | }, 760 | "deep-is": { 761 | "version": "0.1.3", 762 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 763 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 764 | "dev": true 765 | }, 766 | "default-require-extensions": { 767 | "version": "1.0.0", 768 | "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", 769 | "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", 770 | "requires": { 771 | "strip-bom": "^2.0.0" 772 | } 773 | }, 774 | "define-properties": { 775 | "version": "1.1.2", 776 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", 777 | "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", 778 | "dev": true, 779 | "requires": { 780 | "foreach": "^2.0.5", 781 | "object-keys": "^1.0.8" 782 | } 783 | }, 784 | "deglob": { 785 | "version": "2.1.0", 786 | "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", 787 | "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", 788 | "dev": true, 789 | "requires": { 790 | "find-root": "^1.0.0", 791 | "glob": "^7.0.5", 792 | "ignore": "^3.0.9", 793 | "pkg-config": "^1.1.0", 794 | "run-parallel": "^1.1.2", 795 | "uniq": "^1.0.1" 796 | } 797 | }, 798 | "del": { 799 | "version": "2.2.2", 800 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 801 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 802 | "dev": true, 803 | "requires": { 804 | "globby": "^5.0.0", 805 | "is-path-cwd": "^1.0.0", 806 | "is-path-in-cwd": "^1.0.0", 807 | "object-assign": "^4.0.1", 808 | "pify": "^2.0.0", 809 | "pinkie-promise": "^2.0.0", 810 | "rimraf": "^2.2.8" 811 | } 812 | }, 813 | "delayed-stream": { 814 | "version": "1.0.0", 815 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 816 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 817 | "dev": true 818 | }, 819 | "depd": { 820 | "version": "1.1.2", 821 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 822 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 823 | "dev": true 824 | }, 825 | "destroy": { 826 | "version": "1.0.4", 827 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 828 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", 829 | "dev": true 830 | }, 831 | "detect-indent": { 832 | "version": "4.0.0", 833 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", 834 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", 835 | "requires": { 836 | "repeating": "^2.0.0" 837 | } 838 | }, 839 | "diagnostics": { 840 | "version": "1.1.0", 841 | "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.0.tgz", 842 | "integrity": "sha1-4QkJALSVI+hSe+IPCBJ1IF8q42o=", 843 | "requires": { 844 | "colorspace": "1.0.x", 845 | "enabled": "1.0.x", 846 | "kuler": "0.0.x" 847 | } 848 | }, 849 | "diff": { 850 | "version": "3.3.1", 851 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", 852 | "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", 853 | "dev": true 854 | }, 855 | "doctrine": { 856 | "version": "2.1.0", 857 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 858 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 859 | "dev": true, 860 | "requires": { 861 | "esutils": "^2.0.2" 862 | } 863 | }, 864 | "ecc-jsbn": { 865 | "version": "0.1.1", 866 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 867 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 868 | "dev": true, 869 | "optional": true, 870 | "requires": { 871 | "jsbn": "~0.1.0" 872 | } 873 | }, 874 | "ee-first": { 875 | "version": "1.1.1", 876 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 877 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", 878 | "dev": true 879 | }, 880 | "emits": { 881 | "version": "3.0.0", 882 | "resolved": "https://registry.npmjs.org/emits/-/emits-3.0.0.tgz", 883 | "integrity": "sha1-MnUrupXhcHshlWI4Srm7ix/WL3A=" 884 | }, 885 | "enabled": { 886 | "version": "1.0.2", 887 | "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", 888 | "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", 889 | "requires": { 890 | "env-variable": "0.0.x" 891 | } 892 | }, 893 | "encodeurl": { 894 | "version": "1.0.2", 895 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 896 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 897 | "dev": true 898 | }, 899 | "encoding": { 900 | "version": "0.1.12", 901 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", 902 | "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", 903 | "dev": true, 904 | "requires": { 905 | "iconv-lite": "~0.4.13" 906 | } 907 | }, 908 | "env-variable": { 909 | "version": "0.0.3", 910 | "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.3.tgz", 911 | "integrity": "sha1-uGwWQb5WECZ9UG8YBx6nbXBwl8s=" 912 | }, 913 | "error-ex": { 914 | "version": "1.3.1", 915 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 916 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 917 | "dev": true, 918 | "requires": { 919 | "is-arrayish": "^0.2.1" 920 | } 921 | }, 922 | "es-abstract": { 923 | "version": "1.10.0", 924 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", 925 | "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", 926 | "dev": true, 927 | "requires": { 928 | "es-to-primitive": "^1.1.1", 929 | "function-bind": "^1.1.1", 930 | "has": "^1.0.1", 931 | "is-callable": "^1.1.3", 932 | "is-regex": "^1.0.4" 933 | } 934 | }, 935 | "es-to-primitive": { 936 | "version": "1.1.1", 937 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", 938 | "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", 939 | "dev": true, 940 | "requires": { 941 | "is-callable": "^1.1.1", 942 | "is-date-object": "^1.0.1", 943 | "is-symbol": "^1.0.1" 944 | } 945 | }, 946 | "escape-html": { 947 | "version": "1.0.3", 948 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 949 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 950 | "dev": true 951 | }, 952 | "escape-string-regexp": { 953 | "version": "1.0.5", 954 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 955 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 956 | }, 957 | "eslint": { 958 | "version": "4.14.0", 959 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.14.0.tgz", 960 | "integrity": "sha512-Ul6CSGRjKscEyg0X/EeNs7o2XdnbTEOD1OM8cTjmx85RPcBJQrEhZLevhuJZNAE/vS2iVl5Uhgiqf3h5uLMCJQ==", 961 | "dev": true, 962 | "requires": { 963 | "ajv": "^5.3.0", 964 | "babel-code-frame": "^6.22.0", 965 | "chalk": "^2.1.0", 966 | "concat-stream": "^1.6.0", 967 | "cross-spawn": "^5.1.0", 968 | "debug": "^3.1.0", 969 | "doctrine": "^2.0.2", 970 | "eslint-scope": "^3.7.1", 971 | "eslint-visitor-keys": "^1.0.0", 972 | "espree": "^3.5.2", 973 | "esquery": "^1.0.0", 974 | "esutils": "^2.0.2", 975 | "file-entry-cache": "^2.0.0", 976 | "functional-red-black-tree": "^1.0.1", 977 | "glob": "^7.1.2", 978 | "globals": "^11.0.1", 979 | "ignore": "^3.3.3", 980 | "imurmurhash": "^0.1.4", 981 | "inquirer": "^3.0.6", 982 | "is-resolvable": "^1.0.0", 983 | "js-yaml": "^3.9.1", 984 | "json-stable-stringify-without-jsonify": "^1.0.1", 985 | "levn": "^0.3.0", 986 | "lodash": "^4.17.4", 987 | "minimatch": "^3.0.2", 988 | "mkdirp": "^0.5.1", 989 | "natural-compare": "^1.4.0", 990 | "optionator": "^0.8.2", 991 | "path-is-inside": "^1.0.2", 992 | "pluralize": "^7.0.0", 993 | "progress": "^2.0.0", 994 | "require-uncached": "^1.0.3", 995 | "semver": "^5.3.0", 996 | "strip-ansi": "^4.0.0", 997 | "strip-json-comments": "~2.0.1", 998 | "table": "^4.0.1", 999 | "text-table": "~0.2.0" 1000 | }, 1001 | "dependencies": { 1002 | "ansi-regex": { 1003 | "version": "3.0.0", 1004 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1005 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1006 | "dev": true 1007 | }, 1008 | "ansi-styles": { 1009 | "version": "3.2.0", 1010 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 1011 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 1012 | "dev": true, 1013 | "requires": { 1014 | "color-convert": "^1.9.0" 1015 | } 1016 | }, 1017 | "chalk": { 1018 | "version": "2.3.0", 1019 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 1020 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 1021 | "dev": true, 1022 | "requires": { 1023 | "ansi-styles": "^3.1.0", 1024 | "escape-string-regexp": "^1.0.5", 1025 | "supports-color": "^4.0.0" 1026 | } 1027 | }, 1028 | "color-convert": { 1029 | "version": "1.9.1", 1030 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 1031 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 1032 | "dev": true, 1033 | "requires": { 1034 | "color-name": "^1.1.1" 1035 | } 1036 | }, 1037 | "globals": { 1038 | "version": "11.2.0", 1039 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.2.0.tgz", 1040 | "integrity": "sha512-RDC7Tj17I/56wpVvCVLSXtnn2Fo6CQZ9vaj+ARn+qlzm/ozbKQZe+j9fvHZCbSq+4JSGjTpKEt7p/AA1IKXRFA==", 1041 | "dev": true 1042 | }, 1043 | "has-flag": { 1044 | "version": "2.0.0", 1045 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 1046 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 1047 | "dev": true 1048 | }, 1049 | "strip-ansi": { 1050 | "version": "4.0.0", 1051 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1052 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1053 | "dev": true, 1054 | "requires": { 1055 | "ansi-regex": "^3.0.0" 1056 | } 1057 | }, 1058 | "supports-color": { 1059 | "version": "4.5.0", 1060 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 1061 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 1062 | "dev": true, 1063 | "requires": { 1064 | "has-flag": "^2.0.0" 1065 | } 1066 | } 1067 | } 1068 | }, 1069 | "eslint-config-semistandard": { 1070 | "version": "12.0.0", 1071 | "resolved": "https://registry.npmjs.org/eslint-config-semistandard/-/eslint-config-semistandard-12.0.0.tgz", 1072 | "integrity": "sha512-Wc7+MV5E1S846Y5QvhCblUe7cFp3OyvZebZfzy8dF083yNNokE1XPmSwDJUX3gFA5kjctUaBvorNCdOwEBjKlA==", 1073 | "dev": true 1074 | }, 1075 | "eslint-config-standard": { 1076 | "version": "11.0.0-beta.0", 1077 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0-beta.0.tgz", 1078 | "integrity": "sha512-f+vs5HAHQo7NRZ3hVe+UVdT5DbebMNaFTWFp95orJ0LUdYPoWdM8xw/bMeO/IZMvHOPmIteGKGc2QOhSXd5nRg==", 1079 | "dev": true 1080 | }, 1081 | "eslint-config-standard-jsx": { 1082 | "version": "4.0.2", 1083 | "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz", 1084 | "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==", 1085 | "dev": true 1086 | }, 1087 | "eslint-import-resolver-node": { 1088 | "version": "0.3.2", 1089 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", 1090 | "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", 1091 | "dev": true, 1092 | "requires": { 1093 | "debug": "^2.6.9", 1094 | "resolve": "^1.5.0" 1095 | }, 1096 | "dependencies": { 1097 | "debug": { 1098 | "version": "2.6.9", 1099 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1100 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1101 | "dev": true, 1102 | "requires": { 1103 | "ms": "2.0.0" 1104 | } 1105 | } 1106 | } 1107 | }, 1108 | "eslint-module-utils": { 1109 | "version": "2.1.1", 1110 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", 1111 | "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", 1112 | "dev": true, 1113 | "requires": { 1114 | "debug": "^2.6.8", 1115 | "pkg-dir": "^1.0.0" 1116 | }, 1117 | "dependencies": { 1118 | "debug": { 1119 | "version": "2.6.9", 1120 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1121 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1122 | "dev": true, 1123 | "requires": { 1124 | "ms": "2.0.0" 1125 | } 1126 | } 1127 | } 1128 | }, 1129 | "eslint-plugin-import": { 1130 | "version": "2.8.0", 1131 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", 1132 | "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", 1133 | "dev": true, 1134 | "requires": { 1135 | "builtin-modules": "^1.1.1", 1136 | "contains-path": "^0.1.0", 1137 | "debug": "^2.6.8", 1138 | "doctrine": "1.5.0", 1139 | "eslint-import-resolver-node": "^0.3.1", 1140 | "eslint-module-utils": "^2.1.1", 1141 | "has": "^1.0.1", 1142 | "lodash.cond": "^4.3.0", 1143 | "minimatch": "^3.0.3", 1144 | "read-pkg-up": "^2.0.0" 1145 | }, 1146 | "dependencies": { 1147 | "debug": { 1148 | "version": "2.6.9", 1149 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1150 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1151 | "dev": true, 1152 | "requires": { 1153 | "ms": "2.0.0" 1154 | } 1155 | }, 1156 | "doctrine": { 1157 | "version": "1.5.0", 1158 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", 1159 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", 1160 | "dev": true, 1161 | "requires": { 1162 | "esutils": "^2.0.2", 1163 | "isarray": "^1.0.0" 1164 | } 1165 | } 1166 | } 1167 | }, 1168 | "eslint-plugin-node": { 1169 | "version": "5.2.1", 1170 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", 1171 | "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==", 1172 | "dev": true, 1173 | "requires": { 1174 | "ignore": "^3.3.6", 1175 | "minimatch": "^3.0.4", 1176 | "resolve": "^1.3.3", 1177 | "semver": "5.3.0" 1178 | }, 1179 | "dependencies": { 1180 | "semver": { 1181 | "version": "5.3.0", 1182 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", 1183 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", 1184 | "dev": true 1185 | } 1186 | } 1187 | }, 1188 | "eslint-plugin-promise": { 1189 | "version": "3.6.0", 1190 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz", 1191 | "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==", 1192 | "dev": true 1193 | }, 1194 | "eslint-plugin-react": { 1195 | "version": "7.5.1", 1196 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz", 1197 | "integrity": "sha512-YGSjB9Qu6QbVTroUZi66pYky3DfoIPLdHQ/wmrBGyBRnwxQsBXAov9j2rpXt/55i8nyMv6IRWJv2s4d4YnduzQ==", 1198 | "dev": true, 1199 | "requires": { 1200 | "doctrine": "^2.0.0", 1201 | "has": "^1.0.1", 1202 | "jsx-ast-utils": "^2.0.0", 1203 | "prop-types": "^15.6.0" 1204 | } 1205 | }, 1206 | "eslint-plugin-standard": { 1207 | "version": "3.0.1", 1208 | "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", 1209 | "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", 1210 | "dev": true 1211 | }, 1212 | "eslint-scope": { 1213 | "version": "3.7.1", 1214 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", 1215 | "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", 1216 | "dev": true, 1217 | "requires": { 1218 | "esrecurse": "^4.1.0", 1219 | "estraverse": "^4.1.1" 1220 | } 1221 | }, 1222 | "eslint-visitor-keys": { 1223 | "version": "1.0.0", 1224 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 1225 | "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", 1226 | "dev": true 1227 | }, 1228 | "espree": { 1229 | "version": "3.5.2", 1230 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", 1231 | "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", 1232 | "dev": true, 1233 | "requires": { 1234 | "acorn": "^5.2.1", 1235 | "acorn-jsx": "^3.0.0" 1236 | } 1237 | }, 1238 | "esprima": { 1239 | "version": "4.0.0", 1240 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 1241 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" 1242 | }, 1243 | "esquery": { 1244 | "version": "1.0.0", 1245 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", 1246 | "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", 1247 | "dev": true, 1248 | "requires": { 1249 | "estraverse": "^4.0.0" 1250 | } 1251 | }, 1252 | "esrecurse": { 1253 | "version": "4.2.0", 1254 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", 1255 | "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", 1256 | "dev": true, 1257 | "requires": { 1258 | "estraverse": "^4.1.0", 1259 | "object-assign": "^4.0.1" 1260 | } 1261 | }, 1262 | "estraverse": { 1263 | "version": "4.2.0", 1264 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 1265 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 1266 | "dev": true 1267 | }, 1268 | "esutils": { 1269 | "version": "2.0.2", 1270 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 1271 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" 1272 | }, 1273 | "etag": { 1274 | "version": "1.8.1", 1275 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1276 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", 1277 | "dev": true 1278 | }, 1279 | "eventemitter3": { 1280 | "version": "3.0.0", 1281 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.0.0.tgz", 1282 | "integrity": "sha512-62TxCtz4m2LRaOERVEvLJJ4A6rsg8lC9Xm+FLg2y/1fB/v4ZZ9JCOn+/Ppl5KkH6sRih6bhix724PVanmXYZJQ==" 1283 | }, 1284 | "events": { 1285 | "version": "1.1.1", 1286 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 1287 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", 1288 | "dev": true 1289 | }, 1290 | "express": { 1291 | "version": "4.16.2", 1292 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", 1293 | "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", 1294 | "dev": true, 1295 | "requires": { 1296 | "accepts": "~1.3.4", 1297 | "array-flatten": "1.1.1", 1298 | "body-parser": "1.18.2", 1299 | "content-disposition": "0.5.2", 1300 | "content-type": "~1.0.4", 1301 | "cookie": "0.3.1", 1302 | "cookie-signature": "1.0.6", 1303 | "debug": "2.6.9", 1304 | "depd": "~1.1.1", 1305 | "encodeurl": "~1.0.1", 1306 | "escape-html": "~1.0.3", 1307 | "etag": "~1.8.1", 1308 | "finalhandler": "1.1.0", 1309 | "fresh": "0.5.2", 1310 | "merge-descriptors": "1.0.1", 1311 | "methods": "~1.1.2", 1312 | "on-finished": "~2.3.0", 1313 | "parseurl": "~1.3.2", 1314 | "path-to-regexp": "0.1.7", 1315 | "proxy-addr": "~2.0.2", 1316 | "qs": "6.5.1", 1317 | "range-parser": "~1.2.0", 1318 | "safe-buffer": "5.1.1", 1319 | "send": "0.16.1", 1320 | "serve-static": "1.13.1", 1321 | "setprototypeof": "1.1.0", 1322 | "statuses": "~1.3.1", 1323 | "type-is": "~1.6.15", 1324 | "utils-merge": "1.0.1", 1325 | "vary": "~1.1.2" 1326 | }, 1327 | "dependencies": { 1328 | "debug": { 1329 | "version": "2.6.9", 1330 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1331 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1332 | "dev": true, 1333 | "requires": { 1334 | "ms": "2.0.0" 1335 | } 1336 | } 1337 | } 1338 | }, 1339 | "extend": { 1340 | "version": "3.0.1", 1341 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 1342 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 1343 | "dev": true 1344 | }, 1345 | "extendible": { 1346 | "version": "0.1.1", 1347 | "resolved": "https://registry.npmjs.org/extendible/-/extendible-0.1.1.tgz", 1348 | "integrity": "sha1-4qN+2HEp+0+VM+io11BiMKU5yQU=" 1349 | }, 1350 | "external-editor": { 1351 | "version": "2.1.0", 1352 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", 1353 | "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", 1354 | "dev": true, 1355 | "requires": { 1356 | "chardet": "^0.4.0", 1357 | "iconv-lite": "^0.4.17", 1358 | "tmp": "^0.0.33" 1359 | } 1360 | }, 1361 | "extsprintf": { 1362 | "version": "1.3.0", 1363 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1364 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 1365 | "dev": true 1366 | }, 1367 | "fast-deep-equal": { 1368 | "version": "1.0.0", 1369 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 1370 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", 1371 | "dev": true 1372 | }, 1373 | "fast-json-stable-stringify": { 1374 | "version": "2.0.0", 1375 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1376 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 1377 | "dev": true 1378 | }, 1379 | "fast-levenshtein": { 1380 | "version": "2.0.6", 1381 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1382 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1383 | "dev": true 1384 | }, 1385 | "fbjs": { 1386 | "version": "0.8.16", 1387 | "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", 1388 | "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", 1389 | "dev": true, 1390 | "requires": { 1391 | "core-js": "^1.0.0", 1392 | "isomorphic-fetch": "^2.1.1", 1393 | "loose-envify": "^1.0.0", 1394 | "object-assign": "^4.1.0", 1395 | "promise": "^7.1.1", 1396 | "setimmediate": "^1.0.5", 1397 | "ua-parser-js": "^0.7.9" 1398 | }, 1399 | "dependencies": { 1400 | "core-js": { 1401 | "version": "1.2.7", 1402 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", 1403 | "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", 1404 | "dev": true 1405 | } 1406 | } 1407 | }, 1408 | "feathers": { 1409 | "version": "2.2.4", 1410 | "resolved": "https://registry.npmjs.org/feathers/-/feathers-2.2.4.tgz", 1411 | "integrity": "sha512-9IYKbxRKoDuerLCkYmFkQuKOwyB2SMM1kSUswDzlE0AmdzDrcfocVYb87/BsQx2j6hFkdCVFYkXq3+YPSDMT3w==", 1412 | "dev": true, 1413 | "requires": { 1414 | "babel-runtime": "^6.26.0", 1415 | "debug": "^3.1.0", 1416 | "events": "^1.1.1", 1417 | "express": "^4.16.1", 1418 | "feathers-commons": "^0.8.7", 1419 | "rubberduck": "^1.1.1", 1420 | "uberproto": "^1.2.0" 1421 | }, 1422 | "dependencies": { 1423 | "uberproto": { 1424 | "version": "1.2.0", 1425 | "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-1.2.0.tgz", 1426 | "integrity": "sha1-YdTqsCT5CcTm6lK+hnxIlKS+63Y=", 1427 | "dev": true 1428 | } 1429 | } 1430 | }, 1431 | "feathers-commons": { 1432 | "version": "0.8.7", 1433 | "resolved": "https://registry.npmjs.org/feathers-commons/-/feathers-commons-0.8.7.tgz", 1434 | "integrity": "sha1-EcbyW1N3RamD6NYVUtfbiTLVN4I=", 1435 | "dev": true 1436 | }, 1437 | "feathers-memory": { 1438 | "version": "2.1.0", 1439 | "resolved": "https://registry.npmjs.org/feathers-memory/-/feathers-memory-2.1.0.tgz", 1440 | "integrity": "sha512-yfHurB/C0zUzOVGMulRkdqUvUXtFUt4OIRvCvDlKi6vmnejcgDpEpIGGrzMzkpcKtgOIfnB8ghT5Qrcchn1amw==", 1441 | "dev": true, 1442 | "requires": { 1443 | "@feathersjs/commons": "^1.3.0", 1444 | "@feathersjs/errors": "^3.2.0", 1445 | "clone-deep": "^2.0.0", 1446 | "sift": "^5.0.0", 1447 | "uberproto": "^1.2.0" 1448 | }, 1449 | "dependencies": { 1450 | "uberproto": { 1451 | "version": "1.2.0", 1452 | "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-1.2.0.tgz", 1453 | "integrity": "sha1-YdTqsCT5CcTm6lK+hnxIlKS+63Y=", 1454 | "dev": true 1455 | } 1456 | } 1457 | }, 1458 | "figures": { 1459 | "version": "2.0.0", 1460 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1461 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 1462 | "dev": true, 1463 | "requires": { 1464 | "escape-string-regexp": "^1.0.5" 1465 | } 1466 | }, 1467 | "file-entry-cache": { 1468 | "version": "2.0.0", 1469 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 1470 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 1471 | "dev": true, 1472 | "requires": { 1473 | "flat-cache": "^1.2.1", 1474 | "object-assign": "^4.0.1" 1475 | } 1476 | }, 1477 | "fileset": { 1478 | "version": "2.0.3", 1479 | "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", 1480 | "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", 1481 | "requires": { 1482 | "glob": "^7.0.3", 1483 | "minimatch": "^3.0.3" 1484 | } 1485 | }, 1486 | "finalhandler": { 1487 | "version": "1.1.0", 1488 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", 1489 | "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", 1490 | "dev": true, 1491 | "requires": { 1492 | "debug": "2.6.9", 1493 | "encodeurl": "~1.0.1", 1494 | "escape-html": "~1.0.3", 1495 | "on-finished": "~2.3.0", 1496 | "parseurl": "~1.3.2", 1497 | "statuses": "~1.3.1", 1498 | "unpipe": "~1.0.0" 1499 | }, 1500 | "dependencies": { 1501 | "debug": { 1502 | "version": "2.6.9", 1503 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1504 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1505 | "dev": true, 1506 | "requires": { 1507 | "ms": "2.0.0" 1508 | } 1509 | } 1510 | } 1511 | }, 1512 | "find-root": { 1513 | "version": "1.1.0", 1514 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", 1515 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", 1516 | "dev": true 1517 | }, 1518 | "find-up": { 1519 | "version": "1.1.2", 1520 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 1521 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 1522 | "dev": true, 1523 | "requires": { 1524 | "path-exists": "^2.0.0", 1525 | "pinkie-promise": "^2.0.0" 1526 | } 1527 | }, 1528 | "flat-cache": { 1529 | "version": "1.3.0", 1530 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", 1531 | "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", 1532 | "dev": true, 1533 | "requires": { 1534 | "circular-json": "^0.3.1", 1535 | "del": "^2.0.2", 1536 | "graceful-fs": "^4.1.2", 1537 | "write": "^0.2.1" 1538 | } 1539 | }, 1540 | "for-in": { 1541 | "version": "1.0.2", 1542 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 1543 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 1544 | "dev": true 1545 | }, 1546 | "for-own": { 1547 | "version": "1.0.0", 1548 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", 1549 | "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", 1550 | "dev": true, 1551 | "requires": { 1552 | "for-in": "^1.0.1" 1553 | } 1554 | }, 1555 | "foreach": { 1556 | "version": "2.0.5", 1557 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 1558 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", 1559 | "dev": true 1560 | }, 1561 | "forever-agent": { 1562 | "version": "0.6.1", 1563 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1564 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 1565 | "dev": true 1566 | }, 1567 | "form-data": { 1568 | "version": "2.3.1", 1569 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", 1570 | "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", 1571 | "dev": true, 1572 | "requires": { 1573 | "asynckit": "^0.4.0", 1574 | "combined-stream": "^1.0.5", 1575 | "mime-types": "^2.1.12" 1576 | } 1577 | }, 1578 | "forwarded": { 1579 | "version": "0.1.2", 1580 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 1581 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", 1582 | "dev": true 1583 | }, 1584 | "forwarded-for": { 1585 | "version": "1.0.1", 1586 | "resolved": "https://registry.npmjs.org/forwarded-for/-/forwarded-for-1.0.1.tgz", 1587 | "integrity": "sha1-59pIFAJRaP/AoQ0/954UFfRq9Gk=" 1588 | }, 1589 | "fresh": { 1590 | "version": "0.5.2", 1591 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 1592 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", 1593 | "dev": true 1594 | }, 1595 | "fs.realpath": { 1596 | "version": "1.0.0", 1597 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1598 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 1599 | }, 1600 | "function-bind": { 1601 | "version": "1.1.1", 1602 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1603 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1604 | "dev": true 1605 | }, 1606 | "functional-red-black-tree": { 1607 | "version": "1.0.1", 1608 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1609 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1610 | "dev": true 1611 | }, 1612 | "fusing": { 1613 | "version": "1.0.0", 1614 | "resolved": "https://registry.npmjs.org/fusing/-/fusing-1.0.0.tgz", 1615 | "integrity": "sha1-VQwV12r5Jld4qgUezkTUAAoJjUU=", 1616 | "requires": { 1617 | "emits": "3.0.x", 1618 | "predefine": "0.1.x" 1619 | } 1620 | }, 1621 | "get-stdin": { 1622 | "version": "5.0.1", 1623 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", 1624 | "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", 1625 | "dev": true 1626 | }, 1627 | "getpass": { 1628 | "version": "0.1.7", 1629 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1630 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1631 | "dev": true, 1632 | "requires": { 1633 | "assert-plus": "^1.0.0" 1634 | } 1635 | }, 1636 | "glob": { 1637 | "version": "7.1.2", 1638 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1639 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1640 | "requires": { 1641 | "fs.realpath": "^1.0.0", 1642 | "inflight": "^1.0.4", 1643 | "inherits": "2", 1644 | "minimatch": "^3.0.4", 1645 | "once": "^1.3.0", 1646 | "path-is-absolute": "^1.0.0" 1647 | } 1648 | }, 1649 | "globals": { 1650 | "version": "9.18.0", 1651 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 1652 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" 1653 | }, 1654 | "globby": { 1655 | "version": "5.0.0", 1656 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 1657 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 1658 | "dev": true, 1659 | "requires": { 1660 | "array-union": "^1.0.1", 1661 | "arrify": "^1.0.0", 1662 | "glob": "^7.0.3", 1663 | "object-assign": "^4.0.1", 1664 | "pify": "^2.0.0", 1665 | "pinkie-promise": "^2.0.0" 1666 | } 1667 | }, 1668 | "graceful-fs": { 1669 | "version": "4.1.11", 1670 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1671 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1672 | "dev": true 1673 | }, 1674 | "growl": { 1675 | "version": "1.10.3", 1676 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", 1677 | "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", 1678 | "dev": true 1679 | }, 1680 | "handlebars": { 1681 | "version": "4.0.11", 1682 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", 1683 | "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", 1684 | "requires": { 1685 | "async": "^1.4.0", 1686 | "optimist": "^0.6.1", 1687 | "source-map": "^0.4.4", 1688 | "uglify-js": "^2.6" 1689 | }, 1690 | "dependencies": { 1691 | "source-map": { 1692 | "version": "0.4.4", 1693 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 1694 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", 1695 | "requires": { 1696 | "amdefine": ">=0.0.4" 1697 | } 1698 | } 1699 | } 1700 | }, 1701 | "har-schema": { 1702 | "version": "2.0.0", 1703 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1704 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 1705 | "dev": true 1706 | }, 1707 | "har-validator": { 1708 | "version": "5.0.3", 1709 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 1710 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 1711 | "dev": true, 1712 | "requires": { 1713 | "ajv": "^5.1.0", 1714 | "har-schema": "^2.0.0" 1715 | } 1716 | }, 1717 | "has": { 1718 | "version": "1.0.1", 1719 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", 1720 | "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", 1721 | "dev": true, 1722 | "requires": { 1723 | "function-bind": "^1.0.2" 1724 | } 1725 | }, 1726 | "has-ansi": { 1727 | "version": "2.0.0", 1728 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1729 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1730 | "requires": { 1731 | "ansi-regex": "^2.0.0" 1732 | } 1733 | }, 1734 | "has-flag": { 1735 | "version": "1.0.0", 1736 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 1737 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" 1738 | }, 1739 | "hawk": { 1740 | "version": "6.0.2", 1741 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 1742 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 1743 | "dev": true, 1744 | "requires": { 1745 | "boom": "4.x.x", 1746 | "cryptiles": "3.x.x", 1747 | "hoek": "4.x.x", 1748 | "sntp": "2.x.x" 1749 | } 1750 | }, 1751 | "he": { 1752 | "version": "1.1.1", 1753 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 1754 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 1755 | "dev": true 1756 | }, 1757 | "hoek": { 1758 | "version": "4.2.0", 1759 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1760 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", 1761 | "dev": true 1762 | }, 1763 | "hosted-git-info": { 1764 | "version": "2.5.0", 1765 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", 1766 | "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", 1767 | "dev": true 1768 | }, 1769 | "http-errors": { 1770 | "version": "1.6.2", 1771 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 1772 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 1773 | "dev": true, 1774 | "requires": { 1775 | "depd": "1.1.1", 1776 | "inherits": "2.0.3", 1777 | "setprototypeof": "1.0.3", 1778 | "statuses": ">= 1.3.1 < 2" 1779 | }, 1780 | "dependencies": { 1781 | "depd": { 1782 | "version": "1.1.1", 1783 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 1784 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", 1785 | "dev": true 1786 | }, 1787 | "setprototypeof": { 1788 | "version": "1.0.3", 1789 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 1790 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", 1791 | "dev": true 1792 | } 1793 | } 1794 | }, 1795 | "http-signature": { 1796 | "version": "1.2.0", 1797 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1798 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1799 | "dev": true, 1800 | "requires": { 1801 | "assert-plus": "^1.0.0", 1802 | "jsprim": "^1.2.2", 1803 | "sshpk": "^1.7.0" 1804 | } 1805 | }, 1806 | "iconv-lite": { 1807 | "version": "0.4.19", 1808 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 1809 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", 1810 | "dev": true 1811 | }, 1812 | "ignore": { 1813 | "version": "3.3.7", 1814 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", 1815 | "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", 1816 | "dev": true 1817 | }, 1818 | "imurmurhash": { 1819 | "version": "0.1.4", 1820 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1821 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1822 | "dev": true 1823 | }, 1824 | "inflight": { 1825 | "version": "1.0.6", 1826 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1827 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1828 | "requires": { 1829 | "once": "^1.3.0", 1830 | "wrappy": "1" 1831 | } 1832 | }, 1833 | "inherits": { 1834 | "version": "2.0.3", 1835 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1836 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1837 | }, 1838 | "inquirer": { 1839 | "version": "3.3.0", 1840 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", 1841 | "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", 1842 | "dev": true, 1843 | "requires": { 1844 | "ansi-escapes": "^3.0.0", 1845 | "chalk": "^2.0.0", 1846 | "cli-cursor": "^2.1.0", 1847 | "cli-width": "^2.0.0", 1848 | "external-editor": "^2.0.4", 1849 | "figures": "^2.0.0", 1850 | "lodash": "^4.3.0", 1851 | "mute-stream": "0.0.7", 1852 | "run-async": "^2.2.0", 1853 | "rx-lite": "^4.0.8", 1854 | "rx-lite-aggregates": "^4.0.8", 1855 | "string-width": "^2.1.0", 1856 | "strip-ansi": "^4.0.0", 1857 | "through": "^2.3.6" 1858 | }, 1859 | "dependencies": { 1860 | "ansi-regex": { 1861 | "version": "3.0.0", 1862 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1863 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1864 | "dev": true 1865 | }, 1866 | "ansi-styles": { 1867 | "version": "3.2.0", 1868 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 1869 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 1870 | "dev": true, 1871 | "requires": { 1872 | "color-convert": "^1.9.0" 1873 | } 1874 | }, 1875 | "chalk": { 1876 | "version": "2.3.0", 1877 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 1878 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 1879 | "dev": true, 1880 | "requires": { 1881 | "ansi-styles": "^3.1.0", 1882 | "escape-string-regexp": "^1.0.5", 1883 | "supports-color": "^4.0.0" 1884 | } 1885 | }, 1886 | "color-convert": { 1887 | "version": "1.9.1", 1888 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 1889 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 1890 | "dev": true, 1891 | "requires": { 1892 | "color-name": "^1.1.1" 1893 | } 1894 | }, 1895 | "has-flag": { 1896 | "version": "2.0.0", 1897 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 1898 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 1899 | "dev": true 1900 | }, 1901 | "strip-ansi": { 1902 | "version": "4.0.0", 1903 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1904 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1905 | "dev": true, 1906 | "requires": { 1907 | "ansi-regex": "^3.0.0" 1908 | } 1909 | }, 1910 | "supports-color": { 1911 | "version": "4.5.0", 1912 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 1913 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 1914 | "dev": true, 1915 | "requires": { 1916 | "has-flag": "^2.0.0" 1917 | } 1918 | } 1919 | } 1920 | }, 1921 | "invariant": { 1922 | "version": "2.2.2", 1923 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", 1924 | "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", 1925 | "requires": { 1926 | "loose-envify": "^1.0.0" 1927 | } 1928 | }, 1929 | "ipaddr.js": { 1930 | "version": "1.5.2", 1931 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", 1932 | "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", 1933 | "dev": true 1934 | }, 1935 | "is-arrayish": { 1936 | "version": "0.2.1", 1937 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1938 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1939 | "dev": true 1940 | }, 1941 | "is-buffer": { 1942 | "version": "1.1.6", 1943 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1944 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 1945 | }, 1946 | "is-builtin-module": { 1947 | "version": "1.0.0", 1948 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 1949 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 1950 | "dev": true, 1951 | "requires": { 1952 | "builtin-modules": "^1.0.0" 1953 | } 1954 | }, 1955 | "is-callable": { 1956 | "version": "1.1.3", 1957 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", 1958 | "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", 1959 | "dev": true 1960 | }, 1961 | "is-date-object": { 1962 | "version": "1.0.1", 1963 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 1964 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", 1965 | "dev": true 1966 | }, 1967 | "is-extendable": { 1968 | "version": "0.1.1", 1969 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1970 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 1971 | "dev": true 1972 | }, 1973 | "is-finite": { 1974 | "version": "1.0.2", 1975 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1976 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 1977 | "requires": { 1978 | "number-is-nan": "^1.0.0" 1979 | } 1980 | }, 1981 | "is-fullwidth-code-point": { 1982 | "version": "2.0.0", 1983 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1984 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1985 | "dev": true 1986 | }, 1987 | "is-path-cwd": { 1988 | "version": "1.0.0", 1989 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 1990 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 1991 | "dev": true 1992 | }, 1993 | "is-path-in-cwd": { 1994 | "version": "1.0.0", 1995 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", 1996 | "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", 1997 | "dev": true, 1998 | "requires": { 1999 | "is-path-inside": "^1.0.0" 2000 | } 2001 | }, 2002 | "is-path-inside": { 2003 | "version": "1.0.1", 2004 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 2005 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 2006 | "dev": true, 2007 | "requires": { 2008 | "path-is-inside": "^1.0.1" 2009 | } 2010 | }, 2011 | "is-plain-object": { 2012 | "version": "2.0.4", 2013 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 2014 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 2015 | "dev": true, 2016 | "requires": { 2017 | "isobject": "^3.0.1" 2018 | } 2019 | }, 2020 | "is-promise": { 2021 | "version": "2.1.0", 2022 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 2023 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 2024 | "dev": true 2025 | }, 2026 | "is-regex": { 2027 | "version": "1.0.4", 2028 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 2029 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 2030 | "dev": true, 2031 | "requires": { 2032 | "has": "^1.0.1" 2033 | } 2034 | }, 2035 | "is-resolvable": { 2036 | "version": "1.1.0", 2037 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 2038 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 2039 | "dev": true 2040 | }, 2041 | "is-stream": { 2042 | "version": "1.1.0", 2043 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 2044 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 2045 | "dev": true 2046 | }, 2047 | "is-symbol": { 2048 | "version": "1.0.1", 2049 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", 2050 | "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", 2051 | "dev": true 2052 | }, 2053 | "is-typedarray": { 2054 | "version": "1.0.0", 2055 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 2056 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 2057 | "dev": true 2058 | }, 2059 | "is-utf8": { 2060 | "version": "0.2.1", 2061 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 2062 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" 2063 | }, 2064 | "isarray": { 2065 | "version": "1.0.0", 2066 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2067 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2068 | "dev": true 2069 | }, 2070 | "isexe": { 2071 | "version": "2.0.0", 2072 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2073 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 2074 | }, 2075 | "isobject": { 2076 | "version": "3.0.1", 2077 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 2078 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 2079 | "dev": true 2080 | }, 2081 | "isomorphic-fetch": { 2082 | "version": "2.2.1", 2083 | "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", 2084 | "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", 2085 | "dev": true, 2086 | "requires": { 2087 | "node-fetch": "^1.0.1", 2088 | "whatwg-fetch": ">=0.10.0" 2089 | } 2090 | }, 2091 | "isstream": { 2092 | "version": "0.1.2", 2093 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 2094 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 2095 | "dev": true 2096 | }, 2097 | "istanbul": { 2098 | "version": "1.1.0-alpha.1", 2099 | "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-1.1.0-alpha.1.tgz", 2100 | "integrity": "sha1-eBeVZWAYohdMX2DzZ+5dNhy1e3c=", 2101 | "requires": { 2102 | "abbrev": "1.0.x", 2103 | "async": "1.x", 2104 | "istanbul-api": "^1.1.0-alpha", 2105 | "js-yaml": "3.x", 2106 | "mkdirp": "0.5.x", 2107 | "nopt": "3.x", 2108 | "which": "^1.1.1", 2109 | "wordwrap": "^1.0.0" 2110 | } 2111 | }, 2112 | "istanbul-api": { 2113 | "version": "1.2.1", 2114 | "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", 2115 | "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", 2116 | "requires": { 2117 | "async": "^2.1.4", 2118 | "fileset": "^2.0.2", 2119 | "istanbul-lib-coverage": "^1.1.1", 2120 | "istanbul-lib-hook": "^1.1.0", 2121 | "istanbul-lib-instrument": "^1.9.1", 2122 | "istanbul-lib-report": "^1.1.2", 2123 | "istanbul-lib-source-maps": "^1.2.2", 2124 | "istanbul-reports": "^1.1.3", 2125 | "js-yaml": "^3.7.0", 2126 | "mkdirp": "^0.5.1", 2127 | "once": "^1.4.0" 2128 | }, 2129 | "dependencies": { 2130 | "async": { 2131 | "version": "2.6.0", 2132 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", 2133 | "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", 2134 | "requires": { 2135 | "lodash": "^4.14.0" 2136 | } 2137 | } 2138 | } 2139 | }, 2140 | "istanbul-lib-coverage": { 2141 | "version": "1.1.1", 2142 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", 2143 | "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==" 2144 | }, 2145 | "istanbul-lib-hook": { 2146 | "version": "1.1.0", 2147 | "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", 2148 | "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", 2149 | "requires": { 2150 | "append-transform": "^0.4.0" 2151 | } 2152 | }, 2153 | "istanbul-lib-instrument": { 2154 | "version": "1.9.1", 2155 | "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", 2156 | "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", 2157 | "requires": { 2158 | "babel-generator": "^6.18.0", 2159 | "babel-template": "^6.16.0", 2160 | "babel-traverse": "^6.18.0", 2161 | "babel-types": "^6.18.0", 2162 | "babylon": "^6.18.0", 2163 | "istanbul-lib-coverage": "^1.1.1", 2164 | "semver": "^5.3.0" 2165 | } 2166 | }, 2167 | "istanbul-lib-report": { 2168 | "version": "1.1.2", 2169 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", 2170 | "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", 2171 | "requires": { 2172 | "istanbul-lib-coverage": "^1.1.1", 2173 | "mkdirp": "^0.5.1", 2174 | "path-parse": "^1.0.5", 2175 | "supports-color": "^3.1.2" 2176 | }, 2177 | "dependencies": { 2178 | "supports-color": { 2179 | "version": "3.2.3", 2180 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", 2181 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 2182 | "requires": { 2183 | "has-flag": "^1.0.0" 2184 | } 2185 | } 2186 | } 2187 | }, 2188 | "istanbul-lib-source-maps": { 2189 | "version": "1.2.2", 2190 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", 2191 | "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", 2192 | "requires": { 2193 | "debug": "^3.1.0", 2194 | "istanbul-lib-coverage": "^1.1.1", 2195 | "mkdirp": "^0.5.1", 2196 | "rimraf": "^2.6.1", 2197 | "source-map": "^0.5.3" 2198 | } 2199 | }, 2200 | "istanbul-reports": { 2201 | "version": "1.1.3", 2202 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", 2203 | "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", 2204 | "requires": { 2205 | "handlebars": "^4.0.3" 2206 | } 2207 | }, 2208 | "js-tokens": { 2209 | "version": "3.0.2", 2210 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 2211 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" 2212 | }, 2213 | "js-yaml": { 2214 | "version": "3.10.0", 2215 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", 2216 | "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", 2217 | "requires": { 2218 | "argparse": "^1.0.7", 2219 | "esprima": "^4.0.0" 2220 | } 2221 | }, 2222 | "jsbn": { 2223 | "version": "0.1.1", 2224 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 2225 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 2226 | "dev": true, 2227 | "optional": true 2228 | }, 2229 | "jsesc": { 2230 | "version": "1.3.0", 2231 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", 2232 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" 2233 | }, 2234 | "json-parse-better-errors": { 2235 | "version": "1.0.1", 2236 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", 2237 | "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", 2238 | "dev": true 2239 | }, 2240 | "json-schema": { 2241 | "version": "0.2.3", 2242 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 2243 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 2244 | "dev": true 2245 | }, 2246 | "json-schema-traverse": { 2247 | "version": "0.3.1", 2248 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 2249 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 2250 | "dev": true 2251 | }, 2252 | "json-stable-stringify-without-jsonify": { 2253 | "version": "1.0.1", 2254 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2255 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 2256 | "dev": true 2257 | }, 2258 | "json-stringify-safe": { 2259 | "version": "5.0.1", 2260 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2261 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 2262 | "dev": true 2263 | }, 2264 | "jsprim": { 2265 | "version": "1.4.1", 2266 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 2267 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 2268 | "dev": true, 2269 | "requires": { 2270 | "assert-plus": "1.0.0", 2271 | "extsprintf": "1.3.0", 2272 | "json-schema": "0.2.3", 2273 | "verror": "1.10.0" 2274 | } 2275 | }, 2276 | "jsx-ast-utils": { 2277 | "version": "2.0.1", 2278 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", 2279 | "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", 2280 | "dev": true, 2281 | "requires": { 2282 | "array-includes": "^3.0.3" 2283 | } 2284 | }, 2285 | "kind-of": { 2286 | "version": "6.0.2", 2287 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 2288 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 2289 | "dev": true 2290 | }, 2291 | "kuler": { 2292 | "version": "0.0.0", 2293 | "resolved": "https://registry.npmjs.org/kuler/-/kuler-0.0.0.tgz", 2294 | "integrity": "sha1-tmu0a5NOVQ9Z2BiEjgq7pPf1VTw=", 2295 | "requires": { 2296 | "colornames": "0.0.2" 2297 | } 2298 | }, 2299 | "lazy-cache": { 2300 | "version": "1.0.4", 2301 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 2302 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", 2303 | "optional": true 2304 | }, 2305 | "levn": { 2306 | "version": "0.3.0", 2307 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 2308 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 2309 | "dev": true, 2310 | "requires": { 2311 | "prelude-ls": "~1.1.2", 2312 | "type-check": "~0.3.2" 2313 | } 2314 | }, 2315 | "load-json-file": { 2316 | "version": "2.0.0", 2317 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 2318 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 2319 | "dev": true, 2320 | "requires": { 2321 | "graceful-fs": "^4.1.2", 2322 | "parse-json": "^2.2.0", 2323 | "pify": "^2.0.0", 2324 | "strip-bom": "^3.0.0" 2325 | }, 2326 | "dependencies": { 2327 | "strip-bom": { 2328 | "version": "3.0.0", 2329 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 2330 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 2331 | "dev": true 2332 | } 2333 | } 2334 | }, 2335 | "locate-path": { 2336 | "version": "2.0.0", 2337 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 2338 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 2339 | "dev": true, 2340 | "requires": { 2341 | "p-locate": "^2.0.0", 2342 | "path-exists": "^3.0.0" 2343 | }, 2344 | "dependencies": { 2345 | "path-exists": { 2346 | "version": "3.0.0", 2347 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2348 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2349 | "dev": true 2350 | } 2351 | } 2352 | }, 2353 | "lodash": { 2354 | "version": "4.17.4", 2355 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 2356 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 2357 | }, 2358 | "lodash.cond": { 2359 | "version": "4.5.2", 2360 | "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", 2361 | "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", 2362 | "dev": true 2363 | }, 2364 | "longest": { 2365 | "version": "1.0.1", 2366 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 2367 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" 2368 | }, 2369 | "loose-envify": { 2370 | "version": "1.3.1", 2371 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", 2372 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", 2373 | "requires": { 2374 | "js-tokens": "^3.0.0" 2375 | } 2376 | }, 2377 | "lru-cache": { 2378 | "version": "4.1.1", 2379 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 2380 | "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", 2381 | "dev": true, 2382 | "requires": { 2383 | "pseudomap": "^1.0.2", 2384 | "yallist": "^2.1.2" 2385 | } 2386 | }, 2387 | "media-typer": { 2388 | "version": "0.3.0", 2389 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2390 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 2391 | "dev": true 2392 | }, 2393 | "merge-descriptors": { 2394 | "version": "1.0.1", 2395 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 2396 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", 2397 | "dev": true 2398 | }, 2399 | "methods": { 2400 | "version": "1.1.2", 2401 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2402 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", 2403 | "dev": true 2404 | }, 2405 | "millisecond": { 2406 | "version": "0.1.2", 2407 | "resolved": "https://registry.npmjs.org/millisecond/-/millisecond-0.1.2.tgz", 2408 | "integrity": "sha1-bMWtOGJByrjniv+WT4cCjuyS2sU=" 2409 | }, 2410 | "mime": { 2411 | "version": "1.4.1", 2412 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 2413 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", 2414 | "dev": true 2415 | }, 2416 | "mime-db": { 2417 | "version": "1.30.0", 2418 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 2419 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", 2420 | "dev": true 2421 | }, 2422 | "mime-types": { 2423 | "version": "2.1.17", 2424 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 2425 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 2426 | "dev": true, 2427 | "requires": { 2428 | "mime-db": "~1.30.0" 2429 | } 2430 | }, 2431 | "mimic-fn": { 2432 | "version": "1.1.0", 2433 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", 2434 | "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", 2435 | "dev": true 2436 | }, 2437 | "minimatch": { 2438 | "version": "3.0.4", 2439 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2440 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2441 | "requires": { 2442 | "brace-expansion": "^1.1.7" 2443 | } 2444 | }, 2445 | "minimist": { 2446 | "version": "0.0.8", 2447 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2448 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 2449 | }, 2450 | "mixin-object": { 2451 | "version": "2.0.1", 2452 | "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", 2453 | "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", 2454 | "dev": true, 2455 | "requires": { 2456 | "for-in": "^0.1.3", 2457 | "is-extendable": "^0.1.1" 2458 | }, 2459 | "dependencies": { 2460 | "for-in": { 2461 | "version": "0.1.8", 2462 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", 2463 | "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", 2464 | "dev": true 2465 | } 2466 | } 2467 | }, 2468 | "mkdirp": { 2469 | "version": "0.5.1", 2470 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2471 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2472 | "requires": { 2473 | "minimist": "0.0.8" 2474 | } 2475 | }, 2476 | "mocha": { 2477 | "version": "5.0.0", 2478 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.0.tgz", 2479 | "integrity": "sha512-ukB2dF+u4aeJjc6IGtPNnJXfeby5d4ZqySlIBT0OEyva/DrMjVm5HkQxKnHDLKEfEQBsEnwTg9HHhtPHJdTd8w==", 2480 | "dev": true, 2481 | "requires": { 2482 | "browser-stdout": "1.3.0", 2483 | "commander": "2.11.0", 2484 | "debug": "3.1.0", 2485 | "diff": "3.3.1", 2486 | "escape-string-regexp": "1.0.5", 2487 | "glob": "7.1.2", 2488 | "growl": "1.10.3", 2489 | "he": "1.1.1", 2490 | "mkdirp": "0.5.1", 2491 | "supports-color": "4.4.0" 2492 | }, 2493 | "dependencies": { 2494 | "has-flag": { 2495 | "version": "2.0.0", 2496 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 2497 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 2498 | "dev": true 2499 | }, 2500 | "supports-color": { 2501 | "version": "4.4.0", 2502 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 2503 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 2504 | "dev": true, 2505 | "requires": { 2506 | "has-flag": "^2.0.0" 2507 | } 2508 | } 2509 | } 2510 | }, 2511 | "ms": { 2512 | "version": "2.0.0", 2513 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2514 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2515 | }, 2516 | "mute-stream": { 2517 | "version": "0.0.7", 2518 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 2519 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 2520 | "dev": true 2521 | }, 2522 | "natural-compare": { 2523 | "version": "1.4.0", 2524 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2525 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 2526 | "dev": true 2527 | }, 2528 | "negotiator": { 2529 | "version": "0.6.1", 2530 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 2531 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", 2532 | "dev": true 2533 | }, 2534 | "node-fetch": { 2535 | "version": "1.7.3", 2536 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", 2537 | "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", 2538 | "dev": true, 2539 | "requires": { 2540 | "encoding": "^0.1.11", 2541 | "is-stream": "^1.0.1" 2542 | } 2543 | }, 2544 | "nopt": { 2545 | "version": "3.0.6", 2546 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 2547 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 2548 | "requires": { 2549 | "abbrev": "1" 2550 | } 2551 | }, 2552 | "normalize-package-data": { 2553 | "version": "2.4.0", 2554 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 2555 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 2556 | "dev": true, 2557 | "requires": { 2558 | "hosted-git-info": "^2.1.4", 2559 | "is-builtin-module": "^1.0.0", 2560 | "semver": "2 || 3 || 4 || 5", 2561 | "validate-npm-package-license": "^3.0.1" 2562 | } 2563 | }, 2564 | "number-is-nan": { 2565 | "version": "1.0.1", 2566 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2567 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 2568 | }, 2569 | "oauth-sign": { 2570 | "version": "0.8.2", 2571 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2572 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 2573 | "dev": true 2574 | }, 2575 | "object-assign": { 2576 | "version": "4.1.1", 2577 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2578 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2579 | "dev": true 2580 | }, 2581 | "object-keys": { 2582 | "version": "1.0.11", 2583 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", 2584 | "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", 2585 | "dev": true 2586 | }, 2587 | "on-finished": { 2588 | "version": "2.3.0", 2589 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2590 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2591 | "dev": true, 2592 | "requires": { 2593 | "ee-first": "1.1.1" 2594 | } 2595 | }, 2596 | "once": { 2597 | "version": "1.4.0", 2598 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2599 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2600 | "requires": { 2601 | "wrappy": "1" 2602 | } 2603 | }, 2604 | "onetime": { 2605 | "version": "2.0.1", 2606 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 2607 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 2608 | "dev": true, 2609 | "requires": { 2610 | "mimic-fn": "^1.0.0" 2611 | } 2612 | }, 2613 | "optimist": { 2614 | "version": "0.6.1", 2615 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 2616 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 2617 | "requires": { 2618 | "minimist": "~0.0.1", 2619 | "wordwrap": "~0.0.2" 2620 | }, 2621 | "dependencies": { 2622 | "wordwrap": { 2623 | "version": "0.0.3", 2624 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 2625 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 2626 | } 2627 | } 2628 | }, 2629 | "optionator": { 2630 | "version": "0.8.2", 2631 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 2632 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 2633 | "dev": true, 2634 | "requires": { 2635 | "deep-is": "~0.1.3", 2636 | "fast-levenshtein": "~2.0.4", 2637 | "levn": "~0.3.0", 2638 | "prelude-ls": "~1.1.2", 2639 | "type-check": "~0.3.2", 2640 | "wordwrap": "~1.0.0" 2641 | } 2642 | }, 2643 | "os-tmpdir": { 2644 | "version": "1.0.2", 2645 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2646 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2647 | "dev": true 2648 | }, 2649 | "p-limit": { 2650 | "version": "1.2.0", 2651 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", 2652 | "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", 2653 | "dev": true, 2654 | "requires": { 2655 | "p-try": "^1.0.0" 2656 | } 2657 | }, 2658 | "p-locate": { 2659 | "version": "2.0.0", 2660 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 2661 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 2662 | "dev": true, 2663 | "requires": { 2664 | "p-limit": "^1.1.0" 2665 | } 2666 | }, 2667 | "p-try": { 2668 | "version": "1.0.0", 2669 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 2670 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", 2671 | "dev": true 2672 | }, 2673 | "parse-json": { 2674 | "version": "2.2.0", 2675 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2676 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2677 | "dev": true, 2678 | "requires": { 2679 | "error-ex": "^1.2.0" 2680 | } 2681 | }, 2682 | "parseurl": { 2683 | "version": "1.3.2", 2684 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 2685 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", 2686 | "dev": true 2687 | }, 2688 | "path-exists": { 2689 | "version": "2.1.0", 2690 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 2691 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 2692 | "dev": true, 2693 | "requires": { 2694 | "pinkie-promise": "^2.0.0" 2695 | } 2696 | }, 2697 | "path-is-absolute": { 2698 | "version": "1.0.1", 2699 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2700 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 2701 | }, 2702 | "path-is-inside": { 2703 | "version": "1.0.2", 2704 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 2705 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 2706 | "dev": true 2707 | }, 2708 | "path-parse": { 2709 | "version": "1.0.5", 2710 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 2711 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" 2712 | }, 2713 | "path-to-regexp": { 2714 | "version": "0.1.7", 2715 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2716 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", 2717 | "dev": true 2718 | }, 2719 | "path-type": { 2720 | "version": "2.0.0", 2721 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 2722 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 2723 | "dev": true, 2724 | "requires": { 2725 | "pify": "^2.0.0" 2726 | } 2727 | }, 2728 | "performance-now": { 2729 | "version": "2.1.0", 2730 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 2731 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 2732 | "dev": true 2733 | }, 2734 | "pify": { 2735 | "version": "2.3.0", 2736 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2737 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2738 | "dev": true 2739 | }, 2740 | "pinkie": { 2741 | "version": "2.0.4", 2742 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2743 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2744 | "dev": true 2745 | }, 2746 | "pinkie-promise": { 2747 | "version": "2.0.1", 2748 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2749 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2750 | "dev": true, 2751 | "requires": { 2752 | "pinkie": "^2.0.0" 2753 | } 2754 | }, 2755 | "pkg-conf": { 2756 | "version": "2.1.0", 2757 | "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", 2758 | "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", 2759 | "dev": true, 2760 | "requires": { 2761 | "find-up": "^2.0.0", 2762 | "load-json-file": "^4.0.0" 2763 | }, 2764 | "dependencies": { 2765 | "find-up": { 2766 | "version": "2.1.0", 2767 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 2768 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 2769 | "dev": true, 2770 | "requires": { 2771 | "locate-path": "^2.0.0" 2772 | } 2773 | }, 2774 | "load-json-file": { 2775 | "version": "4.0.0", 2776 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", 2777 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", 2778 | "dev": true, 2779 | "requires": { 2780 | "graceful-fs": "^4.1.2", 2781 | "parse-json": "^4.0.0", 2782 | "pify": "^3.0.0", 2783 | "strip-bom": "^3.0.0" 2784 | } 2785 | }, 2786 | "parse-json": { 2787 | "version": "4.0.0", 2788 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 2789 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 2790 | "dev": true, 2791 | "requires": { 2792 | "error-ex": "^1.3.1", 2793 | "json-parse-better-errors": "^1.0.1" 2794 | } 2795 | }, 2796 | "pify": { 2797 | "version": "3.0.0", 2798 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 2799 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 2800 | "dev": true 2801 | }, 2802 | "strip-bom": { 2803 | "version": "3.0.0", 2804 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 2805 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 2806 | "dev": true 2807 | } 2808 | } 2809 | }, 2810 | "pkg-config": { 2811 | "version": "1.1.1", 2812 | "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", 2813 | "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", 2814 | "dev": true, 2815 | "requires": { 2816 | "debug-log": "^1.0.0", 2817 | "find-root": "^1.0.0", 2818 | "xtend": "^4.0.1" 2819 | } 2820 | }, 2821 | "pkg-dir": { 2822 | "version": "1.0.0", 2823 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", 2824 | "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", 2825 | "dev": true, 2826 | "requires": { 2827 | "find-up": "^1.0.0" 2828 | } 2829 | }, 2830 | "pluralize": { 2831 | "version": "7.0.0", 2832 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", 2833 | "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 2834 | "dev": true 2835 | }, 2836 | "predefine": { 2837 | "version": "0.1.2", 2838 | "resolved": "https://registry.npmjs.org/predefine/-/predefine-0.1.2.tgz", 2839 | "integrity": "sha1-KqkrRJa8H4VU5DpF92v75Q0z038=", 2840 | "requires": { 2841 | "extendible": "0.1.x" 2842 | } 2843 | }, 2844 | "prelude-ls": { 2845 | "version": "1.1.2", 2846 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 2847 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2848 | "dev": true 2849 | }, 2850 | "primus": { 2851 | "version": "7.1.1", 2852 | "resolved": "https://registry.npmjs.org/primus/-/primus-7.1.1.tgz", 2853 | "integrity": "sha512-PXogAiNJ6Dmjmx4ODz+uwzNmUZU7IWj6uvVKKnoijRpsTV10aSeHkaFfIfq+kVIrdagOmz5k3HOR5NP9OCtpZw==", 2854 | "requires": { 2855 | "access-control": "~1.0.0", 2856 | "asyncemit": "~3.0.1", 2857 | "create-server": "~1.0.1", 2858 | "diagnostics": "~1.1.0", 2859 | "eventemitter3": "~3.0.0", 2860 | "forwarded-for": "~1.0.1", 2861 | "fusing": "~1.0.0", 2862 | "setheader": "~0.0.4", 2863 | "ultron": "~1.1.0", 2864 | "yeast": "~0.1.2" 2865 | } 2866 | }, 2867 | "primus-emitter": { 2868 | "version": "3.1.1", 2869 | "resolved": "https://registry.npmjs.org/primus-emitter/-/primus-emitter-3.1.1.tgz", 2870 | "integrity": "sha1-qFo2NT/oqWl1vl7f69fuZshNzhs=" 2871 | }, 2872 | "process-nextick-args": { 2873 | "version": "1.0.7", 2874 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2875 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 2876 | "dev": true 2877 | }, 2878 | "progress": { 2879 | "version": "2.0.0", 2880 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", 2881 | "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", 2882 | "dev": true 2883 | }, 2884 | "promise": { 2885 | "version": "7.3.1", 2886 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 2887 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 2888 | "dev": true, 2889 | "requires": { 2890 | "asap": "~2.0.3" 2891 | } 2892 | }, 2893 | "prop-types": { 2894 | "version": "15.6.0", 2895 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", 2896 | "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", 2897 | "dev": true, 2898 | "requires": { 2899 | "fbjs": "^0.8.16", 2900 | "loose-envify": "^1.3.1", 2901 | "object-assign": "^4.1.1" 2902 | } 2903 | }, 2904 | "proxy-addr": { 2905 | "version": "2.0.2", 2906 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", 2907 | "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", 2908 | "dev": true, 2909 | "requires": { 2910 | "forwarded": "~0.1.2", 2911 | "ipaddr.js": "1.5.2" 2912 | } 2913 | }, 2914 | "pseudomap": { 2915 | "version": "1.0.2", 2916 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2917 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 2918 | "dev": true 2919 | }, 2920 | "punycode": { 2921 | "version": "1.4.1", 2922 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2923 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2924 | "dev": true 2925 | }, 2926 | "qs": { 2927 | "version": "6.5.1", 2928 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 2929 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", 2930 | "dev": true 2931 | }, 2932 | "radix-router": { 2933 | "version": "3.0.1", 2934 | "resolved": "https://registry.npmjs.org/radix-router/-/radix-router-3.0.1.tgz", 2935 | "integrity": "sha512-jpHXHgP+ZmVzEfmZ7WVRSvc/EqMoAqYuMtBsHd9s47Hs9Iy8FDJhkweMrDH0wmdxanLzVIWhq0UpomLXNpW8tg==" 2936 | }, 2937 | "range-parser": { 2938 | "version": "1.2.0", 2939 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 2940 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", 2941 | "dev": true 2942 | }, 2943 | "raw-body": { 2944 | "version": "2.3.2", 2945 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 2946 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 2947 | "dev": true, 2948 | "requires": { 2949 | "bytes": "3.0.0", 2950 | "http-errors": "1.6.2", 2951 | "iconv-lite": "0.4.19", 2952 | "unpipe": "1.0.0" 2953 | } 2954 | }, 2955 | "read-pkg": { 2956 | "version": "2.0.0", 2957 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 2958 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 2959 | "dev": true, 2960 | "requires": { 2961 | "load-json-file": "^2.0.0", 2962 | "normalize-package-data": "^2.3.2", 2963 | "path-type": "^2.0.0" 2964 | } 2965 | }, 2966 | "read-pkg-up": { 2967 | "version": "2.0.0", 2968 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 2969 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 2970 | "dev": true, 2971 | "requires": { 2972 | "find-up": "^2.0.0", 2973 | "read-pkg": "^2.0.0" 2974 | }, 2975 | "dependencies": { 2976 | "find-up": { 2977 | "version": "2.1.0", 2978 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 2979 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 2980 | "dev": true, 2981 | "requires": { 2982 | "locate-path": "^2.0.0" 2983 | } 2984 | } 2985 | } 2986 | }, 2987 | "readable-stream": { 2988 | "version": "2.3.3", 2989 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2990 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2991 | "dev": true, 2992 | "requires": { 2993 | "core-util-is": "~1.0.0", 2994 | "inherits": "~2.0.3", 2995 | "isarray": "~1.0.0", 2996 | "process-nextick-args": "~1.0.6", 2997 | "safe-buffer": "~5.1.1", 2998 | "string_decoder": "~1.0.3", 2999 | "util-deprecate": "~1.0.1" 3000 | } 3001 | }, 3002 | "regenerator-runtime": { 3003 | "version": "0.11.1", 3004 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 3005 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" 3006 | }, 3007 | "repeat-string": { 3008 | "version": "1.6.1", 3009 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 3010 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 3011 | }, 3012 | "repeating": { 3013 | "version": "2.0.1", 3014 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 3015 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 3016 | "requires": { 3017 | "is-finite": "^1.0.0" 3018 | } 3019 | }, 3020 | "request": { 3021 | "version": "2.83.0", 3022 | "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", 3023 | "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", 3024 | "dev": true, 3025 | "requires": { 3026 | "aws-sign2": "~0.7.0", 3027 | "aws4": "^1.6.0", 3028 | "caseless": "~0.12.0", 3029 | "combined-stream": "~1.0.5", 3030 | "extend": "~3.0.1", 3031 | "forever-agent": "~0.6.1", 3032 | "form-data": "~2.3.1", 3033 | "har-validator": "~5.0.3", 3034 | "hawk": "~6.0.2", 3035 | "http-signature": "~1.2.0", 3036 | "is-typedarray": "~1.0.0", 3037 | "isstream": "~0.1.2", 3038 | "json-stringify-safe": "~5.0.1", 3039 | "mime-types": "~2.1.17", 3040 | "oauth-sign": "~0.8.2", 3041 | "performance-now": "^2.1.0", 3042 | "qs": "~6.5.1", 3043 | "safe-buffer": "^5.1.1", 3044 | "stringstream": "~0.0.5", 3045 | "tough-cookie": "~2.3.3", 3046 | "tunnel-agent": "^0.6.0", 3047 | "uuid": "^3.1.0" 3048 | } 3049 | }, 3050 | "require-uncached": { 3051 | "version": "1.0.3", 3052 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 3053 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 3054 | "dev": true, 3055 | "requires": { 3056 | "caller-path": "^0.1.0", 3057 | "resolve-from": "^1.0.0" 3058 | } 3059 | }, 3060 | "resolve": { 3061 | "version": "1.5.0", 3062 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", 3063 | "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", 3064 | "dev": true, 3065 | "requires": { 3066 | "path-parse": "^1.0.5" 3067 | } 3068 | }, 3069 | "resolve-from": { 3070 | "version": "1.0.1", 3071 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 3072 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 3073 | "dev": true 3074 | }, 3075 | "restore-cursor": { 3076 | "version": "2.0.0", 3077 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 3078 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 3079 | "dev": true, 3080 | "requires": { 3081 | "onetime": "^2.0.0", 3082 | "signal-exit": "^3.0.2" 3083 | } 3084 | }, 3085 | "right-align": { 3086 | "version": "0.1.3", 3087 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 3088 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 3089 | "optional": true, 3090 | "requires": { 3091 | "align-text": "^0.1.1" 3092 | } 3093 | }, 3094 | "rimraf": { 3095 | "version": "2.6.2", 3096 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 3097 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 3098 | "requires": { 3099 | "glob": "^7.0.5" 3100 | } 3101 | }, 3102 | "rubberduck": { 3103 | "version": "1.1.1", 3104 | "resolved": "https://registry.npmjs.org/rubberduck/-/rubberduck-1.1.1.tgz", 3105 | "integrity": "sha1-zSzaS4ZxeBNer8mVpxOE9fdD2wI=", 3106 | "dev": true 3107 | }, 3108 | "run-async": { 3109 | "version": "2.3.0", 3110 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 3111 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 3112 | "dev": true, 3113 | "requires": { 3114 | "is-promise": "^2.1.0" 3115 | } 3116 | }, 3117 | "run-parallel": { 3118 | "version": "1.1.6", 3119 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.6.tgz", 3120 | "integrity": "sha1-KQA8miFj4B4tLfyQV18sbB1hoDk=", 3121 | "dev": true 3122 | }, 3123 | "rx-lite": { 3124 | "version": "4.0.8", 3125 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 3126 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", 3127 | "dev": true 3128 | }, 3129 | "rx-lite-aggregates": { 3130 | "version": "4.0.8", 3131 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 3132 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 3133 | "dev": true, 3134 | "requires": { 3135 | "rx-lite": "*" 3136 | } 3137 | }, 3138 | "safe-buffer": { 3139 | "version": "5.1.1", 3140 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 3141 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 3142 | "dev": true 3143 | }, 3144 | "semistandard": { 3145 | "version": "12.0.0", 3146 | "resolved": "https://registry.npmjs.org/semistandard/-/semistandard-12.0.0.tgz", 3147 | "integrity": "sha512-jykJZVDYWFZ7Hej9bYwynBa+A8yQFksm4zZoli4O+KkqMuQTdlBzkJvtFRER7xufSnB6+XnBS423tjI3Gtrg7Q==", 3148 | "dev": true, 3149 | "requires": { 3150 | "eslint": "~4.14.0", 3151 | "eslint-config-semistandard": "^12.0.0", 3152 | "eslint-config-standard": "11.0.0-beta.0", 3153 | "eslint-config-standard-jsx": "~4.0.2", 3154 | "eslint-plugin-import": "~2.8.0", 3155 | "eslint-plugin-node": "~5.2.1", 3156 | "eslint-plugin-promise": "~3.6.0", 3157 | "eslint-plugin-react": "~7.5.1", 3158 | "eslint-plugin-standard": "~3.0.1", 3159 | "standard-engine": "~7.2.0" 3160 | } 3161 | }, 3162 | "semver": { 3163 | "version": "5.5.0", 3164 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 3165 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" 3166 | }, 3167 | "send": { 3168 | "version": "0.16.1", 3169 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", 3170 | "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", 3171 | "dev": true, 3172 | "requires": { 3173 | "debug": "2.6.9", 3174 | "depd": "~1.1.1", 3175 | "destroy": "~1.0.4", 3176 | "encodeurl": "~1.0.1", 3177 | "escape-html": "~1.0.3", 3178 | "etag": "~1.8.1", 3179 | "fresh": "0.5.2", 3180 | "http-errors": "~1.6.2", 3181 | "mime": "1.4.1", 3182 | "ms": "2.0.0", 3183 | "on-finished": "~2.3.0", 3184 | "range-parser": "~1.2.0", 3185 | "statuses": "~1.3.1" 3186 | }, 3187 | "dependencies": { 3188 | "debug": { 3189 | "version": "2.6.9", 3190 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 3191 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 3192 | "dev": true, 3193 | "requires": { 3194 | "ms": "2.0.0" 3195 | } 3196 | } 3197 | } 3198 | }, 3199 | "serve-static": { 3200 | "version": "1.13.1", 3201 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", 3202 | "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", 3203 | "dev": true, 3204 | "requires": { 3205 | "encodeurl": "~1.0.1", 3206 | "escape-html": "~1.0.3", 3207 | "parseurl": "~1.3.2", 3208 | "send": "0.16.1" 3209 | } 3210 | }, 3211 | "setheader": { 3212 | "version": "0.0.4", 3213 | "resolved": "https://registry.npmjs.org/setheader/-/setheader-0.0.4.tgz", 3214 | "integrity": "sha1-km7SjPdiFJYgkx566j8blYFuxpQ=", 3215 | "requires": { 3216 | "debug": "0.7.x" 3217 | }, 3218 | "dependencies": { 3219 | "debug": { 3220 | "version": "0.7.4", 3221 | "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", 3222 | "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" 3223 | } 3224 | } 3225 | }, 3226 | "setimmediate": { 3227 | "version": "1.0.5", 3228 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 3229 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", 3230 | "dev": true 3231 | }, 3232 | "setprototypeof": { 3233 | "version": "1.1.0", 3234 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 3235 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", 3236 | "dev": true 3237 | }, 3238 | "shallow-clone": { 3239 | "version": "1.0.0", 3240 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", 3241 | "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", 3242 | "dev": true, 3243 | "requires": { 3244 | "is-extendable": "^0.1.1", 3245 | "kind-of": "^5.0.0", 3246 | "mixin-object": "^2.0.1" 3247 | }, 3248 | "dependencies": { 3249 | "kind-of": { 3250 | "version": "5.1.0", 3251 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 3252 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 3253 | "dev": true 3254 | } 3255 | } 3256 | }, 3257 | "shebang-command": { 3258 | "version": "1.2.0", 3259 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 3260 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 3261 | "dev": true, 3262 | "requires": { 3263 | "shebang-regex": "^1.0.0" 3264 | } 3265 | }, 3266 | "shebang-regex": { 3267 | "version": "1.0.0", 3268 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 3269 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 3270 | "dev": true 3271 | }, 3272 | "sift": { 3273 | "version": "5.0.0", 3274 | "resolved": "https://registry.npmjs.org/sift/-/sift-5.0.0.tgz", 3275 | "integrity": "sha1-IS7LQQ2KUbg+fZaeSdU+ZZAoX/o=", 3276 | "dev": true 3277 | }, 3278 | "signal-exit": { 3279 | "version": "3.0.2", 3280 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 3281 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 3282 | "dev": true 3283 | }, 3284 | "slice-ansi": { 3285 | "version": "1.0.0", 3286 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", 3287 | "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", 3288 | "dev": true, 3289 | "requires": { 3290 | "is-fullwidth-code-point": "^2.0.0" 3291 | } 3292 | }, 3293 | "sntp": { 3294 | "version": "2.1.0", 3295 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", 3296 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", 3297 | "dev": true, 3298 | "requires": { 3299 | "hoek": "4.x.x" 3300 | } 3301 | }, 3302 | "source-map": { 3303 | "version": "0.5.7", 3304 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 3305 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 3306 | }, 3307 | "spdx-correct": { 3308 | "version": "1.0.2", 3309 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 3310 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", 3311 | "dev": true, 3312 | "requires": { 3313 | "spdx-license-ids": "^1.0.2" 3314 | } 3315 | }, 3316 | "spdx-expression-parse": { 3317 | "version": "1.0.4", 3318 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", 3319 | "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", 3320 | "dev": true 3321 | }, 3322 | "spdx-license-ids": { 3323 | "version": "1.2.2", 3324 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", 3325 | "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", 3326 | "dev": true 3327 | }, 3328 | "sprintf-js": { 3329 | "version": "1.0.3", 3330 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 3331 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 3332 | }, 3333 | "sshpk": { 3334 | "version": "1.13.1", 3335 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 3336 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 3337 | "dev": true, 3338 | "requires": { 3339 | "asn1": "~0.2.3", 3340 | "assert-plus": "^1.0.0", 3341 | "bcrypt-pbkdf": "^1.0.0", 3342 | "dashdash": "^1.12.0", 3343 | "ecc-jsbn": "~0.1.1", 3344 | "getpass": "^0.1.1", 3345 | "jsbn": "~0.1.0", 3346 | "tweetnacl": "~0.14.0" 3347 | } 3348 | }, 3349 | "standard-engine": { 3350 | "version": "7.2.0", 3351 | "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.2.0.tgz", 3352 | "integrity": "sha512-4MTVXRZQjEWeD7tNt8lK1Yh7VLXbmZ/hj34uF9tpSdtYNNPosms2TLCnw/7MUl/rW1Uhx80s7CL8LtBdUtgrtw==", 3353 | "dev": true, 3354 | "requires": { 3355 | "deglob": "^2.1.0", 3356 | "get-stdin": "^5.0.1", 3357 | "minimist": "^1.1.0", 3358 | "pkg-conf": "^2.0.0" 3359 | }, 3360 | "dependencies": { 3361 | "minimist": { 3362 | "version": "1.2.0", 3363 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 3364 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 3365 | "dev": true 3366 | } 3367 | } 3368 | }, 3369 | "statuses": { 3370 | "version": "1.3.1", 3371 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 3372 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", 3373 | "dev": true 3374 | }, 3375 | "string-width": { 3376 | "version": "2.1.1", 3377 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 3378 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 3379 | "dev": true, 3380 | "requires": { 3381 | "is-fullwidth-code-point": "^2.0.0", 3382 | "strip-ansi": "^4.0.0" 3383 | }, 3384 | "dependencies": { 3385 | "ansi-regex": { 3386 | "version": "3.0.0", 3387 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 3388 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 3389 | "dev": true 3390 | }, 3391 | "strip-ansi": { 3392 | "version": "4.0.0", 3393 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 3394 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 3395 | "dev": true, 3396 | "requires": { 3397 | "ansi-regex": "^3.0.0" 3398 | } 3399 | } 3400 | } 3401 | }, 3402 | "string_decoder": { 3403 | "version": "1.0.3", 3404 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 3405 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 3406 | "dev": true, 3407 | "requires": { 3408 | "safe-buffer": "~5.1.0" 3409 | } 3410 | }, 3411 | "stringstream": { 3412 | "version": "0.0.5", 3413 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 3414 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", 3415 | "dev": true 3416 | }, 3417 | "strip-ansi": { 3418 | "version": "3.0.1", 3419 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 3420 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 3421 | "requires": { 3422 | "ansi-regex": "^2.0.0" 3423 | } 3424 | }, 3425 | "strip-bom": { 3426 | "version": "2.0.0", 3427 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 3428 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 3429 | "requires": { 3430 | "is-utf8": "^0.2.0" 3431 | } 3432 | }, 3433 | "strip-json-comments": { 3434 | "version": "2.0.1", 3435 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 3436 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 3437 | "dev": true 3438 | }, 3439 | "supports-color": { 3440 | "version": "2.0.0", 3441 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 3442 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 3443 | }, 3444 | "table": { 3445 | "version": "4.0.2", 3446 | "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", 3447 | "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", 3448 | "dev": true, 3449 | "requires": { 3450 | "ajv": "^5.2.3", 3451 | "ajv-keywords": "^2.1.0", 3452 | "chalk": "^2.1.0", 3453 | "lodash": "^4.17.4", 3454 | "slice-ansi": "1.0.0", 3455 | "string-width": "^2.1.1" 3456 | }, 3457 | "dependencies": { 3458 | "ansi-styles": { 3459 | "version": "3.2.0", 3460 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 3461 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 3462 | "dev": true, 3463 | "requires": { 3464 | "color-convert": "^1.9.0" 3465 | } 3466 | }, 3467 | "chalk": { 3468 | "version": "2.3.0", 3469 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 3470 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 3471 | "dev": true, 3472 | "requires": { 3473 | "ansi-styles": "^3.1.0", 3474 | "escape-string-regexp": "^1.0.5", 3475 | "supports-color": "^4.0.0" 3476 | } 3477 | }, 3478 | "color-convert": { 3479 | "version": "1.9.1", 3480 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 3481 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 3482 | "dev": true, 3483 | "requires": { 3484 | "color-name": "^1.1.1" 3485 | } 3486 | }, 3487 | "has-flag": { 3488 | "version": "2.0.0", 3489 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 3490 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 3491 | "dev": true 3492 | }, 3493 | "supports-color": { 3494 | "version": "4.5.0", 3495 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 3496 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 3497 | "dev": true, 3498 | "requires": { 3499 | "has-flag": "^2.0.0" 3500 | } 3501 | } 3502 | } 3503 | }, 3504 | "text-hex": { 3505 | "version": "0.0.0", 3506 | "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz", 3507 | "integrity": "sha1-V4+8haapJjbkLdF7QdAhjM6esrM=" 3508 | }, 3509 | "text-table": { 3510 | "version": "0.2.0", 3511 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3512 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 3513 | "dev": true 3514 | }, 3515 | "through": { 3516 | "version": "2.3.8", 3517 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3518 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 3519 | "dev": true 3520 | }, 3521 | "tmp": { 3522 | "version": "0.0.33", 3523 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 3524 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 3525 | "dev": true, 3526 | "requires": { 3527 | "os-tmpdir": "~1.0.2" 3528 | } 3529 | }, 3530 | "to-fast-properties": { 3531 | "version": "1.0.3", 3532 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 3533 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" 3534 | }, 3535 | "tough-cookie": { 3536 | "version": "2.3.3", 3537 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 3538 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 3539 | "dev": true, 3540 | "requires": { 3541 | "punycode": "^1.4.1" 3542 | } 3543 | }, 3544 | "trim-right": { 3545 | "version": "1.0.1", 3546 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 3547 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" 3548 | }, 3549 | "tunnel-agent": { 3550 | "version": "0.6.0", 3551 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 3552 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 3553 | "dev": true, 3554 | "requires": { 3555 | "safe-buffer": "^5.0.1" 3556 | } 3557 | }, 3558 | "tweetnacl": { 3559 | "version": "0.14.5", 3560 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3561 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 3562 | "dev": true, 3563 | "optional": true 3564 | }, 3565 | "type-check": { 3566 | "version": "0.3.2", 3567 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 3568 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 3569 | "dev": true, 3570 | "requires": { 3571 | "prelude-ls": "~1.1.2" 3572 | } 3573 | }, 3574 | "type-is": { 3575 | "version": "1.6.15", 3576 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 3577 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", 3578 | "dev": true, 3579 | "requires": { 3580 | "media-typer": "0.3.0", 3581 | "mime-types": "~2.1.15" 3582 | } 3583 | }, 3584 | "typedarray": { 3585 | "version": "0.0.6", 3586 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3587 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3588 | "dev": true 3589 | }, 3590 | "ua-parser-js": { 3591 | "version": "0.7.17", 3592 | "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", 3593 | "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", 3594 | "dev": true 3595 | }, 3596 | "uberproto": { 3597 | "version": "2.0.1", 3598 | "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-2.0.1.tgz", 3599 | "integrity": "sha512-qSVQbkWIrzaDuMoTRDiwE43R+kIJIYfKc/IT6Sz5XUF/IrXK4ayE/8nvKzvxFuKWu2fnFfL8axo7rqbikUFftw==", 3600 | "requires": { 3601 | "istanbul": "^1.1.0-alpha.1" 3602 | } 3603 | }, 3604 | "uglify-js": { 3605 | "version": "2.8.29", 3606 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 3607 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 3608 | "optional": true, 3609 | "requires": { 3610 | "source-map": "~0.5.1", 3611 | "uglify-to-browserify": "~1.0.0", 3612 | "yargs": "~3.10.0" 3613 | } 3614 | }, 3615 | "uglify-to-browserify": { 3616 | "version": "1.0.2", 3617 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 3618 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 3619 | "optional": true 3620 | }, 3621 | "ultron": { 3622 | "version": "1.1.1", 3623 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", 3624 | "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" 3625 | }, 3626 | "uniq": { 3627 | "version": "1.0.1", 3628 | "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", 3629 | "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", 3630 | "dev": true 3631 | }, 3632 | "unpipe": { 3633 | "version": "1.0.0", 3634 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3635 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 3636 | "dev": true 3637 | }, 3638 | "util-deprecate": { 3639 | "version": "1.0.2", 3640 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3641 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3642 | "dev": true 3643 | }, 3644 | "utils-merge": { 3645 | "version": "1.0.1", 3646 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3647 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 3648 | "dev": true 3649 | }, 3650 | "uuid": { 3651 | "version": "3.2.1", 3652 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", 3653 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", 3654 | "dev": true 3655 | }, 3656 | "uws": { 3657 | "version": "10.148.0", 3658 | "resolved": "https://registry.npmjs.org/uws/-/uws-10.148.0.tgz", 3659 | "integrity": "sha512-aJpFgMMyxubiE/ll4nj9nWoQbv0HzZZDWXfwyu78nuFObX0Zoyv3TWjkqKPQ1vb2sMPZoz67tri7QNE6dybNmQ==", 3660 | "dev": true 3661 | }, 3662 | "validate-npm-package-license": { 3663 | "version": "3.0.1", 3664 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 3665 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", 3666 | "dev": true, 3667 | "requires": { 3668 | "spdx-correct": "~1.0.0", 3669 | "spdx-expression-parse": "~1.0.0" 3670 | } 3671 | }, 3672 | "vary": { 3673 | "version": "1.1.2", 3674 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3675 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 3676 | }, 3677 | "verror": { 3678 | "version": "1.10.0", 3679 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3680 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3681 | "dev": true, 3682 | "requires": { 3683 | "assert-plus": "^1.0.0", 3684 | "core-util-is": "1.0.2", 3685 | "extsprintf": "^1.2.0" 3686 | } 3687 | }, 3688 | "whatwg-fetch": { 3689 | "version": "2.0.3", 3690 | "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", 3691 | "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", 3692 | "dev": true 3693 | }, 3694 | "which": { 3695 | "version": "1.3.0", 3696 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 3697 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", 3698 | "requires": { 3699 | "isexe": "^2.0.0" 3700 | } 3701 | }, 3702 | "window-size": { 3703 | "version": "0.1.0", 3704 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 3705 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 3706 | "optional": true 3707 | }, 3708 | "wordwrap": { 3709 | "version": "1.0.0", 3710 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 3711 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" 3712 | }, 3713 | "wrappy": { 3714 | "version": "1.0.2", 3715 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3716 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 3717 | }, 3718 | "write": { 3719 | "version": "0.2.1", 3720 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 3721 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 3722 | "dev": true, 3723 | "requires": { 3724 | "mkdirp": "^0.5.1" 3725 | } 3726 | }, 3727 | "ws": { 3728 | "version": "6.0.0", 3729 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.0.0.tgz", 3730 | "integrity": "sha512-c2UlYcAZp1VS8AORtpq6y4RJIkJ9dQz18W32SpR/qXGfLDZ2jU4y4wKvvZwqbi7U6gxFQTeE+urMbXU/tsDy4w==", 3731 | "dev": true, 3732 | "requires": { 3733 | "async-limiter": "~1.0.0" 3734 | } 3735 | }, 3736 | "xtend": { 3737 | "version": "4.0.1", 3738 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 3739 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 3740 | "dev": true 3741 | }, 3742 | "yallist": { 3743 | "version": "2.1.2", 3744 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 3745 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 3746 | "dev": true 3747 | }, 3748 | "yargs": { 3749 | "version": "3.10.0", 3750 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 3751 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 3752 | "optional": true, 3753 | "requires": { 3754 | "camelcase": "^1.0.2", 3755 | "cliui": "^2.1.0", 3756 | "decamelize": "^1.0.0", 3757 | "window-size": "0.1.0" 3758 | } 3759 | }, 3760 | "yeast": { 3761 | "version": "0.1.2", 3762 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 3763 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 3764 | } 3765 | } 3766 | } 3767 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@feathersjs/primus", 3 | "description": "The Feathers Primus real-time API provider", 4 | "version": "3.2.1", 5 | "homepage": "https://github.com/feathersjs/primus", 6 | "main": "lib/", 7 | "keywords": [ 8 | "feathers", 9 | "feathers-plugin" 10 | ], 11 | "license": "MIT", 12 | "repository": { 13 | "type": "git", 14 | "url": "git://github.com/feathersjs/primus.git" 15 | }, 16 | "author": { 17 | "name": "Feathers contributors", 18 | "email": "hello@feathersjs.com", 19 | "url": "https://feathersjs.com" 20 | }, 21 | "contributors": [], 22 | "bugs": { 23 | "url": "https://github.com/feathersjs/primus/issues" 24 | }, 25 | "engines": { 26 | "node": ">= 6" 27 | }, 28 | "scripts": { 29 | "publish": "git push origin --tags && npm run changelog && git push origin", 30 | "release:pre": "npm version pre && npm publish --tag pre --access public", 31 | "release:patch": "npm version patch && npm publish --access public", 32 | "release:minor": "npm version minor && npm publish --access public", 33 | "release:major": "npm version major && npm publish --access public", 34 | "changelog": "github_changelog_generator && git add CHANGELOG.md && git commit -am \"Updating changelog\"", 35 | "lint": "semistandard --fix", 36 | "mocha": "mocha --opts mocha.opts", 37 | "coverage": "istanbul cover node_modules/mocha/bin/_mocha -- --opts mocha.opts", 38 | "test": "npm run lint && npm run coverage" 39 | }, 40 | "semistandard": { 41 | "env": [ 42 | "mocha" 43 | ] 44 | }, 45 | "directories": { 46 | "lib": "lib" 47 | }, 48 | "browser": { 49 | "./lib/index": "./lib/client" 50 | }, 51 | "dependencies": { 52 | "@feathersjs/transport-commons": "^4.0.0", 53 | "uberproto": "^2.0.1", 54 | "debug": "^3.1.0", 55 | "primus": "^7.0.0", 56 | "primus-emitter": "^3.1.1" 57 | }, 58 | "devDependencies": { 59 | "@feathersjs/commons": "^2.0.0", 60 | "@feathersjs/express": "^1.0.0", 61 | "@feathersjs/feathers": "^3.0.0", 62 | "feathers": "^2.2.3", 63 | "feathers-memory": "^2.0.0", 64 | "istanbul": "^1.1.0-alpha.1", 65 | "lodash": "^4.0.1", 66 | "mocha": "^5.0.0", 67 | "request": "^2.83.0", 68 | "semistandard": "^12.0.0", 69 | "ws": "^6.0.0" 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /test/events.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert'); 2 | const { verify } = require('feathers-commons/lib/test/fixture'); 3 | 4 | module.exports = function (name, options) { 5 | const call = (method, ...args) => { 6 | return new Promise((resolve, reject) => { 7 | const { socket } = options; 8 | const emitArgs = [ method, name ].concat(args); 9 | 10 | socket.send(...emitArgs, (error, result) => 11 | error ? reject(error) : resolve(result) 12 | ); 13 | }); 14 | }; 15 | 16 | const verifyEvent = (done, callback) => { 17 | return function (data) { 18 | try { 19 | callback(data); 20 | done(); 21 | } catch (error) { 22 | done(error); 23 | } 24 | }; 25 | }; 26 | 27 | describe(`Basic ${name} service events`, () => { 28 | let socket, connection; 29 | 30 | before(done => { 31 | setTimeout(() => { 32 | socket = new options.primus.Socket('http://localhost:7888'); 33 | 34 | options.app.once('connection', conn => { 35 | connection = conn; 36 | 37 | options.app.channel('default').join(connection); 38 | options.app.publish(() => options.app.channel('default')); 39 | 40 | done(); 41 | }); 42 | }, 250); 43 | }); 44 | 45 | after(() => { 46 | socket.socket.close(); 47 | }); 48 | 49 | it(`${name} created`, done => { 50 | let original = { 51 | name: `created event` 52 | }; 53 | 54 | socket.once(`${name} created`, verifyEvent(done, data => 55 | verify.create(original, data) 56 | )); 57 | 58 | call('create', original); 59 | }); 60 | 61 | it(`${name} updated`, done => { 62 | let original = { 63 | name: `updated event` 64 | }; 65 | 66 | socket.once(`${name} updated`, verifyEvent(done, data => 67 | verify.update(10, original, data) 68 | )); 69 | 70 | call('update', 10, original); 71 | }); 72 | 73 | it(`${name} patched`, done => { 74 | let original = { 75 | name: `patched event` 76 | }; 77 | 78 | socket.once(`${name} patched`, verifyEvent(done, data => 79 | verify.patch(12, original, data) 80 | )); 81 | 82 | call('patch', 12, original); 83 | }); 84 | 85 | it(`${name} removed`, done => { 86 | socket.once(`${name} removed`, verifyEvent(done, data => 87 | verify.remove(333, data) 88 | )); 89 | 90 | call('remove', 333); 91 | }); 92 | 93 | it(`${name} custom events`, done => { 94 | let service = options.app.service(name); 95 | let original = { 96 | name: `created event` 97 | }; 98 | let old = service.create; 99 | 100 | service.create = function (data) { 101 | this.emit('log', { message: 'Custom log event', data }); 102 | service.create = old; 103 | return old.apply(this, arguments); 104 | }; 105 | 106 | socket.once(`${name} log`, verifyEvent(done, data => { 107 | assert.deepEqual(data, { 108 | message: `Custom log event`, data: original 109 | }); 110 | service.create = old; 111 | })); 112 | 113 | call('create', original); 114 | }); 115 | }); 116 | 117 | describe('Event channels', () => { 118 | const eventName = `${name} created`; 119 | let connections, sockets; 120 | 121 | before(done => { 122 | let counter = 0; 123 | 124 | connections = []; 125 | sockets = []; 126 | 127 | options.app.on('connection', connection => { 128 | if (connection.channel) { 129 | counter++; 130 | 131 | options.app.channel(connection.channel).join(connection); 132 | 133 | connections.push(connection); 134 | 135 | if (counter === 3) { 136 | done(); 137 | } 138 | } 139 | }); 140 | 141 | sockets.push( 142 | new options.primus.Socket('http://localhost:7888?channel=first'), 143 | new options.primus.Socket('http://localhost:7888?channel=second'), 144 | new options.primus.Socket('http://localhost:7888?channel=second') 145 | ); 146 | }); 147 | 148 | after(done => { 149 | let counter = 0; 150 | 151 | sockets.forEach(socket => { 152 | socket.once('close', () => { 153 | if (++counter === sockets.length) { 154 | done(); 155 | } 156 | }); 157 | socket.socket.close(); 158 | }); 159 | }); 160 | 161 | it(`filters '${eventName}' event for a single channel`, done => { 162 | const service = options.app.service(name); 163 | const [ socket, otherSocket ] = sockets; 164 | const onError = () => { 165 | done(new Error('Should not get this event')); 166 | }; 167 | 168 | service.publish('created', data => 169 | options.app.channel(data.room) 170 | ); 171 | 172 | socket.once(eventName, data => { 173 | assert.equal(data.room, 'first'); 174 | otherSocket.removeListener(eventName, onError); 175 | done(); 176 | }); 177 | 178 | otherSocket.once(eventName, onError); 179 | 180 | service.create({ 181 | text: 'Event dispatching test', 182 | room: 'first' 183 | }); 184 | }); 185 | 186 | it(`filters '${name} created' event for a channel with multiple connections`, done => { 187 | let counter = 0; 188 | 189 | const service = options.app.service(name); 190 | const [ otherSocket, socketOne, socketTwo ] = sockets; 191 | const onError = () => { 192 | done(new Error('Should not get this event')); 193 | }; 194 | const onEvent = data => { 195 | counter++; 196 | assert.equal(data.room, 'second'); 197 | 198 | if (++counter === 2) { 199 | otherSocket.removeListener(eventName, onError); 200 | done(); 201 | } 202 | }; 203 | 204 | service.publish('created', data => 205 | options.app.channel(data.room) 206 | ); 207 | 208 | socketOne.once(eventName, onEvent); 209 | socketTwo.once(eventName, onEvent); 210 | otherSocket.once(eventName, onError); 211 | 212 | service.create({ 213 | text: 'Event dispatching test', 214 | room: 'second' 215 | }); 216 | }); 217 | }); 218 | }; 219 | -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | const feathers = require('@feathersjs/feathers'); 2 | const express = require('@feathersjs/express'); 3 | const assert = require('assert'); 4 | const request = require('request'); 5 | const _ = require('lodash'); 6 | const { Service } = require('feathers-commons/lib/test-fixture'); 7 | 8 | const primus = require('../lib'); 9 | const methodTests = require('./methods.js'); 10 | const eventTests = require('./events'); 11 | 12 | describe('@feathersjs/primus', () => { 13 | let options = { 14 | socketParams: { 15 | user: { name: 'David' }, 16 | provider: 'primus' 17 | } 18 | }; 19 | 20 | before(done => { 21 | const errorHook = function (hook) { 22 | if (hook.params.query.hookError) { 23 | throw new Error(`Error from ${hook.method}, ${hook.type} hook`); 24 | } 25 | }; 26 | const app = options.app = feathers() 27 | .configure(primus({ 28 | transformer: 'websockets' 29 | }, function (primus) { 30 | primus.authorize(function (req, done) { 31 | req.feathers.user = { name: 'David' }; 32 | 33 | const { channel } = req.query; 34 | 35 | if (channel) { 36 | req.feathers.channel = channel; 37 | } 38 | 39 | done(); 40 | }); 41 | 42 | options.primus = primus; 43 | options.socket = new primus.Socket('http://localhost:7888'); 44 | })) 45 | .use('todo', Service); 46 | 47 | app.service('todo').hooks({ 48 | before: { get: errorHook } 49 | }); 50 | 51 | options.server = app.listen(7888, function () { 52 | app.use('tasks', Service); 53 | app.service('tasks').hooks({ 54 | before: { get: errorHook } 55 | }); 56 | done(); 57 | }); 58 | }); 59 | 60 | after(done => { 61 | options.socket.socket.close(); 62 | options.server.close(done); 63 | }); 64 | 65 | it('exports default and SOCKET_KEY', () => { 66 | assert.ok(primus.SOCKET_KEY); 67 | assert.equal(primus, primus.default); 68 | }); 69 | 70 | it('is CommonJS compatible', () => { 71 | assert.equal(typeof require('../lib'), 'function'); 72 | }); 73 | 74 | it('throws an error when using an incompatible version of Feathers', () => { 75 | const oldFeathers = require('feathers'); 76 | 77 | try { 78 | oldFeathers().configure(primus()); 79 | assert.ok(false, 'Should never get here'); 80 | } catch (e) { 81 | assert.equal(e.message, '@feathersjs/primus is not compatible with this version of Feathers. Use the latest at @feathersjs/feathers.'); 82 | } 83 | }); 84 | 85 | it('runs primus before setup (#131)', done => { 86 | let counter = 0; 87 | const app = feathers() 88 | .configure(primus({ 89 | transformer: 'websockets' 90 | }, function () { 91 | assert.equal(counter, 0); 92 | counter++; 93 | })) 94 | .use('/todos', { 95 | find () { 96 | return Promise.resolve([]); 97 | }, 98 | setup (app) { 99 | assert.ok(app.primus); 100 | assert.equal(counter, 1, 'Primus configuration ran first'); 101 | } 102 | }); 103 | 104 | const srv = app.listen(9119); 105 | srv.on('listening', () => srv.close(done)); 106 | }); 107 | 108 | it('expressified app works', done => { 109 | const data = { message: 'Hello world' }; 110 | const app = express(feathers()) 111 | .configure(primus({ 112 | transformer: 'websockets' 113 | })) 114 | .use('/test', (req, res) => res.json(data)); 115 | 116 | const srv = app.listen(8992).on('listening', () => { 117 | const url = 'http://localhost:8992/test'; 118 | 119 | request({ url, json: true }, (err, res) => { 120 | assert.ok(!err); 121 | assert.deepEqual(res.body, data); 122 | srv.close(done); 123 | }); 124 | }); 125 | }); 126 | 127 | it('Passes handshake as service parameters.', function (done) { 128 | const service = options.app.service('todo'); 129 | const old = { 130 | find: service.find, 131 | create: service.create, 132 | update: service.update, 133 | remove: service.remove 134 | }; 135 | 136 | service.find = function (params) { 137 | assert.deepEqual(_.omit(params, 'query', 'route', 'connection'), options.socketParams, 138 | 'Handshake parameters passed on proper position'); 139 | 140 | return old.find.apply(this, arguments); 141 | }; 142 | 143 | service.create = function (data, params) { 144 | assert.deepEqual(_.omit(params, 'query', 'route', 'connection'), options.socketParams, 145 | 'Passed handshake parameters'); 146 | 147 | return old.create.apply(this, arguments); 148 | }; 149 | 150 | service.update = function (id, data, params) { 151 | assert.deepEqual(params, _.extend({ 152 | connection: options.socketParams, 153 | route: {}, 154 | query: { 155 | test: 'param' 156 | } 157 | }, options.socketParams), 'Passed handshake parameters as query'); 158 | 159 | return old.update.apply(this, arguments); 160 | }; 161 | 162 | options.socket.send('create', 'todo', {}, {}, error => { 163 | assert.ok(!error); 164 | 165 | options.socket.send('update', 'todo', 1, {}, { test: 'param' }, () => { 166 | assert.ok(!error); 167 | _.extend(service, old); 168 | done(); 169 | }); 170 | }); 171 | }); 172 | 173 | it('Missing parameters in socket call works. (#88)', function (done) { 174 | const service = options.app.service('todo'); 175 | const old = { 176 | find: service.find 177 | }; 178 | 179 | service.find = function (params) { 180 | assert.deepEqual(_.omit(params, 'query', 'route', 'connection'), options.socketParams, 181 | 'Handshake parameters passed on proper position'); 182 | 183 | return old.find.apply(this, arguments); 184 | }; 185 | 186 | options.socket.send('find', 'todo', function () { 187 | _.extend(service, old); 188 | done(); 189 | }); 190 | }); 191 | 192 | describe('Service method calls', () => { 193 | describe('(\'method\', \'service\') event format', () => { 194 | describe('Service', () => methodTests('todo', options)); 195 | describe('Dynamic Service', () => methodTests('todo', options)); 196 | }); 197 | 198 | describe('(\'service::method\') legacy event format', () => { 199 | describe('Service', () => methodTests('tasks', options, true)); 200 | describe('Dynamic Service', () => methodTests('tasks', options, true)); 201 | }); 202 | }); 203 | 204 | describe('Service events', () => { 205 | describe('Service', () => eventTests('todo', options)); 206 | describe('Dynamic Service', () => eventTests('tasks', options)); 207 | }); 208 | }); 209 | -------------------------------------------------------------------------------- /test/methods.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert'); 2 | const { verify } = require('feathers-commons/lib/test/fixture'); 3 | 4 | module.exports = function (name, options, legacy = false) { 5 | const call = (method, ...args) => 6 | new Promise((resolve, reject) => { 7 | const { socket } = options; 8 | const prefix = legacy ? [ `${name}::${method}` ] 9 | : [ method, name ]; 10 | const emitArgs = prefix.concat(args); 11 | 12 | socket.send(...emitArgs, (error, result) => 13 | error ? reject(error) : resolve(result) 14 | ); 15 | } 16 | ); 17 | 18 | it(`invalid arguments cause an error`, () => 19 | call('find', 1, {}).catch(e => 20 | assert.equal(e.message, 'Too many arguments for \'find\' method') 21 | ) 22 | ); 23 | 24 | it('.find', () => 25 | call('find', {}).then(data => verify.find(data)) 26 | ); 27 | 28 | it('.get', () => 29 | call('get', 'laundry').then(data => verify.get('laundry', data)) 30 | ); 31 | 32 | it('.get with error', () => 33 | call('get', 'laundry', { error: true }) 34 | .then(() => assert.ok(false, 'Should never get here')) 35 | .catch(error => assert.equal(error.message, 'Something for laundry went wrong')) 36 | ); 37 | 38 | it('.get with runtime error', () => 39 | call('get', 'laundry', { runtimeError: true }) 40 | .then(() => assert.ok(false, 'Should never get here')) 41 | .catch(error => assert.equal(error.message, 'thingThatDoesNotExist is not defined')) 42 | ); 43 | 44 | it('.get with error in hook', () => 45 | call('get', 'laundry', { hookError: true }) 46 | .then(() => assert.ok(false, 'Should never get here')) 47 | .catch(error => assert.equal(error.message, 'Error from get, before hook')) 48 | ); 49 | 50 | it(`.create`, () => { 51 | let original = { 52 | name: `creating` 53 | }; 54 | 55 | return call('create', original, {}) 56 | .then(data => verify.create(original, data)); 57 | }); 58 | 59 | it(`.create without parameters`, () => { 60 | let original = { 61 | name: `creating again` 62 | }; 63 | 64 | return call('create', original) 65 | .then(data => verify.create(original, data)); 66 | }); 67 | 68 | it('.update', () => { 69 | let original = { 70 | name: 'updating' 71 | }; 72 | 73 | return call('update', 23, original, {}) 74 | .then(data => verify.update(23, original, data)); 75 | }); 76 | 77 | it('.update many', () => { 78 | const original = { 79 | name: `updating`, 80 | many: true 81 | }; 82 | 83 | return call('update', null, original) 84 | .then(data => verify.update(null, original, data)); 85 | }); 86 | 87 | it('.patch', () => { 88 | let original = { 89 | name: `patching` 90 | }; 91 | 92 | return call('patch', 25, original) 93 | .then(data => verify.patch(25, original, data)); 94 | }); 95 | 96 | it('.patch many', () => { 97 | let original = { 98 | name: `patching`, 99 | many: true 100 | }; 101 | 102 | return call('patch', null, original) 103 | .then(data => verify.patch(null, original, data)); 104 | }); 105 | 106 | it('.remove', () => 107 | call('remove', 11).then(data => verify.remove(11, data)) 108 | ); 109 | 110 | it('.remove many', () => 111 | call('remove', null).then(data => verify.remove(null, data)) 112 | ); 113 | }; 114 | --------------------------------------------------------------------------------