From 5feb115b3d63d3e8df029998aaffdcf18cbcb763 Mon Sep 17 00:00:00 2001 From: Andrew Levy <44853528+AndrewLevy395@users.noreply.github.com> Date: Thu, 3 Oct 2019 17:46:31 -0400 Subject: [PATCH 01/46] Update proposal --- README.md | 51 --------------------------------------------------- proposal.md | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 51 deletions(-) delete mode 100644 README.md create mode 100644 proposal.md diff --git a/README.md b/README.md deleted file mode 100644 index 39e2788d..00000000 --- a/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# cs4241-FinalProject - -For your final project, you'll implement a course project that exhibits your mastery of the course materials. -Similar to A4, this project gives you an opportunity to be creative and to pursue individual research and learning. - -## General description - -Your project should consist of a complete Web application, exhibiting facets of the three main sections of the course material: - -- Static Web page content and design. You should have a project that is accessible, easily navigable, and features significant content. -- Dynamic behavior implemented with JavaScript. -- Server-side programming *using Node.js*. Typically this will take the form of some sort of persistent data, authentication, and possibly server-side computation. - -Additionally, you should incorporate features that you independently research, design, and implement for your project. - -## Project ideation - -Excellent projects serve someone/some group; for this assignment you need to define your users and stakeholders. I encourage you to identify projects that will have impact, either artistically, politically, or in terms of productivity. Consider creating something useful for a cause or hobby you care about. - -## Logistics - -### Team size -Students are encouraged to work in teams of 2-5 students for the project. This will allow you to build a good project without expending an excessive amount of effort. While I would expect a team of four or five students to produce a project with more features, I expect a every team's work to exhibit all of the required facets described above. - -### Deliverables - -__Proposal:__ -Provide an outline of your project direction and the names of the team members. -The outline should have enough detail so that staff can determine if it meets the minimum expectations, or if it goes too far to be reasonable by the deadline. -This file must be named proposal.md so we can find it. -Submit a PR to turn it in by Monday, September 30th, before class - -There are no other scheduled checkpoints for your project. -You must be done in time to present before the final project demo day (October 10th). - -#### Turning in Your Outline / Project - -**NOTE: code is due before the project presentation day due to the end of term / grading schedule constraints** -Submit a second PR on the final project repo to turn in your app and code. - -Deploy your app, in the form of a webpage, to Glitch/Heroku/Digital Ocean or some other service. -Folks on the same team do not need to post the same webpage, but must instead clearly state who is on the team in their proposal. -(Staff will use the proposal to build the grading sheet.) - -## Final Presentation - -Presentations will occur during the final day of class. - -## FAQs - -- **Can I use XYZ framework?** You can use any web-based frameworks or tools available, but for your server programming you need to use node.js. diff --git a/proposal.md b/proposal.md new file mode 100644 index 00000000..59d0243b --- /dev/null +++ b/proposal.md @@ -0,0 +1,22 @@ +# cs4241-FinalProject + +## Team Members +- Daniel Duff +- Timothy Winters +- Andrew Levy + +_Online Codenames Multiplayer Game_ +For our Final Project, we plan on implementing an online version of the card game codenames which will allow users to play together online and create their own cards and play styles. + +## This project will feature: +- HTML static pages and validations for form input, as well as for the tracking sheet interface itself. +- A login feature, which allows users to log in and edit/produce their own personal card decks. +- A Node.js SQLite database which hold all of the login and card deck info for all users. +- Dynamic Javascript that will implement selectors and buttons for selecting and making cards in game as well as communicating with teammates (if necessary) +- Javascript to interact (add/modify/remove) with the database. +- Card presets, which will allow users to play the game without needing to create their own deck (if they so choose) + +## Goals for this Project: +- Create a fun interactive game that people can play online. +- Utilize web sockets to allow for realtime communication between players, browser, and the server. +- Allow players customization options for the game that paying with cards in real life does not offer. From f3b2b3daccce5d43b6b073c0caa868649036633b Mon Sep 17 00:00:00 2001 From: Andrew Levy <44853528+AndrewLevy395@users.noreply.github.com> Date: Thu, 3 Oct 2019 17:54:02 -0400 Subject: [PATCH 02/46] Update proposal.md --- proposal.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/proposal.md b/proposal.md index 59d0243b..66718404 100644 --- a/proposal.md +++ b/proposal.md @@ -8,6 +8,9 @@ _Online Codenames Multiplayer Game_ For our Final Project, we plan on implementing an online version of the card game codenames which will allow users to play together online and create their own cards and play styles. +## Codenames +Here is a link to the rules of codenames: https://howdoyouplayit.com/codename-rules-how-do-you-play-the-codename-board-game/ + ## This project will feature: - HTML static pages and validations for form input, as well as for the tracking sheet interface itself. - A login feature, which allows users to log in and edit/produce their own personal card decks. From b77872d2ece0702c2ee0db51bdcf9381d9dbfa08 Mon Sep 17 00:00:00 2001 From: Andrew Levy <44853528+AndrewLevy395@users.noreply.github.com> Date: Thu, 3 Oct 2019 17:54:32 -0400 Subject: [PATCH 03/46] added rules --- proposal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proposal.md b/proposal.md index 66718404..47c4b9bb 100644 --- a/proposal.md +++ b/proposal.md @@ -9,7 +9,7 @@ _Online Codenames Multiplayer Game_ For our Final Project, we plan on implementing an online version of the card game codenames which will allow users to play together online and create their own cards and play styles. ## Codenames -Here is a link to the rules of codenames: https://howdoyouplayit.com/codename-rules-how-do-you-play-the-codename-board-game/ +Rules of codenames: https://howdoyouplayit.com/codename-rules-how-do-you-play-the-codename-board-game/ ## This project will feature: - HTML static pages and validations for form input, as well as for the tracking sheet interface itself. From 19ac41bab42b39cbdffac827fc18480378e9b2fc Mon Sep 17 00:00:00 2001 From: Andrew Levy <44853528+AndrewLevy395@users.noreply.github.com> Date: Thu, 3 Oct 2019 17:55:07 -0400 Subject: [PATCH 04/46] Update proposal.md --- proposal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proposal.md b/proposal.md index 47c4b9bb..9bb03537 100644 --- a/proposal.md +++ b/proposal.md @@ -5,7 +5,7 @@ - Timothy Winters - Andrew Levy -_Online Codenames Multiplayer Game_ +_Online Codenames Multiplayer Game!_ For our Final Project, we plan on implementing an online version of the card game codenames which will allow users to play together online and create their own cards and play styles. ## Codenames From ae712aa108f69f9148798a6dc031d870c59b301d Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Thu, 3 Oct 2019 17:55:36 -0400 Subject: [PATCH 05/46] Update proposal.md --- proposal.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/proposal.md b/proposal.md index 9bb03537..c6ddae90 100644 --- a/proposal.md +++ b/proposal.md @@ -5,14 +5,11 @@ - Timothy Winters - Andrew Levy -_Online Codenames Multiplayer Game!_ -For our Final Project, we plan on implementing an online version of the card game codenames which will allow users to play together online and create their own cards and play styles. - -## Codenames -Rules of codenames: https://howdoyouplayit.com/codename-rules-how-do-you-play-the-codename-board-game/ +_Online **Codenames** Multiplayer Game_ +For our Final Project, we plan on implementing an online version of the card game _codenames_ which will allow users to play together online and create their own cards and play styles. ## This project will feature: -- HTML static pages and validations for form input, as well as for the tracking sheet interface itself. +- HTML static pages and validations for form input to prevent duplicate cards - A login feature, which allows users to log in and edit/produce their own personal card decks. - A Node.js SQLite database which hold all of the login and card deck info for all users. - Dynamic Javascript that will implement selectors and buttons for selecting and making cards in game as well as communicating with teammates (if necessary) From 4aa0593266133e00f2349308c0166f52e1b8cd4b Mon Sep 17 00:00:00 2001 From: Levy Date: Sun, 6 Oct 2019 20:22:51 -0400 Subject: [PATCH 06/46] first commit --- .vscode/settings.json | 3 + app/.gitignore | 23 + app/README.md | 68 + app/package-lock.json | 13119 +++++++++++++++++++++++++++++++++++++ app/package.json | 31 + app/public/favicon.ico | Bin 0 -> 22382 bytes app/public/index.html | 20 + app/public/logo192.png | Bin 0 -> 8581 bytes app/public/logo512.png | Bin 0 -> 22920 bytes app/public/manifest.json | 25 + app/public/robots.txt | 2 + app/src/App.css | 59 + app/src/App.js | 176 + app/src/App.test.js | 9 + app/src/index.css | 13 + app/src/index.js | 8 + app/src/serviceWorker.js | 135 + 17 files changed, 13691 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 app/.gitignore create mode 100644 app/README.md create mode 100644 app/package-lock.json create mode 100644 app/package.json create mode 100644 app/public/favicon.ico create mode 100644 app/public/index.html create mode 100644 app/public/logo192.png create mode 100644 app/public/logo512.png create mode 100644 app/public/manifest.json create mode 100644 app/public/robots.txt create mode 100644 app/src/App.css create mode 100644 app/src/App.js create mode 100644 app/src/App.test.js create mode 100644 app/src/index.css create mode 100644 app/src/index.js create mode 100644 app/src/serviceWorker.js diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..3b664107 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "git.ignoreLimitWarning": true +} \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 00000000..4d29575d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/app/README.md b/app/README.md new file mode 100644 index 00000000..859d27a6 --- /dev/null +++ b/app/README.md @@ -0,0 +1,68 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting + +### Analyzing the Bundle Size + +This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size + +### Making a Progressive Web App + +This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app + +### Advanced Configuration + +This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration + +### Deployment + +This section has moved here: https://facebook.github.io/create-react-app/docs/deployment + +### `npm run build` fails to minify + +This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 00000000..33560ccd --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,13119 @@ +{ + "name": "app", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.0.tgz", + "integrity": "sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.0", + "@babel/helpers": "^7.6.0", + "@babel/parser": "^7.6.0", + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.0", + "@babel/types": "^7.6.0", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.2.tgz", + "integrity": "sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==", + "requires": { + "@babel/types": "^7.6.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "requires": { + "@babel/types": "^7.3.0", + "esutils": "^2.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz", + "integrity": "sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4" + } + }, + "@babel/helper-define-map": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "requires": { + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } + }, + "@babel/helpers": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz", + "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==", + "requires": { + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.2", + "@babel/types": "^7.6.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.2.tgz", + "integrity": "sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", + "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.5.5", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.6.0.tgz", + "integrity": "sha512-ZSyYw9trQI50sES6YxREXKu+4b7MAg6Qx2cvyDDYjP2Hpzd3FleOUwC9cqn1+za8d0A2ZU8SHujxFao956efUg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.6.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-decorators": "^7.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", + "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz", + "integrity": "sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", + "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", + "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", + "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz", + "integrity": "sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", + "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz", + "integrity": "sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz", + "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", + "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", + "requires": { + "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz", + "integrity": "sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g==", + "requires": { + "regexpu-core": "^4.6.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.6.0.tgz", + "integrity": "sha512-np/nPuII8DHOZWB3u8u+NSeKlEz0eBrOlnVksIQog4C9NGVzXO+NLxMcXn4Eu4GMFzOw2W6Tyo6L3+Wv8z9Y5w==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "requires": { + "@babel/helper-builder-react-jsx": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", + "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", + "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.0.tgz", + "integrity": "sha512-Da8tMf7uClzwUm/pnJ1S93m/aRXmoYNDD7TkHua8xBDdaAs54uZpTWvEt6NGwmoVMb9mZbntfTqmG2oSzN/7Vg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", + "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.6.0.tgz", + "integrity": "sha512-yzw7EopOOr6saONZ3KA3lpizKnWRTe+rfBqg4AmQbSow7ik7fqmzrfIqt053osLwLE2AaTqGinLM2tl6+M/uog==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.6.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-typescript": "^7.2.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz", + "integrity": "sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/preset-env": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.2.tgz", + "integrity": "sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.6.2", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.6.2", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.6.0", + "@babel/plugin-transform-dotall-regex": "^7.6.2", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.2", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.6.2", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.6.2", + "@babel/types": "^7.6.0", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" + } + }, + "@babel/preset-typescript": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz", + "integrity": "sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.6.0" + } + }, + "@babel/runtime": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", + "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", + "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0" + } + }, + "@babel/traverse": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.2.tgz", + "integrity": "sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.2", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.6.2", + "@babel/types": "^7.6.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", + "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "@csstools/normalize.css": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-9.0.1.tgz", + "integrity": "sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA==" + }, + "@hapi/address": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.2.tgz", + "integrity": "sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q==" + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "@hapi/hoek": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.3.0.tgz", + "integrity": "sha512-C0QL9bmgUXTSuf8nDeGrpMjtJG7tPUr8wG6/wxPbP62tGwCwQtdMSJYfESowmY4P3Hn593f+8OzNY5bckcu/LQ==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.4.tgz", + "integrity": "sha512-aVWQTOI9wBD6zawmOr6f+tdEIxQC8JXfQVLTjgGe8YEStAWGn/GNNVTobKJhbWKveQj2RyYF3oYbO9SC8/eOCA==", + "requires": { + "@hapi/hoek": "8.x.x" + } + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", + "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", + "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz", + "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", + "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", + "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", + "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" + }, + "@svgr/babel-preset": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz", + "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3", + "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", + "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", + "@svgr/babel-plugin-transform-svg-component": "^4.2.0" + } + }, + "@svgr/core": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz", + "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==", + "requires": { + "@svgr/plugin-jsx": "^4.3.3", + "camelcase": "^5.3.1", + "cosmiconfig": "^5.2.1" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", + "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@svgr/plugin-jsx": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz", + "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==", + "requires": { + "@babel/core": "^7.4.5", + "@svgr/babel-preset": "^4.3.3", + "@svgr/hast-util-to-babel-ast": "^4.3.2", + "svg-parser": "^2.0.0" + } + }, + "@svgr/plugin-svgo": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", + "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", + "requires": { + "cosmiconfig": "^5.2.1", + "merge-deep": "^3.0.2", + "svgo": "^1.2.2" + } + }, + "@svgr/webpack": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.2.tgz", + "integrity": "sha512-F3VE5OvyOWBEd2bF7BdtFRyI6E9it3mN7teDw0JQTlVtc4HZEYiiLSl+Uf9Uub6IYHVGc+qIrxxDyeedkQru2w==", + "requires": { + "@babel/core": "^7.4.5", + "@babel/plugin-transform-react-constant-elements": "^7.0.0", + "@babel/preset-env": "^7.4.5", + "@babel/preset-react": "^7.0.0", + "@svgr/core": "^4.3.2", + "@svgr/plugin-jsx": "^4.3.2", + "@svgr/plugin-svgo": "^4.3.1", + "loader-utils": "^1.2.3" + } + }, + "@types/babel__core": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", + "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==" + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" + }, + "@types/yargs": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", + "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.3.2.tgz", + "integrity": "sha512-tcnpksq1bXzcIRbYLeXkgp6l+ggEMXXUcl1wsSvL807fRtmvVQKygElwEUf4hBA76dNag3VAK1q2m3vd7qJaZA==", + "requires": { + "@typescript-eslint/experimental-utils": "2.3.2", + "eslint-utils": "^1.4.2", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^2.0.1", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.3.2.tgz", + "integrity": "sha512-t+JGdTT6dRbmvKDlhlVkEueoZa0fhJNfG6z2cpnRPLwm3VwYr2BjR//acJGC1Yza0I9ZNcDfRY7ubQEvvfG6Jg==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.3.2", + "eslint-scope": "^5.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.3.2.tgz", + "integrity": "sha512-nq1UQeNGdKdqdgF6Ww+Ov2OidWgiL96+JYdXXZ2rkP/OWyc6KMNSbs6MpRCpI8q+PmDa7hBnHNQIo7w/drYccA==", + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.3.2", + "@typescript-eslint/typescript-estree": "2.3.2", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.3.2.tgz", + "integrity": "sha512-eZNEAai16nwyhIVIEaWQlaUgAU3S9CkQ58qvK0+3IuSdLJD3W1PNuehQFMIhW/mTP1oFR9GNoTcLg7gtXz6lzA==", + "requires": { + "glob": "^7.1.4", + "is-glob": "^4.0.1", + "lodash.unescape": "4.0.1", + "semver": "^6.3.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "abab": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", + "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + } + } + }, + "acorn-jsx": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==" + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "requires": { + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + } + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.4.tgz", + "integrity": "sha512-Koz2cJU9dKOxG8P1f8uVaBntOv9lP4yz9ffWvWaicv9gHBPhpQB22nGijwd8gqW9CNT+UdkbQOQNLVI8jN1ZfQ==", + "requires": { + "browserslist": "^4.7.0", + "caniuse-lite": "^1.0.30000998", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.18", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-eslint": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", + "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-extract-comments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", + "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", + "requires": { + "babylon": "^6.18.0" + } + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-loader": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", + "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", + "requires": { + "@babel/runtime": "^7.4.2", + "cosmiconfig": "^5.2.0", + "resolve": "^1.10.0" + } + }, + "babel-plugin-named-asset-import": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.4.tgz", + "integrity": "sha512-S6d+tEzc5Af1tKIMbsf2QirCcPdQ+mKUCY2H1nJj1DyA1ShwpsoxEOAwbWsG5gcXNV/olpvQd9vrUWRx4bnhpw==" + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "babel-preset-react-app": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.2.tgz", + "integrity": "sha512-aXD+CTH8Chn8sNJr4tO/trWKqe5sSE4hdO76j9fhVezJSzmpWYWUSc5JoPmdSxADwef5kQFNGKXd433vvkd2VQ==", + "requires": { + "@babel/core": "7.6.0", + "@babel/plugin-proposal-class-properties": "7.5.5", + "@babel/plugin-proposal-decorators": "7.6.0", + "@babel/plugin-proposal-object-rest-spread": "7.5.5", + "@babel/plugin-syntax-dynamic-import": "7.2.0", + "@babel/plugin-transform-destructuring": "7.6.0", + "@babel/plugin-transform-flow-strip-types": "7.4.4", + "@babel/plugin-transform-react-display-name": "7.2.0", + "@babel/plugin-transform-runtime": "7.6.0", + "@babel/preset-env": "7.6.0", + "@babel/preset-react": "7.0.0", + "@babel/preset-typescript": "7.6.0", + "@babel/runtime": "7.6.0", + "babel-plugin-dynamic-import-node": "2.3.0", + "babel-plugin-macros": "2.6.1", + "babel-plugin-transform-react-remove-prop-types": "0.4.24" + }, + "dependencies": { + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/preset-env": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.0.tgz", + "integrity": "sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.6.0", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.6.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.0", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.6.0", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "bluebird": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz", + "integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==" + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + } + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", + "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "requires": { + "caniuse-lite": "^1.0.30000989", + "electron-to-chromium": "^1.3.247", + "node-releases": "^1.1.29" + } + }, + "bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30000998", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000998.tgz", + "integrity": "sha512-8Tj5sPZR9kMHeDD9SZXIVr5m9ofufLLCG2Y4QwQrH18GIwG+kCc+zYdlR036ZRkuKjVVetyxeAgGA1xF7XdmzQ==" + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", + "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + } + } + }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==" + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "requires": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==" + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "confusing-browser-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "^0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", + "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==" + }, + "core-js-compat": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", + "requires": { + "browserslist": "^4.6.6", + "semver": "^6.3.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "requires": { + "postcss": "^7.0.5" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "css-loader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", + "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", + "requires": { + "camelcase": "^5.2.0", + "icss-utils": "^4.1.0", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.14", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^2.0.6", + "postcss-modules-scope": "^2.1.0", + "postcss-modules-values": "^2.0.0", + "postcss-value-parser": "^3.3.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + } + } + }, + "css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "requires": { + "postcss": "^7.0.5" + } + }, + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-tree": { + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.5.3" + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + } + } + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "requires": { + "cssom": "0.3.x" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.275", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.275.tgz", + "integrity": "sha512-/YWtW/VapMnuYA1lNOaa1F4GhR1LBf+CUTp60lzDPEEh0XOzyOAyULyYZVF9vziZ3qSbTqCwmKwsyRXp66STbw==" + }, + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", + "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.51", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", + "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", + "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.51" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "eslint": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.1.tgz", + "integrity": "sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==", + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } + } + }, + "eslint-config-react-app": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.0.2.tgz", + "integrity": "sha512-VhlESAQM83uULJ9jsvcKxx2Ab0yrmjUt8kDz5DyhTQufqWE0ssAnejlWri5LXv25xoXfdqOyeDPdfJS9dXKagQ==", + "requires": { + "confusing-browser-globals": "^1.0.9" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "eslint-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.2.tgz", + "integrity": "sha512-S5VnD+UpVY1PyYRqeBd/4pgsmkvSokbHqTXAQMpvCyRr3XN2tvSLo9spm2nEpqQqh9dezw3os/0zWihLeOg2Rw==", + "requires": { + "fs-extra": "^8.1.0", + "loader-fs-cache": "^1.0.2", + "loader-utils": "^1.2.3", + "object-hash": "^1.3.1", + "schema-utils": "^2.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "schema-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-flowtype": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", + "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", + "requires": { + "lodash": "^4.17.15" + } + }, + "eslint-plugin-import": { + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "requires": { + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", + "requires": { + "@babel/runtime": "^7.4.5", + "aria-query": "^3.0.0", + "array-includes": "^3.0.3", + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.2", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^7.0.2", + "has": "^1.0.3", + "jsx-ast-utils": "^2.2.1" + } + }, + "eslint-plugin-react": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz", + "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==", + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.1.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.2", + "resolve": "^1.10.1" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" + }, + "espree": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", + "requires": { + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==" + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "^2.0.0" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "follow-redirects": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "fork-ts-checker-webpack-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA==", + "requires": { + "babel-code-frame": "^6.22.0", + "chalk": "^2.4.1", + "chokidar": "^2.0.4", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", + "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz", + "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + } + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } + } + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" + }, + "handlebars": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.2.tgz", + "integrity": "sha512-cIv17+GhL8pHHnRJzGu2wwcthL5sb8uDKBHvZ2Dtu5s1YNt0ljbzKbamnc+gr69y7bzwQiBdr5+hOpRd5pnOdg==", + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "harmony-reflect": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", + "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + } + } + }, + "html-webpack-plugin": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.5.tgz", + "integrity": "sha512-y5l4lGxOW3pz3xBTFdfB9rnnrWRPVxlAhX6nrBYIcW+2k2zC3mSp/3DxlWVCMBfnO6UAnoF8OcFn0IMy6kaKAQ==", + "requires": { + "html-minifier": "^3.5.20", + "loader-utils": "^1.1.0", + "lodash": "^4.17.11", + "pretty-error": "^2.1.1", + "tapable": "^1.1.0", + "util.promisify": "1.0.0" + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "requires": { + "postcss": "^7.0.14" + } + }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "requires": { + "harmony-reflect": "^1.4.6" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "immer": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", + "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "^1.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "requires": { + "handlebars": "^4.1.2" + } + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-jsdom-fourteen": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-0.1.0.tgz", + "integrity": "sha512-4vtoRMg7jAstitRzL4nbw83VmGH8Rs13wrND3Ud2o1fczDhMUF32iIrNKwYGgeOPUdfvZU4oy8Bbv+ni1fgVCA==", + "requires": { + "jest-mock": "^24.5.0", + "jest-util": "^24.5.0", + "jsdom": "^14.0.0" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + }, + "jsdom": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", + "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", + "requires": { + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.1.3", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" + } + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + }, + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "dependencies": { + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + } + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==" + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + } + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watch-typeahead": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.0.tgz", + "integrity": "sha512-bJR/HPNgOQnkmttg1OkBIrYFAYuxFxExtgQh67N2qPvaWGVC8TCkedRNPKBfmZfVXFD3u2sCH+9OuS5ApBfCgA==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.1", + "jest-watcher": "^24.3.0", + "slash": "^3.0.0", + "string-length": "^3.1.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "requires": { + "type-fest": "^0.5.2" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + } + } + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz", + "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==", + "requires": { + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "loader-fs-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", + "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "loglevel": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.x" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "requires": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "mini-css-extract-plugin": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz", + "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==", + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "node-releases": { + "version": "1.1.34", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.34.tgz", + "integrity": "sha512-fNn12JTEfniTuCqo0r9jXgl44+KxRH/huV7zM/KAGOKxDKrHr6EbT7SSs4B+DNxyBE2mks28AD+Jw6PkfY5uwA==", + "requires": { + "semver": "^6.3.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz", + "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.15.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + } + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + } + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + } + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" + }, + "pnp-webpack-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg==", + "requires": { + "ts-pnp": "^1.1.2" + } + }, + "portfinder": { + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz", + "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==", + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", + "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-attribute-case-insensitive": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz", + "integrity": "sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-browser-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-2.0.0.tgz", + "integrity": "sha512-xGG0UvoxwBc4Yx4JX3gc0RuDl1kc4bVihCzzk6UC72YPfq5fu3c717Nu8Un3nvnq1BJ31gBnFXIG/OaUTnpHgA==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "requires": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + } + }, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "requires": { + "postcss": "^7.0.17", + "postcss-values-parser": "^2.0.1" + } + }, + "postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "requires": { + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-flexbugs-fixes": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz", + "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-font-variant": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", + "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-initial": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.1.tgz", + "integrity": "sha512-I2Sz83ZSHybMNh02xQDK609lZ1/QOyYeuizCjzEhlMgeV/HcDJapQiH4yTqLjZss0X6/6VvKFXUeObaHpJoINw==", + "requires": { + "lodash.template": "^4.5.0", + "postcss": "^7.0.2" + } + }, + "postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + } + }, + "postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", + "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0", + "postcss-value-parser": "^3.3.1" + } + }, + "postcss-modules-scope": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz", + "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", + "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^7.0.6" + } + }, + "postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-normalize": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-7.0.1.tgz", + "integrity": "sha512-NOp1fwrG+6kVXWo7P9SizCHX6QvioxFD/hZcI2MLxPmVnFJFC0j0DDpIuNw2tUDeCFMni59gCVgeJ1/hYhj2OQ==", + "requires": { + "@csstools/normalize.css": "^9.0.1", + "browserslist": "^4.1.1", + "postcss": "^7.0.2", + "postcss-browser-comments": "^2.0.0" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "requires": { + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", + "postcss-color-functional-notation": "^2.0.1", + "postcss-color-gray": "^5.0.0", + "postcss-color-hex-alpha": "^5.0.3", + "postcss-color-mod-function": "^3.0.3", + "postcss-color-rebeccapurple": "^4.0.1", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", + "postcss-custom-selectors": "^5.1.2", + "postcss-dir-pseudo-class": "^5.0.0", + "postcss-double-position-gradients": "^1.0.0", + "postcss-env-function": "^2.0.2", + "postcss-focus-visible": "^4.0.0", + "postcss-focus-within": "^3.0.0", + "postcss-font-variant": "^4.0.0", + "postcss-gap-properties": "^2.0.0", + "postcss-image-set-function": "^3.0.1", + "postcss-initial": "^3.0.0", + "postcss-lab-function": "^2.0.1", + "postcss-logical": "^3.0.0", + "postcss-media-minmax": "^4.0.0", + "postcss-nesting": "^7.0.0", + "postcss-overflow-shorthand": "^2.0.0", + "postcss-page-break": "^2.0.0", + "postcss-place": "^4.0.1", + "postcss-pseudo-class-any-link": "^6.0.0", + "postcss-replace-overflow-wrap": "^3.0.0", + "postcss-selector-matches": "^4.0.0", + "postcss-selector-not": "^4.0.0" + } + }, + "postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-safe-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", + "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "postcss-selector-not": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", + "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "pretty-bytes": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==" + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", + "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", + "requires": { + "asap": "~2.0.6" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prompts": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + } + } + }, + "react": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.10.2.tgz", + "integrity": "sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-app-polyfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.4.tgz", + "integrity": "sha512-5Vte6ki7jpNsNCUKaboyofAhmURmCn2Y6Hu7ydJ6Iu4dct1CIGoh/1FT7gUZKAbowVX2lxVPlijvp1nKxfAl4w==", + "requires": { + "core-js": "3.2.1", + "object-assign": "4.1.1", + "promise": "8.0.3", + "raf": "3.4.1", + "regenerator-runtime": "0.13.3", + "whatwg-fetch": "3.0.0" + } + }, + "react-dev-utils": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.1.0.tgz", + "integrity": "sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg==", + "requires": { + "@babel/code-frame": "7.5.5", + "address": "1.1.2", + "browserslist": "4.7.0", + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "1.0.5", + "filesize": "3.6.1", + "find-up": "3.0.0", + "fork-ts-checker-webpack-plugin": "1.5.0", + "global-modules": "2.0.0", + "globby": "8.0.2", + "gzip-size": "5.1.1", + "immer": "1.10.0", + "inquirer": "6.5.0", + "is-root": "2.1.0", + "loader-utils": "1.2.3", + "open": "^6.3.0", + "pkg-up": "2.0.0", + "react-error-overlay": "^6.0.3", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "sockjs-client": "1.4.0", + "strip-ansi": "5.2.0", + "text-table": "0.2.0" + }, + "dependencies": { + "inquirer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", + "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + } + } + }, + "react-dom": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.2.tgz", + "integrity": "sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.16.2" + } + }, + "react-error-overlay": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.3.tgz", + "integrity": "sha512-bOUvMWFQVk5oz8Ded9Xb7WVdEi3QGLC8tH7HmYP0Fdp4Bn3qw0tRFmr5TW6mvahzvmrK4a6bqWGfCevBflP+Xw==" + }, + "react-is": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", + "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==" + }, + "react-scripts": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.2.0.tgz", + "integrity": "sha512-6LzuKbE2B4eFQG6i1FnTScn9HDcWBfXXnOwW9xKFPJ/E3rK8i1ufbOZ0ocKyRPxJAKdN7iqg3i7lt0+oxkSVOA==", + "requires": { + "@babel/core": "7.6.0", + "@svgr/webpack": "4.3.2", + "@typescript-eslint/eslint-plugin": "^2.2.0", + "@typescript-eslint/parser": "^2.2.0", + "babel-eslint": "10.0.3", + "babel-jest": "^24.9.0", + "babel-loader": "8.0.6", + "babel-plugin-named-asset-import": "^0.3.4", + "babel-preset-react-app": "^9.0.2", + "camelcase": "^5.2.0", + "case-sensitive-paths-webpack-plugin": "2.2.0", + "css-loader": "2.1.1", + "dotenv": "6.2.0", + "dotenv-expand": "5.1.0", + "eslint": "^6.1.0", + "eslint-config-react-app": "^5.0.2", + "eslint-loader": "3.0.2", + "eslint-plugin-flowtype": "3.13.0", + "eslint-plugin-import": "2.18.2", + "eslint-plugin-jsx-a11y": "6.2.3", + "eslint-plugin-react": "7.14.3", + "eslint-plugin-react-hooks": "^1.6.1", + "file-loader": "3.0.1", + "fs-extra": "7.0.1", + "fsevents": "2.0.7", + "html-webpack-plugin": "4.0.0-beta.5", + "identity-obj-proxy": "3.0.0", + "is-wsl": "^1.1.0", + "jest": "24.9.0", + "jest-environment-jsdom-fourteen": "0.1.0", + "jest-resolve": "24.9.0", + "jest-watch-typeahead": "0.4.0", + "mini-css-extract-plugin": "0.8.0", + "optimize-css-assets-webpack-plugin": "5.0.3", + "pnp-webpack-plugin": "1.5.0", + "postcss-flexbugs-fixes": "4.1.0", + "postcss-loader": "3.0.0", + "postcss-normalize": "7.0.1", + "postcss-preset-env": "6.7.0", + "postcss-safe-parser": "4.0.1", + "react-app-polyfill": "^1.0.4", + "react-dev-utils": "^9.1.0", + "resolve": "1.12.0", + "resolve-url-loader": "3.1.0", + "sass-loader": "7.2.0", + "semver": "6.3.0", + "style-loader": "1.0.0", + "terser-webpack-plugin": "1.4.1", + "ts-pnp": "1.1.4", + "url-loader": "2.1.0", + "webpack": "4.41.0", + "webpack-dev-server": "3.2.1", + "webpack-manifest-plugin": "2.1.1", + "workbox-webpack-plugin": "4.3.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "requires": { + "util.promisify": "^1.0.0" + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "requires": { + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "requires": { + "define-properties": "^1.1.2" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "resolve-url-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.0.tgz", + "integrity": "sha512-2QcrA+2QgVqsMJ1Hn5NnJXIGCX1clQ1F6QJTqOeiaDw9ACo1G2k+8/shq3mtqne03HOFyskAClqfxKyFBriXZg==", + "requires": { + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.0.0", + "compose-function": "3.0.3", + "convert-source-map": "1.6.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.14", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sass-loader": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.2.0.tgz", + "integrity": "sha512-h8yUWaWtsbuIiOCgR9fd9c2lRXZ2uG+h8Dzg/AGNj+Hg/3TO8+BBAW9mEP+mh8ei+qBKqSJ0F1FLlYjNBc61OA==", + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.0.1", + "neo-async": "^2.5.0", + "pify": "^4.0.1", + "semver": "^5.5.0" + }, + "dependencies": { + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "requires": { + "xmlchars": "^2.1.1" + } + }, + "scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==" + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "requires": { + "is-buffer": "^1.0.2" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sisteransi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==" + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-comments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", + "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", + "requires": { + "babel-extract-comments": "^1.0.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + }, + "style-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz", + "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svg-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.2.tgz", + "integrity": "sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg==" + }, + "svgo": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.33", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "terser": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.7.tgz", + "integrity": "sha512-rJFxzWIzJdgiOwYIPJHu6L3hDegEYJj2cHuKcngMraUfhMXGDEbok9Tqjw7yxzrU4IagvG74uTEKdiqeG6T7bg==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==" + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "requires": { + "punycode": "^2.1.0" + } + }, + "ts-pnp": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.4.tgz", + "integrity": "sha512-1J/vefLC+BWSo+qe8OnJQfWTYRS6ingxjwqmHMqaMxXMj7kFtKLgAaYW3JeX3mktjgUL+etlU8/B4VUAUI9QGw==" + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.1.0.tgz", + "integrity": "sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A==", + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.x" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "webpack": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz", + "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==", + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz", + "integrity": "sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw==", + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^4.1.1", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.2.0", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "semver": "^5.6.0", + "serve-index": "^1.7.2", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.5.1", + "webpack-log": "^2.0.0", + "yargs": "12.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "requires": { + "xregexp": "4.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-manifest-plugin": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.1.1.tgz", + "integrity": "sha512-2zqJ6mvc3yoiqfDjghAIpljhLSDh/G7vqGrzYcYqqRCd/ZZZCAuc/YPE5xG0LGpLgDJRhUNV1H+znyyhIxahzA==", + "requires": { + "fs-extra": "^7.0.0", + "lodash": ">=3.5 <5", + "object.entries": "^1.1.0", + "tapable": "^1.0.0" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "workbox-background-sync": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", + "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-broadcast-update": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", + "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-build": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", + "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", + "requires": { + "@babel/runtime": "^7.3.4", + "@hapi/joi": "^15.0.0", + "common-tags": "^1.8.0", + "fs-extra": "^4.0.2", + "glob": "^7.1.3", + "lodash.template": "^4.4.0", + "pretty-bytes": "^5.1.0", + "stringify-object": "^3.3.0", + "strip-comments": "^1.0.2", + "workbox-background-sync": "^4.3.1", + "workbox-broadcast-update": "^4.3.1", + "workbox-cacheable-response": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-expiration": "^4.3.1", + "workbox-google-analytics": "^4.3.1", + "workbox-navigation-preload": "^4.3.1", + "workbox-precaching": "^4.3.1", + "workbox-range-requests": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1", + "workbox-streams": "^4.3.1", + "workbox-sw": "^4.3.1", + "workbox-window": "^4.3.1" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "workbox-cacheable-response": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", + "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-core": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", + "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" + }, + "workbox-expiration": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", + "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-google-analytics": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", + "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", + "requires": { + "workbox-background-sync": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1" + } + }, + "workbox-navigation-preload": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", + "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-precaching": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", + "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-range-requests": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", + "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-routing": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", + "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-strategies": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", + "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-streams": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", + "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-sw": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", + "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" + }, + "workbox-webpack-plugin": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", + "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "json-stable-stringify": "^1.0.1", + "workbox-build": "^4.3.1" + } + }, + "workbox-window": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", + "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "requires": { + "microevent.ts": "~0.1.1" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/app/package.json b/app/package.json new file mode 100644 index 00000000..9b3572c7 --- /dev/null +++ b/app/package.json @@ -0,0 +1,31 @@ +{ + "name": "app", + "version": "0.1.0", + "private": true, + "dependencies": { + "react": "^16.10.2", + "react-dom": "^16.10.2", + "react-scripts": "3.2.0" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/app/public/favicon.ico b/app/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c2c86b859eaa20639adf92ff979c2be8d580433e GIT binary patch literal 22382 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 QPNaAH_W=L@JAozeZ|l@fegFUf literal 0 HcmV?d00001 diff --git a/app/public/index.html b/app/public/index.html new file mode 100644 index 00000000..512afc9e --- /dev/null +++ b/app/public/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + + React App + + + +
+ + diff --git a/app/public/logo192.png b/app/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fa313abf53936aefc517dbd583b724a57199d415 GIT binary patch literal 8581 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�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 b!B~?t+WWKS5u5)CcMJGaRz{_UZlwPKNp@r} literal 0 HcmV?d00001 diff --git a/app/public/manifest.json b/app/public/manifest.json new file mode 100644 index 00000000..080d6c77 --- /dev/null +++ b/app/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/app/public/robots.txt b/app/public/robots.txt new file mode 100644 index 00000000..01b0f9a1 --- /dev/null +++ b/app/public/robots.txt @@ -0,0 +1,2 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * diff --git a/app/src/App.css b/app/src/App.css new file mode 100644 index 00000000..898b610b --- /dev/null +++ b/app/src/App.css @@ -0,0 +1,59 @@ +h1 { + text-align: center; + font-size: 75px; + margin-block-start: 0em; + margin-block-end: 0.11em; +} + +.App-logo { + height: 40vmin; +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #09d3ac; +} + +#card { + height: 50px; + border-radius: 8px; + width: 100px; + margin: 20px; +} + +#card.button:hover { + background-color: gray; + cursor: pointer; +} + +#chat { + margin-top: 30%; + margin-left: 65%; +} + +#msg { + resize: none; + width: 125px; +} + +#btn { + width: 65px; +} + +#btn:hover { + cursor: pointer; +} + +.game-board { + float: left; + margin-left: 5%; +} diff --git a/app/src/App.js b/app/src/App.js new file mode 100644 index 00000000..e7f24d44 --- /dev/null +++ b/app/src/App.js @@ -0,0 +1,176 @@ +import React from "react"; +import "./App.css"; + +//would normally come from database but this is for testing +//list of ALL words +let allWords = [ + "wall", + "back", + "orange", + "crash", + "hawk", + "kiwi", + "lab", + "ice cream", + "india", + "theater", + "plane", + "parachute", + "telescope", + "match", + "police", + "post", + "ray", + "kid", + "wind", + "box", + "knife", + "church", + "bell", + "lemon", + "triangle", + "cap", + "jam", + "organ", + "engine", + "agent", + "buck", + "day", + "doctor", + "ball" +]; + +function App() { + return ( +

+
+ +
+
+ ); +} + +class Card extends React.Component { + render() { + return ( + + ); + } +} + +class Chat extends React.Component { + render() { + return ( +
+ + + +
+ ); + } +} + +class Board extends React.Component { + constructor(props) { + super(props); + this.state = { + words: this.props.words + }; + } + + renderCard(i) { + return ; + } + + render() { + return ( +
+
+ {this.renderCard(0)} + {this.renderCard(1)} + {this.renderCard(2)} + {this.renderCard(3)} + {this.renderCard(4)} +
+
+ {this.renderCard(5)} + {this.renderCard(6)} + {this.renderCard(7)} + {this.renderCard(8)} + {this.renderCard(9)} +
+
+ {this.renderCard(10)} + {this.renderCard(11)} + {this.renderCard(12)} + {this.renderCard(13)} + {this.renderCard(14)} +
+
+ {this.renderCard(15)} + {this.renderCard(16)} + {this.renderCard(17)} + {this.renderCard(18)} + {this.renderCard(19)} +
+
+ {this.renderCard(20)} + {this.renderCard(21)} + {this.renderCard(22)} + {this.renderCard(23)} + {this.renderCard(24)} +
+
+ ); + } +} + +class Game extends React.Component { + constructor(props) { + super(props); + let ingameCards = setBoard(); + this.state = { + boardWords: ingameCards + }; + } + + render() { + return ( +
+

Codenames

+
+ +
+
+ +
+
+ ); + } +} + +//takes full list of words and picks 25 unique for a game +function setBoard() { + let boardWords = Array(25).fill(null); + for (let i = 0; i < 25; i++) { + let useCheck = false; + let counter = Math.floor(Math.random() * allWords.length); + for (let j = 0; j < boardWords.length; j++) { + if (boardWords[j] === allWords[counter]) { + useCheck = true; + } + } + if (useCheck === false) { + boardWords[i] = allWords[counter]; + } else { + i--; + } + } + return boardWords; +} + +export default App; diff --git a/app/src/App.test.js b/app/src/App.test.js new file mode 100644 index 00000000..a754b201 --- /dev/null +++ b/app/src/App.test.js @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +it('renders without crashing', () => { + const div = document.createElement('div'); + ReactDOM.render(, div); + ReactDOM.unmountComponentAtNode(div); +}); diff --git a/app/src/index.css b/app/src/index.css new file mode 100644 index 00000000..4a1df4db --- /dev/null +++ b/app/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", + "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", + monospace; +} diff --git a/app/src/index.js b/app/src/index.js new file mode 100644 index 00000000..978badd6 --- /dev/null +++ b/app/src/index.js @@ -0,0 +1,8 @@ +import React from "react"; +import ReactDOM from "react-dom"; +import "./index.css"; +import App from "./App"; +import * as serviceWorker from "./serviceWorker"; + +ReactDOM.render(, document.getElementById("root")); +serviceWorker.unregister(); diff --git a/app/src/serviceWorker.js b/app/src/serviceWorker.js new file mode 100644 index 00000000..f8c7e50c --- /dev/null +++ b/app/src/serviceWorker.js @@ -0,0 +1,135 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.1/8 is considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready.then(registration => { + registration.unregister(); + }); + } +} From 85efd2e2b5baf79027c432b42b4714e240d5bd4f Mon Sep 17 00:00:00 2001 From: Levy Date: Mon, 7 Oct 2019 17:36:33 -0400 Subject: [PATCH 07/46] randomize card teams and order --- app/src/App.css | 4 +++ app/src/App.js | 92 ++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/app/src/App.css b/app/src/App.css index 898b610b..40c86cbc 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -57,3 +57,7 @@ h1 { float: left; margin-left: 5%; } + +.status { + text-align: center; +} diff --git a/app/src/App.js b/app/src/App.js index e7f24d44..b9aa5b61 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -51,9 +51,34 @@ function App() { } class Card extends React.Component { + constructor(props) { + super(props); + this.changeStyle = this.changeStyle.bind(this); + let cardColor = "white"; + if (this.props.team === "teamA") { + cardColor = "red"; + } else if (this.props.team === "teamB") { + cardColor = "blue"; + } else if (this.props.team === "assassin") { + cardColor = "black"; + } + this.state = { color: null, cardColor: cardColor }; + } + + changeStyle(color) { + this.setState({ + color: this.state.cardColor + }); + } + render() { return ( - ); @@ -78,12 +103,13 @@ class Board extends React.Component { constructor(props) { super(props); this.state = { - words: this.props.words + words: this.props.words, + teams: this.props.teams }; } renderCard(i) { - return ; + return ; } render() { @@ -132,30 +158,50 @@ class Board extends React.Component { class Game extends React.Component { constructor(props) { super(props); - let ingameCards = setBoard(); + let firstteam = Math.floor(Math.random() * 2); + let ingame = setBoard(firstteam); + let ingameCards = ingame[0]; + let ingameTeams = ingame[1]; + this.state = { - boardWords: ingameCards + boardWords: ingameCards, + boardTeams: ingameTeams, + firstteam: firstteam }; } render() { + let status; + let order = this.state.firstteam; + if (order) { + status = "Red Team"; + } else { + status = "Blue Team"; + } return (

Codenames

- +
+
+
+
{status} goes first
+
); } } //takes full list of words and picks 25 unique for a game -function setBoard() { +function setBoard(order) { let boardWords = Array(25).fill(null); + let boardTeams = Array(25).fill(null); + + //for setting board words for (let i = 0; i < 25; i++) { let useCheck = false; let counter = Math.floor(Math.random() * allWords.length); @@ -170,7 +216,37 @@ function setBoard() { i--; } } - return boardWords; + + //for words to teams + setTeam("teamA", order); + setTeam("teamB", order); + setTeam("assassin", order); + setTeam("citizen", order); + + function setTeam(type, order) { + let amount = 7; + if (type === "assassin") { + amount = 1; + } + if ( + (order === 0 && type === "teamA") || + (order === 1 && type === "teamB") + ) { + amount += 2; + } else if (order === "second") { + amount++; + } + for (let j = 0; j < amount; j++) { + let counter = Math.floor(Math.random() * 25); + if (boardTeams[counter] == null) { + boardTeams[counter] = type; + } else { + j--; + } + } + } + + return [boardWords, boardTeams]; } export default App; From 3c8c5e1fbabb394834e3f9dcc4a6b05be9e7d7ec Mon Sep 17 00:00:00 2001 From: Levy Date: Tue, 8 Oct 2019 15:31:00 -0400 Subject: [PATCH 08/46] chatbox --- app/public/index.html | 2 +- app/public/manifest.json | 4 ++-- app/src/App.css | 14 +++++++++++++- app/src/App.js | 24 +++++++++++++++++++----- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/public/index.html b/app/public/index.html index 512afc9e..d6723ea2 100644 --- a/app/public/index.html +++ b/app/public/index.html @@ -11,7 +11,7 @@ /> - React App + Codenames diff --git a/app/public/manifest.json b/app/public/manifest.json index 080d6c77..18a8117a 100644 --- a/app/public/manifest.json +++ b/app/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "React App", - "name": "Create React App Sample", + "short_name": "Codenames", + "name": "Codenames", "icons": [ { "src": "favicon.ico", diff --git a/app/src/App.css b/app/src/App.css index 40c86cbc..3ea95517 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -36,7 +36,7 @@ h1 { } #chat { - margin-top: 30%; + margin-top: 30px; margin-left: 65%; } @@ -61,3 +61,15 @@ h1 { .status { text-align: center; } + +.chat-container { + height: 345px; + width: 292px; + color: black; + background-color: #dbd4d4; + padding: 15px; +} + +.clue { + margin-left: 10px; +} diff --git a/app/src/App.js b/app/src/App.js index b9aa5b61..184d644f 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -89,8 +89,18 @@ class Chat extends React.Component { render() { return (
- - +
+
+
+ User: Clue Amount +
+
+ User: Clue Amount +
+
+
+ + @@ -173,7 +183,7 @@ class Game extends React.Component { render() { let status; let order = this.state.firstteam; - if (order) { + if (!order) { status = "Red Team"; } else { status = "Blue Team"; @@ -189,8 +199,9 @@ class Game extends React.Component {
-
{status} goes first
+
{status}'s Turn
+
); } @@ -233,7 +244,10 @@ function setBoard(order) { (order === 1 && type === "teamB") ) { amount += 2; - } else if (order === "second") { + } else if ( + (order === 1 && type === "teamA") || + (order === 0 && type === "teamB") + ) { amount++; } for (let j = 0; j < amount; j++) { From 4a5f58f1f82add7dacaef16e14122aa56ad4c65d Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Tue, 8 Oct 2019 23:07:06 -0400 Subject: [PATCH 09/46] Improve DOM --- app/src/App.css | 138 ++++++++++++--- app/src/App.js | 448 ++++++++++++++++++++++++------------------------ 2 files changed, 336 insertions(+), 250 deletions(-) diff --git a/app/src/App.css b/app/src/App.css index 3ea95517..e8d790b6 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -1,55 +1,146 @@ -h1 { - text-align: center; - font-size: 75px; - margin-block-start: 0em; - margin-block-end: 0.11em; +* { + box-sizing: border-box; +} + +#root { + height: 100vh; } +.App { + background-color:#282c34; + display: flex; + flex-flow: column; + height: 100%; +} .App-logo { height: 40vmin; } .App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; + min-height: 10vh; + display:flex; + flex: 0 1 auto; justify-content: center; font-size: calc(10px + 2vmin); color: white; + margin: 25px 0; +} +h1 { + text-align: center; + font-size: 75px; + margin-block-start: 0em; + margin-block-end: 0.11em; } .App-link { color: #09d3ac; } -#card { - height: 50px; +.game { + flex: 1 1 auto; + display: flex; +} + +.board { + margin-left: 5%; + width: 45%; + height: 70%; + display: flex; + flex-direction: column; + justify-content: space-between; + align-content: space-between; +} + +.board-row { + display: flex; + flex-flow: row nowrap; + justify-content: space-between; + align-items: stretch; +} + +.card { + height: 100px; border-radius: 8px; - width: 100px; - margin: 20px; + flex: 0 150px; + font-size: x-large; + min-width: 0; + overflow-wrap: break-word; } -#card.button:hover { +.card.button:hover { background-color: gray; cursor: pointer; } -#chat { - margin-top: 30px; - margin-left: 65%; +.chat { + display: flex; + flex-direction: column; + width: 50%; + align-items: center; + justify-content: space-between; + height: 70%; } -#msg { +.chat-container { + position: relative; + width: 70%; + height: 100%; + color: black; + background-color: whitesmoke; + padding: 2%; + border-radius: 8px; +} + + +.hintSubmission { + position: absolute; + bottom: 2%; + left: 0; + padding-top: 2%; + display: flex; + flex-direction: row; + background: whitesmoke; + height: 10%; + width: 96%; + margin: 0 2%; + border-top: 2px black solid; +} +input { + background: rgba(0, 0, 0, 0) none repeat scroll 0 0; + border: medium none; + color: #4c4c4c; + font-size: x-large; + width: 50%; + padding-left: 5%; +} + +.amountInput { + width: 50%; + display:flex; + flex-wrap: wrap; +} + +.amount { + text-align: center; + align-content: center; + width: 20% +} + +.amount:hover { + cursor: pointer; + background: cornsilk; +} + +.msg { resize: none; width: 125px; } -#btn { +.btn { width: 65px; } -#btn:hover { +.btn:hover { cursor: pointer; } @@ -62,13 +153,6 @@ h1 { text-align: center; } -.chat-container { - height: 345px; - width: 292px; - color: black; - background-color: #dbd4d4; - padding: 15px; -} .clue { margin-left: 10px; diff --git a/app/src/App.js b/app/src/App.js index 184d644f..312ec04e 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -4,263 +4,265 @@ import "./App.css"; //would normally come from database but this is for testing //list of ALL words let allWords = [ - "wall", - "back", - "orange", - "crash", - "hawk", - "kiwi", - "lab", - "ice cream", - "india", - "theater", - "plane", - "parachute", - "telescope", - "match", - "police", - "post", - "ray", - "kid", - "wind", - "box", - "knife", - "church", - "bell", - "lemon", - "triangle", - "cap", - "jam", - "organ", - "engine", - "agent", - "buck", - "day", - "doctor", - "ball" + "wall", + "back", + "orange", + "crash", + "hawk", + "kiwi", + "lab", + "ice cream", + "india", + "theater", + "plane", + "parachute", + "telescope", + "match", + "police", + "post", + "ray", + "kid", + "wind", + "box", + "knife", + "church", + "bell", + "lemon", + "triangle", + "cap", + "jam", + "organ", + "engine", + "agent", + "buck", + "day", + "doctor", + "ball" ]; function App() { - return ( -
-
- -
-
- ); + return ( +
+
+

Codenames

+
+ +
+ ); } class Card extends React.Component { - constructor(props) { - super(props); - this.changeStyle = this.changeStyle.bind(this); - let cardColor = "white"; - if (this.props.team === "teamA") { - cardColor = "red"; - } else if (this.props.team === "teamB") { - cardColor = "blue"; - } else if (this.props.team === "assassin") { - cardColor = "black"; + constructor(props) { + super(props); + this.changeStyle = this.changeStyle.bind(this); + let cardColor = "tan"; + if (this.props.team === "teamA") { + cardColor = "red"; + } else if (this.props.team === "teamB") { + cardColor = "blue"; + } else if (this.props.team === "assassin") { + cardColor = "black"; + } + this.state = {color: null, cardColor: cardColor}; } - this.state = { color: null, cardColor: cardColor }; - } - changeStyle(color) { - this.setState({ - color: this.state.cardColor - }); - } + changeStyle(color) { + this.setState({ + color: this.state.cardColor + }); + } - render() { - return ( - - ); - } + render() { + return ( + + ); + } } class Chat extends React.Component { - render() { - return ( - -
-
-
- User: Clue Amount -
-
- User: Clue Amount + render() { + return ( +
+
+
+ User: Clue Amount +
+
+ User: Clue Amount +
+
+ +
+
0
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
+
+
+
-
-
- - - - - ); - } + + ); + } } class Board extends React.Component { - constructor(props) { - super(props); - this.state = { - words: this.props.words, - teams: this.props.teams - }; - } + constructor(props) { + super(props); + this.state = { + words: this.props.words, + teams: this.props.teams + }; + } - renderCard(i) { - return ; - } + renderCard(i) { + return ; + } - render() { - return ( -
-
- {this.renderCard(0)} - {this.renderCard(1)} - {this.renderCard(2)} - {this.renderCard(3)} - {this.renderCard(4)} -
-
- {this.renderCard(5)} - {this.renderCard(6)} - {this.renderCard(7)} - {this.renderCard(8)} - {this.renderCard(9)} -
-
- {this.renderCard(10)} - {this.renderCard(11)} - {this.renderCard(12)} - {this.renderCard(13)} - {this.renderCard(14)} -
-
- {this.renderCard(15)} - {this.renderCard(16)} - {this.renderCard(17)} - {this.renderCard(18)} - {this.renderCard(19)} -
-
- {this.renderCard(20)} - {this.renderCard(21)} - {this.renderCard(22)} - {this.renderCard(23)} - {this.renderCard(24)} -
-
- ); - } + render() { + return ( +
+
+ {this.renderCard(0)} + {this.renderCard(1)} + {this.renderCard(2)} + {this.renderCard(3)} + {this.renderCard(4)} +
+
+ {this.renderCard(5)} + {this.renderCard(6)} + {this.renderCard(7)} + {this.renderCard(8)} + {this.renderCard(9)} +
+
+ {this.renderCard(10)} + {this.renderCard(11)} + {this.renderCard(12)} + {this.renderCard(13)} + {this.renderCard(14)} +
+
+ {this.renderCard(15)} + {this.renderCard(16)} + {this.renderCard(17)} + {this.renderCard(18)} + {this.renderCard(19)} +
+
+ {this.renderCard(20)} + {this.renderCard(21)} + {this.renderCard(22)} + {this.renderCard(23)} + {this.renderCard(24)} +
+
+ ); + } } class Game extends React.Component { - constructor(props) { - super(props); - let firstteam = Math.floor(Math.random() * 2); - let ingame = setBoard(firstteam); - let ingameCards = ingame[0]; - let ingameTeams = ingame[1]; + constructor(props) { + super(props); + let firstteam = Math.floor(Math.random() * 2); + let ingame = setBoard(firstteam); + let ingameCards = ingame[0]; + let ingameTeams = ingame[1]; - this.state = { - boardWords: ingameCards, - boardTeams: ingameTeams, - firstteam: firstteam - }; - } + this.state = { + boardWords: ingameCards, + boardTeams: ingameTeams, + firstteam: firstteam + }; + } - render() { - let status; - let order = this.state.firstteam; - if (!order) { - status = "Red Team"; - } else { - status = "Blue Team"; + render() { + let status; + let order = this.state.firstteam; + if (!order) { + status = "Red Team"; + } else { + status = "Blue Team"; + } + return ( +
+ + +
+
+
+ ); } - return ( -
-

Codenames

-
- -
-
- -
-
-
-
{status}'s Turn
-
-
-
- ); - } } //takes full list of words and picks 25 unique for a game function setBoard(order) { - let boardWords = Array(25).fill(null); - let boardTeams = Array(25).fill(null); + let boardWords = Array(25).fill(null); + let boardTeams = Array(25).fill(null); - //for setting board words - for (let i = 0; i < 25; i++) { - let useCheck = false; - let counter = Math.floor(Math.random() * allWords.length); - for (let j = 0; j < boardWords.length; j++) { - if (boardWords[j] === allWords[counter]) { - useCheck = true; - } - } - if (useCheck === false) { - boardWords[i] = allWords[counter]; - } else { - i--; + //for setting board words + for (let i = 0; i < 25; i++) { + let useCheck = false; + let counter = Math.floor(Math.random() * allWords.length); + for (let j = 0; j < boardWords.length; j++) { + if (boardWords[j] === allWords[counter]) { + useCheck = true; + } + } + if (useCheck === false) { + boardWords[i] = allWords[counter]; + } else { + i--; + } } - } - //for words to teams - setTeam("teamA", order); - setTeam("teamB", order); - setTeam("assassin", order); - setTeam("citizen", order); + //for words to teams + setTeam("teamA", order); + setTeam("teamB", order); + setTeam("assassin", order); + setTeam("citizen", order); - function setTeam(type, order) { - let amount = 7; - if (type === "assassin") { - amount = 1; - } - if ( - (order === 0 && type === "teamA") || - (order === 1 && type === "teamB") - ) { - amount += 2; - } else if ( - (order === 1 && type === "teamA") || - (order === 0 && type === "teamB") - ) { - amount++; - } - for (let j = 0; j < amount; j++) { - let counter = Math.floor(Math.random() * 25); - if (boardTeams[counter] == null) { - boardTeams[counter] = type; - } else { - j--; - } + function setTeam(type, order) { + let amount = 7; + if (type === "assassin") { + amount = 1; + } + if ( + (order === 0 && type === "teamA") || + (order === 1 && type === "teamB") + ) { + amount += 2; + } else if ( + (order === 1 && type === "teamA") || + (order === 0 && type === "teamB") + ) { + amount++; + } + for (let j = 0; j < amount; j++) { + let counter = Math.floor(Math.random() * 25); + if (boardTeams[counter] == null) { + boardTeams[counter] = type; + } else { + j--; + } + } } - } - return [boardWords, boardTeams]; + return [boardWords, boardTeams]; } export default App; From 45d6da9d9d410069adc0c8933da982186a793199 Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Wed, 9 Oct 2019 11:06:46 -0400 Subject: [PATCH 10/46] Final touches to UI --- app/src/App.css | 27 ++- app/src/App.js | 456 ++++++++++++++++++++++++------------------------ 2 files changed, 250 insertions(+), 233 deletions(-) diff --git a/app/src/App.css b/app/src/App.css index e8d790b6..26f30867 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -10,14 +10,14 @@ background-color:#282c34; display: flex; flex-flow: column; - height: 100%; + min-height: 100%; } .App-logo { height: 40vmin; } .App-header { - min-height: 10vh; + min-height: 15vh; display:flex; flex: 0 1 auto; justify-content: center; @@ -56,12 +56,13 @@ h1 { flex-flow: row nowrap; justify-content: space-between; align-items: stretch; + height: 15%; } .card { - height: 100px; + height: 100%; border-radius: 8px; - flex: 0 150px; + flex: 0 1 17%; font-size: x-large; min-width: 0; overflow-wrap: break-word; @@ -94,13 +95,12 @@ h1 { .hintSubmission { position: absolute; - bottom: 2%; + bottom: 0; left: 0; - padding-top: 2%; + padding: 2%; display: flex; flex-direction: row; background: whitesmoke; - height: 10%; width: 96%; margin: 0 2%; border-top: 2px black solid; @@ -123,14 +123,25 @@ input { .amount { text-align: center; align-content: center; - width: 20% + width: 20%; + font-size: x-large; } + .amount:hover { cursor: pointer; background: cornsilk; } +.amount.disabled { + color: lightgray; +} +.amount.disabled:hover { + cursor: default; + background: whitesmoke; +} + + .msg { resize: none; width: 125px; diff --git a/app/src/App.js b/app/src/App.js index 312ec04e..0842e2c9 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -1,268 +1,274 @@ -import React from "react"; -import "./App.css"; +import React from 'react'; +import './App.css'; //would normally come from database but this is for testing //list of ALL words let allWords = [ - "wall", - "back", - "orange", - "crash", - "hawk", - "kiwi", - "lab", - "ice cream", - "india", - "theater", - "plane", - "parachute", - "telescope", - "match", - "police", - "post", - "ray", - "kid", - "wind", - "box", - "knife", - "church", - "bell", - "lemon", - "triangle", - "cap", - "jam", - "organ", - "engine", - "agent", - "buck", - "day", - "doctor", - "ball" + 'wall', + 'back', + 'orange', + 'crash', + 'hawk', + 'kiwi', + 'lab', + 'ice cream', + 'india', + 'theater', + 'plane', + 'parachute', + 'telescope', + 'match', + 'police', + 'post', + 'ray', + 'kid', + 'wind', + 'box', + 'knife', + 'church', + 'bell', + 'lemon', + 'triangle', + 'cap', + 'jam', + 'organ', + 'engine', + 'agent', + 'buck', + 'day', + 'doctor', + 'ball', ]; function App() { - return ( -
-
-

Codenames

-
- -
- ); + return ( +
+
+

Codenames

+
+ +
+ ); } class Card extends React.Component { - constructor(props) { - super(props); - this.changeStyle = this.changeStyle.bind(this); - let cardColor = "tan"; - if (this.props.team === "teamA") { - cardColor = "red"; - } else if (this.props.team === "teamB") { - cardColor = "blue"; - } else if (this.props.team === "assassin") { - cardColor = "black"; - } - this.state = {color: null, cardColor: cardColor}; + constructor(props) { + super(props); + this.changeStyle = this.changeStyle.bind(this); + let cardColor = 'tan'; + if (this.props.team === 'teamA') { + cardColor = 'red'; + } else if (this.props.team === 'teamB') { + cardColor = 'blue'; + } else if (this.props.team === 'assassin') { + cardColor = 'black'; } + this.state = {color: null, cardColor: cardColor}; + } - changeStyle(color) { - this.setState({ - color: this.state.cardColor - }); - } + changeStyle(color) { + this.setState({ + color: this.state.cardColor, + }); + } - render() { - return ( - - ); - } + render() { + return ( + + ); + } } class Chat extends React.Component { - render() { - return ( -
-
-
- User: Clue Amount -
-
- User: Clue Amount -
-
- -
-
0
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
-
-
-
+ constructor(props) { + super(props); + this.state = { + wordsLeft: props.wordsLeft, + log: props.log + } + } - ); + createAmounts() { + let table = []; + for (let i = 0; i < 10; i++) { + table.push(
{i}
) } + return table; + } + + + render() { + return ( +
+
+ {this.state.log.map((clue) => { + return
{clue.hint}
+ })} +
+ +
+ {this.createAmounts()} +
+
+
+ +
+ + ); + } } class Board extends React.Component { - constructor(props) { - super(props); - this.state = { - words: this.props.words, - teams: this.props.teams - }; - } + constructor(props) { + super(props); + this.state = { + words: this.props.words, + teams: this.props.teams, + }; + } - renderCard(i) { - return ; - } + renderCard(i) { + return ; + } - render() { - return ( -
-
- {this.renderCard(0)} - {this.renderCard(1)} - {this.renderCard(2)} - {this.renderCard(3)} - {this.renderCard(4)} -
-
- {this.renderCard(5)} - {this.renderCard(6)} - {this.renderCard(7)} - {this.renderCard(8)} - {this.renderCard(9)} -
-
- {this.renderCard(10)} - {this.renderCard(11)} - {this.renderCard(12)} - {this.renderCard(13)} - {this.renderCard(14)} -
-
- {this.renderCard(15)} - {this.renderCard(16)} - {this.renderCard(17)} - {this.renderCard(18)} - {this.renderCard(19)} -
-
- {this.renderCard(20)} - {this.renderCard(21)} - {this.renderCard(22)} - {this.renderCard(23)} - {this.renderCard(24)} -
-
- ); - } + render() { + return ( +
+
+ {this.renderCard(0)} + {this.renderCard(1)} + {this.renderCard(2)} + {this.renderCard(3)} + {this.renderCard(4)} +
+
+ {this.renderCard(5)} + {this.renderCard(6)} + {this.renderCard(7)} + {this.renderCard(8)} + {this.renderCard(9)} +
+
+ {this.renderCard(10)} + {this.renderCard(11)} + {this.renderCard(12)} + {this.renderCard(13)} + {this.renderCard(14)} +
+
+ {this.renderCard(15)} + {this.renderCard(16)} + {this.renderCard(17)} + {this.renderCard(18)} + {this.renderCard(19)} +
+
+ {this.renderCard(20)} + {this.renderCard(21)} + {this.renderCard(22)} + {this.renderCard(23)} + {this.renderCard(24)} +
+
+ ); + } } class Game extends React.Component { - constructor(props) { - super(props); - let firstteam = Math.floor(Math.random() * 2); - let ingame = setBoard(firstteam); - let ingameCards = ingame[0]; - let ingameTeams = ingame[1]; + constructor(props) { + super(props); + let firstteam = Math.floor(Math.random() * 2); + let ingame = setBoard(firstteam); + let ingameCards = ingame[0]; + let ingameTeams = ingame[1]; - this.state = { - boardWords: ingameCards, - boardTeams: ingameTeams, - firstteam: firstteam - }; - } + this.state = { + boardWords: ingameCards, + boardTeams: ingameTeams, + firstteam: firstteam, + }; + } - render() { - let status; - let order = this.state.firstteam; - if (!order) { - status = "Red Team"; - } else { - status = "Blue Team"; - } - return ( -
- - -
-
-
- ); + render() { + let status; + let order = this.state.firstteam; + if (!order) { + status = 'Red Team'; + } else { + status = 'Blue Team'; } + return ( +
+ + +
+
+
+ ); + } } //takes full list of words and picks 25 unique for a game function setBoard(order) { - let boardWords = Array(25).fill(null); - let boardTeams = Array(25).fill(null); + let boardWords = Array(25).fill(null); + let boardTeams = Array(25).fill(null); - //for setting board words - for (let i = 0; i < 25; i++) { - let useCheck = false; - let counter = Math.floor(Math.random() * allWords.length); - for (let j = 0; j < boardWords.length; j++) { - if (boardWords[j] === allWords[counter]) { - useCheck = true; - } - } - if (useCheck === false) { - boardWords[i] = allWords[counter]; - } else { - i--; - } + //for setting board words + for (let i = 0; i < 25; i++) { + let useCheck = false; + let counter = Math.floor(Math.random() * allWords.length); + for (let j = 0; j < boardWords.length; j++) { + if (boardWords[j] === allWords[counter]) { + useCheck = true; + } + } + if (useCheck === false) { + boardWords[i] = allWords[counter]; + } else { + i--; } + } - //for words to teams - setTeam("teamA", order); - setTeam("teamB", order); - setTeam("assassin", order); - setTeam("citizen", order); + //for words to teams + setTeam('teamA', order); + setTeam('teamB', order); + setTeam('assassin', order); + setTeam('citizen', order); - function setTeam(type, order) { - let amount = 7; - if (type === "assassin") { - amount = 1; - } - if ( - (order === 0 && type === "teamA") || - (order === 1 && type === "teamB") - ) { - amount += 2; - } else if ( - (order === 1 && type === "teamA") || - (order === 0 && type === "teamB") - ) { - amount++; - } - for (let j = 0; j < amount; j++) { - let counter = Math.floor(Math.random() * 25); - if (boardTeams[counter] == null) { - boardTeams[counter] = type; - } else { - j--; - } - } + function setTeam(type, order) { + let amount = 7; + if (type === 'assassin') { + amount = 1; + } + if ( + (order === 0 && type === 'teamA') || + (order === 1 && type === 'teamB') + ) { + amount += 2; + } else if ( + (order === 1 && type === 'teamA') || + (order === 0 && type === 'teamB') + ) { + amount++; + } + for (let j = 0; j < amount; j++) { + let counter = Math.floor(Math.random() * 25); + if (boardTeams[counter] == null) { + boardTeams[counter] = type; + } else { + j--; + } } + } - return [boardWords, boardTeams]; + return [boardWords, boardTeams]; } export default App; From c8378842a5353bdaae24fcf6a1b823ddab1ad26f Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Wed, 9 Oct 2019 12:31:42 -0400 Subject: [PATCH 11/46] fix height in chrome --- app/src/App.css | 3 ++- app/src/App.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/App.css b/app/src/App.css index 26f30867..c6f3ae83 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -10,7 +10,7 @@ background-color:#282c34; display: flex; flex-flow: column; - min-height: 100%; + height: 100%; } .App-logo { height: 40vmin; @@ -39,6 +39,7 @@ h1 { .game { flex: 1 1 auto; display: flex; + height: 100%; } .board { diff --git a/app/src/App.js b/app/src/App.js index 0842e2c9..8e74b12f 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -98,7 +98,7 @@ class Chat extends React.Component { createAmounts() { let table = []; for (let i = 0; i < 10; i++) { - table.push(
{i}
) + table.push(
{i}
) } return table; } From 487e92d7d5419ef87ca1f40bbf206bebba445d25 Mon Sep 17 00:00:00 2001 From: dandaman2 Date: Wed, 9 Oct 2019 15:59:08 -0400 Subject: [PATCH 12/46] added basic socketing when buttons are clicked --- app/package-lock.json | 441 +++++++++++++++++++++++++++++++++++++++++- app/package.json | 12 +- app/public/index.html | 3 + app/server.js | 100 ++++++++++ app/src/App.js | 19 +- 5 files changed, 569 insertions(+), 6 deletions(-) create mode 100644 app/server.js diff --git a/app/package-lock.json b/app/package-lock.json index 33560ccd..53e95ec2 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1639,6 +1639,11 @@ } } }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", @@ -1781,6 +1786,11 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -2198,6 +2208,11 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2258,11 +2273,29 @@ } } }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -2276,6 +2309,14 @@ "tweetnacl": "^0.14.3" } }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -2286,6 +2327,11 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, "bluebird": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz", @@ -2594,6 +2640,11 @@ "caller-callsite": "^2.0.0" } }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", @@ -3381,11 +3432,21 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, "compose-function": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", @@ -3521,9 +3582,18 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-parser": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz", + "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } }, "cookie-signature": { "version": "1.0.6", @@ -3578,6 +3648,25 @@ "parse-json": "^4.0.0" } }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + }, + "dependencies": { + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + } + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -4369,6 +4458,74 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.0.tgz", + "integrity": "sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "0.3.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "ws": "^7.1.2" + }, + "dependencies": { + "ws": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.2.tgz", + "integrity": "sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg==", + "requires": { + "async-limiter": "^1.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", + "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", + "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, "enhanced-resolve": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", @@ -5091,6 +5248,11 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -5111,6 +5273,80 @@ } } }, + "express-session": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.16.2.tgz", + "integrity": "sha512-oy0sRsdw6n93E9wpCNWKRnSsxYnSDX9Dnr9mhZgqUEEorzcq5nshGYSZ4ZReHFhKQ80WI5iVUUSPW7u3GaKauw==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.1.2", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "express-socket.io-session": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/express-socket.io-session/-/express-socket.io-session-1.3.5.tgz", + "integrity": "sha512-ila9jN7Pu9OuNIDzkuW+ZChR2Y0TzyyFITT7xiOWCjuGCDUWioD382zqxI7HOaa8kIhfs3wTLOZMU9h6buuOFw==", + "requires": { + "cookie-parser": "~1.3.3", + "crc": "^3.3.0", + "debug": "~2.6.0" + }, + "dependencies": { + "cookie": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", + "integrity": "sha1-5zSlwUF/zkctWu+Cw4HKu2TRpDU=" + }, + "cookie-parser": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz", + "integrity": "sha1-nXVVcPtdF4kHcSJ6AjFNm+fPg1Y=", + "requires": { + "cookie": "0.1.3", + "cookie-signature": "1.0.6" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -5824,6 +6060,26 @@ } } }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -6181,6 +6437,11 @@ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, "infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -8269,6 +8530,33 @@ } } }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -8571,6 +8859,11 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -8949,6 +9242,22 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -10181,6 +10490,11 @@ "performance-now": "^2.1.0" } }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -11335,6 +11649,104 @@ "kind-of": "^3.2.0" } }, + "socket.io": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", + "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.4.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.3.0", + "socket.io-parser": "~3.4.0" + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + } + } + }, + "socket.io-parser": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz", + "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, "sockjs": { "version": "0.3.19", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", @@ -12003,6 +12415,11 @@ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -12152,6 +12569,14 @@ } } }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -13057,6 +13482,11 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", @@ -13114,6 +13544,11 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } } } diff --git a/app/package.json b/app/package.json index 9b3572c7..9af893d5 100644 --- a/app/package.json +++ b/app/package.json @@ -3,16 +3,24 @@ "version": "0.1.0", "private": true, "dependencies": { + "cookie-parser": "latest", + "express": "latest", + "express-session": "latest", + "express-socket.io-session": "latest", + "morgan": "latest", "react": "^16.10.2", "react-dom": "^16.10.2", - "react-scripts": "3.2.0" + "react-scripts": "3.2.0", + "socket.io": "latest", + "socket.io-client": "^2.3.0" }, "scripts": { - "start": "react-scripts start", + "start": "concurrently \"react-scripts start\" \"node server.js\"", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, + "proxy": "http://localhost:8080", "eslintConfig": { "extends": "react-app" }, diff --git a/app/public/index.html b/app/public/index.html index d6723ea2..398cf62e 100644 --- a/app/public/index.html +++ b/app/public/index.html @@ -14,6 +14,9 @@ Codenames + + +
diff --git a/app/server.js b/app/server.js new file mode 100644 index 00000000..18b6a3ef --- /dev/null +++ b/app/server.js @@ -0,0 +1,100 @@ +var express = require('express'); +var path = require('path'); +var cookieParser = require('cookie-parser'); +var logger = require('morgan'); +var app = express(); +var server = require('http').createServer(app); +var fs = require('fs'); +var session = require("express-session")({ + secret: "my-secret", + resave: true, + saveUninitialized: true + }), + sharedsession = require("express-socket.io-session"); +var socketio = require('socket.io'); +var io = socketio.listen(server); +io.use(sharedsession(session)); + +app.use(logger('dev')); +app.use(session); +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.applyPort = function(port){ + server.listen(port); + let message = "listening on port: " + port; + console.log(message); +}; +app.applyPort(8080); + +module.exports = app; + +///connections and usages +var clientList = []; + +io.on("connect", function(client){ + //clients.push(client); + console.log(client.id); + console.log("all clients", clientList); + client.send(client.id); + // client.on('disconnect', function() { + // clients.splice(clients.indexOf(client), 1); + // }); +}); + +io.on("connection", function(socket) { + let ud = socket.handshake.session.userdata; + let user = ""; + console.log('session for: ', socket.handshake.session.userdata); + if(ud) { + clientList.forEach(function (element) { + console.log('client found! : ', element.name, 'with size', clientList.length); + if (element.name && element.name == socket.handshake.session.userdata) { + user = element.name; + element.connection = socket.id; + io.sockets.emit("displayUser", user); + } + }); + }else { + io.sockets.emit("displayUser", "New User"); + } + + socket.on("disableOthers", function(){ + console.log('clicked disable'); + socket.broadcast.emit("specMsg", 'only for ' + socket.handshake.session.userdata); + + //io.sockets.to(getSocketFromClient(socket.handshake.session.userdata)).emit("specMsg", 'only for ' + socket.handshake.session.userdata); + }); + + socket.on("send hint", function(msg) { + socket.handshake.session.userdata = msg; + clientList.push({name: msg, connection: socket.id}); + socket.handshake.session.save(); + + let full_msg = "[ " + getCurrentDate() + " ]: " + msg; + //io.sockets.emit("update hints", full_msg, msg); + socket.broadcast.emit("update hints", full_msg, msg); + }); +}); + +function getSocketFromClient(cl){ + clientList.forEach(function (element) { + if(element.name == cl){ + console.log("GetsockFromCl", element.name, element.connection); + return element.connection; + } + }) +} + +function getCurrentDate() { + var currentDate = new Date(); + var day = (currentDate.getDate() < 10 ? '0' : '') + currentDate.getDate(); + var month = ((currentDate.getMonth() + 1) < 10 ? '0' : '') + (currentDate.getMonth() + 1); + var year = currentDate.getFullYear(); + var hour = (currentDate.getHours() < 10 ? '0' : '') + currentDate.getHours(); + var minute = (currentDate.getMinutes() < 10 ? '0' : '') + currentDate.getMinutes(); + var second = (currentDate.getSeconds() < 10 ? '0' : '') + currentDate.getSeconds(); + return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; +} diff --git a/app/src/App.js b/app/src/App.js index 8e74b12f..05bc6f42 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -1,6 +1,8 @@ import React from 'react'; import './App.css'; +import socketIOClient from "socket.io-client"; +const socket = socketIOClient("localhost:8080"); //would normally come from database but this is for testing //list of ALL words let allWords = [ @@ -77,7 +79,7 @@ class Card extends React.Component { @@ -271,4 +273,19 @@ function setBoard(order) { return [boardWords, boardTeams]; } +function clickAction(btn){ + btn.changeStyle(btn.props.team); + console.log('number clicked'); + socket.emit("send hint", "sent!"); +} + +socket.on("update hints", function(msg){ + var final_message = document.createElement('p'); + console.log(msg); + final_message.innerHTML = msg; + console.log(final_message); + document.getElementsByClassName('chat-container')[0].append(final_message); +}); + + export default App; From 27d7beb9b61466aa66d6c12c8da3b52a2d55cf53 Mon Sep 17 00:00:00 2001 From: Levy Date: Wed, 9 Oct 2019 17:54:17 -0400 Subject: [PATCH 13/46] info and key modals --- app/package-lock.json | 29 +++ app/package.json | 3 +- app/public/index.html | 11 +- app/public/mag.ico | Bin 0 -> 18046 bytes app/public/manifest.json | 2 +- app/src/App.css | 28 ++- app/src/App.js | 446 +++++++++++++++++++++++++++------------ 7 files changed, 369 insertions(+), 150 deletions(-) create mode 100644 app/public/mag.ico diff --git a/app/package-lock.json b/app/package-lock.json index 53e95ec2..ef7e39d7 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -5143,6 +5143,11 @@ "strip-eof": "^1.0.0" } }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -10633,6 +10638,22 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-modal": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.10.1.tgz", + "integrity": "sha512-2DKIfdOc8+WY+SYJ/xf/WBwOYMmNAYAyGkYlc4e1TCs9rk1xY4QBz04hB3UHGcrLChh7ce77rHAe6VPNmuLYsQ==", + "requires": { + "exenv": "^1.2.0", + "prop-types": "^15.5.10", + "react-lifecycles-compat": "^3.0.0", + "warning": "^4.0.3" + } + }, "react-scripts": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.2.0.tgz", @@ -12872,6 +12893,14 @@ "makeerror": "1.0.x" } }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", diff --git a/app/package.json b/app/package.json index 9af893d5..46f65be7 100644 --- a/app/package.json +++ b/app/package.json @@ -3,13 +3,14 @@ "version": "0.1.0", "private": true, "dependencies": { - "cookie-parser": "latest", + "cookie-parser": "^1.4.4", "express": "latest", "express-session": "latest", "express-socket.io-session": "latest", "morgan": "latest", "react": "^16.10.2", "react-dom": "^16.10.2", + "react-modal": "^3.10.1", "react-scripts": "3.2.0", "socket.io": "latest", "socket.io-client": "^2.3.0" diff --git a/app/public/index.html b/app/public/index.html index 398cf62e..97699ec8 100644 --- a/app/public/index.html +++ b/app/public/index.html @@ -2,7 +2,7 @@ - + Codenames - - - + + +
diff --git a/app/public/mag.ico b/app/public/mag.ico new file mode 100644 index 0000000000000000000000000000000000000000..51c3c2738f30ec89cc236171b2391a5fdfbeb22b GIT binary patch literal 18046 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 literal 0 HcmV?d00001 diff --git a/app/public/manifest.json b/app/public/manifest.json index 18a8117a..b15896c7 100644 --- a/app/public/manifest.json +++ b/app/public/manifest.json @@ -3,7 +3,7 @@ "name": "Codenames", "icons": [ { - "src": "favicon.ico", + "src": "mag.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" }, diff --git a/app/src/App.css b/app/src/App.css index c6f3ae83..cf36e6d6 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -7,7 +7,7 @@ } .App { - background-color:#282c34; + background-color: #282c34; display: flex; flex-flow: column; height: 100%; @@ -18,7 +18,7 @@ .App-header { min-height: 15vh; - display:flex; + display: flex; flex: 0 1 auto; justify-content: center; font-size: calc(10px + 2vmin); @@ -93,7 +93,6 @@ h1 { border-radius: 8px; } - .hintSubmission { position: absolute; bottom: 0; @@ -106,6 +105,7 @@ h1 { margin: 0 2%; border-top: 2px black solid; } + input { background: rgba(0, 0, 0, 0) none repeat scroll 0 0; border: medium none; @@ -117,7 +117,7 @@ input { .amountInput { width: 50%; - display:flex; + display: flex; flex-wrap: wrap; } @@ -128,7 +128,6 @@ input { font-size: x-large; } - .amount:hover { cursor: pointer; background: cornsilk; @@ -142,7 +141,6 @@ input { background: whitesmoke; } - .msg { resize: none; width: 125px; @@ -165,7 +163,23 @@ input { text-align: center; } - .clue { margin-left: 10px; } + +.modal { + font-family: verdana, "Lucida Grande", arial, sans-serif; + font-size: 20px; +} + +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; +} + +.modalButton { + height: 100%; + width: 100%; +} diff --git a/app/src/App.js b/app/src/App.js index 05bc6f42..700914b5 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -1,128 +1,288 @@ -import React from 'react'; -import './App.css'; +import React from "react"; +import Modal from "react-modal"; +import "./App.css"; import socketIOClient from "socket.io-client"; const socket = socketIOClient("localhost:8080"); //would normally come from database but this is for testing //list of ALL words let allWords = [ - 'wall', - 'back', - 'orange', - 'crash', - 'hawk', - 'kiwi', - 'lab', - 'ice cream', - 'india', - 'theater', - 'plane', - 'parachute', - 'telescope', - 'match', - 'police', - 'post', - 'ray', - 'kid', - 'wind', - 'box', - 'knife', - 'church', - 'bell', - 'lemon', - 'triangle', - 'cap', - 'jam', - 'organ', - 'engine', - 'agent', - 'buck', - 'day', - 'doctor', - 'ball', + "wall", + "back", + "orange", + "crash", + "hawk", + "kiwi", + "lab", + "ice cream", + "india", + "theater", + "plane", + "parachute", + "telescope", + "match", + "police", + "post", + "ray", + "kid", + "wind", + "box", + "knife", + "church", + "bell", + "lemon", + "triangle", + "cap", + "jam", + "organ", + "engine", + "agent", + "buck", + "day", + "doctor", + "ball" ]; function App() { return ( -
-
-

Codenames

-
- -
+
+
+

Codenames

+
+ +
); } +Modal.setAppElement("#root"); + +class Modals extends React.Component { + constructor(props) { + super(props); + this.state = { + words: this.props.words, + teams: this.props.teams + }; + } + render() { + return ( +
+ + +
+ ); + } +} + +class Info extends React.Component { + constructor() { + super(); + + this.state = { + modalIsOpen: false + }; + + this.openModal = this.openModal.bind(this); + this.closeModal = this.closeModal.bind(this); + } + + openModal() { + this.setState({ modalIsOpen: true }); + } + + closeModal() { + this.setState({ modalIsOpen: false }); + } + + render() { + return ( +
+ + +
+
+ + × + +
+
+
+
How to Play:
+
+
+
+

+ On the board there are 25 tiles, each of which have the + codename of different secret agent. Each agent is either a + blue team agent, red team agent, a civilian, or the assassin. + The game is played with two teams, a red team and a blue team. + Both teams have one spymaster and one detective. +
+
+ At the beginning of the game, only the spymasters can see the + position of the agents (this can be viewed by clicking on the + key button). The spymasters will each take turns giving clues + to their team's detective on which agents belong to their + team. These clues will include a one word hint and the amount + of agents that the hint relates to. The detective will then + guess which word the clue relates to by clicking on a codename + tile. If the detective guesses correctly then they will be + able to continue guessing until they have guessed the amount + specified by the spymaster. If the detective's guesses are all + correct, they will get a free guess which they can choose to + make or pass. If the detective guesses incorrectly it becomes + the other teams turn. If any detective guesses the assassin + then their team atomatically loses the game. +
+
A team wins the game if their detective can find all of + their team's agents or if the other team accidentally finds + the assassin. Good Luck! +

+
+
+
+
+
+ ); + } +} + +class Key extends React.Component { + constructor(props) { + super(props); + + this.state = { + modalIsOpen: false, + boardWords: this.props.boardWords, + boardTeams: this.props.boardTeams + }; + + this.openModal = this.openModal.bind(this); + this.closeModal = this.closeModal.bind(this); + } + + openModal() { + this.setState({ modalIsOpen: true }); + } + + closeModal() { + this.setState({ modalIsOpen: false }); + } + + render() { + return ( +
+ + +
+
+ + × + +
+
+
+
Key:
+
+
+
+ +
+
+
+
+
+ ); + } +} + class Card extends React.Component { constructor(props) { super(props); this.changeStyle = this.changeStyle.bind(this); - let cardColor = 'tan'; - if (this.props.team === 'teamA') { - cardColor = 'red'; - } else if (this.props.team === 'teamB') { - cardColor = 'blue'; - } else if (this.props.team === 'assassin') { - cardColor = 'black'; + let cardColor = "tan"; + if (this.props.team === "teamA") { + cardColor = "red"; + } else if (this.props.team === "teamB") { + cardColor = "blue"; + } else if (this.props.team === "assassin") { + cardColor = "black"; + } + if (this.props.keyboard === true) { + this.state = { color: cardColor, cardColor: cardColor }; + } else { + this.state = { color: null, cardColor: cardColor }; } - this.state = {color: null, cardColor: cardColor}; } changeStyle(color) { this.setState({ - color: this.state.cardColor, + color: this.state.cardColor }); } render() { return ( - + ); } } class Chat extends React.Component { - constructor(props) { super(props); this.state = { - wordsLeft: props.wordsLeft, - log: props.log - } + wordsLeft: props.wordsLeft, + log: props.log + }; } createAmounts() { let table = []; for (let i = 0; i < 10; i++) { - table.push(
{i}
) + table.push( +
+ {i} +
+ ); } return table; } - render() { return ( -
-
- {this.state.log.map((clue) => { - return
{clue.hint}
- })} -
- -
- {this.createAmounts()} +
+
+ {this.state.log.map(clue => { + return ( +
+ {clue.hint}
-
+ ); + })} +
+ +
{this.createAmounts()}
-
- +
); } } @@ -133,52 +293,59 @@ class Board extends React.Component { this.state = { words: this.props.words, teams: this.props.teams, + keyboard: this.props.keyboard }; } renderCard(i) { - return ; + return ( + + ); } render() { return ( -
-
- {this.renderCard(0)} - {this.renderCard(1)} - {this.renderCard(2)} - {this.renderCard(3)} - {this.renderCard(4)} -
-
- {this.renderCard(5)} - {this.renderCard(6)} - {this.renderCard(7)} - {this.renderCard(8)} - {this.renderCard(9)} -
-
- {this.renderCard(10)} - {this.renderCard(11)} - {this.renderCard(12)} - {this.renderCard(13)} - {this.renderCard(14)} -
-
- {this.renderCard(15)} - {this.renderCard(16)} - {this.renderCard(17)} - {this.renderCard(18)} - {this.renderCard(19)} -
-
- {this.renderCard(20)} - {this.renderCard(21)} - {this.renderCard(22)} - {this.renderCard(23)} - {this.renderCard(24)} -
+
+
+ {this.renderCard(0)} + {this.renderCard(1)} + {this.renderCard(2)} + {this.renderCard(3)} + {this.renderCard(4)} +
+
+ {this.renderCard(5)} + {this.renderCard(6)} + {this.renderCard(7)} + {this.renderCard(8)} + {this.renderCard(9)} +
+
+ {this.renderCard(10)} + {this.renderCard(11)} + {this.renderCard(12)} + {this.renderCard(13)} + {this.renderCard(14)} +
+
+ {this.renderCard(15)} + {this.renderCard(16)} + {this.renderCard(17)} + {this.renderCard(18)} + {this.renderCard(19)} +
+
+ {this.renderCard(20)} + {this.renderCard(21)} + {this.renderCard(22)} + {this.renderCard(23)} + {this.renderCard(24)}
+
); } } @@ -194,7 +361,7 @@ class Game extends React.Component { this.state = { boardWords: ingameCards, boardTeams: ingameTeams, - firstteam: firstteam, + firstteam: firstteam }; } @@ -202,17 +369,23 @@ class Game extends React.Component { let status; let order = this.state.firstteam; if (!order) { - status = 'Red Team'; + status = "Red Team"; } else { - status = 'Blue Team'; + status = "Blue Team"; } return ( -
- - -
-
-
+
+ + + + +
+
+
); } } @@ -239,24 +412,24 @@ function setBoard(order) { } //for words to teams - setTeam('teamA', order); - setTeam('teamB', order); - setTeam('assassin', order); - setTeam('citizen', order); + setTeam("teamA", order); + setTeam("teamB", order); + setTeam("assassin", order); + setTeam("citizen", order); function setTeam(type, order) { let amount = 7; - if (type === 'assassin') { + if (type === "assassin") { amount = 1; } if ( - (order === 0 && type === 'teamA') || - (order === 1 && type === 'teamB') + (order === 0 && type === "teamA") || + (order === 1 && type === "teamB") ) { amount += 2; } else if ( - (order === 1 && type === 'teamA') || - (order === 0 && type === 'teamB') + (order === 1 && type === "teamA") || + (order === 0 && type === "teamB") ) { amount++; } @@ -273,19 +446,18 @@ function setBoard(order) { return [boardWords, boardTeams]; } -function clickAction(btn){ +function clickAction(btn) { btn.changeStyle(btn.props.team); - console.log('number clicked'); + console.log("number clicked"); socket.emit("send hint", "sent!"); } -socket.on("update hints", function(msg){ - var final_message = document.createElement('p'); +socket.on("update hints", function(msg) { + var final_message = document.createElement("p"); console.log(msg); final_message.innerHTML = msg; console.log(final_message); - document.getElementsByClassName('chat-container')[0].append(final_message); + document.getElementsByClassName("chat-container")[0].append(final_message); }); - export default App; From 3605035284027cc51e9e3c4ea1984dbf33f58c3d Mon Sep 17 00:00:00 2001 From: dandaman2 Date: Wed, 9 Oct 2019 20:08:27 -0400 Subject: [PATCH 14/46] MORE SOCKETS --- app/server.js | 79 +++++++++++++++++++++++++------------- app/src/App.js | 100 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 142 insertions(+), 37 deletions(-) diff --git a/app/server.js b/app/server.js index 18b6a3ef..40b99066 100644 --- a/app/server.js +++ b/app/server.js @@ -33,33 +33,29 @@ module.exports = app; ///connections and usages var clientList = []; +var boardState = []; +var clueLog = []; + +function updateAll(){ + sendBoardUpdate(); + sendClueUpdate(); +} + +function sendBoardUpdate(){ + io.sockets.emit("updateBoardstate", boardState); +} +function sendClueUpdate(){ + io.sockets.emit("updateCluestate", clueLog); +} + io.on("connect", function(client){ - //clients.push(client); - console.log(client.id); + console.log("establishing connection with", client.id); console.log("all clients", clientList); client.send(client.id); - // client.on('disconnect', function() { - // clients.splice(clients.indexOf(client), 1); - // }); }); io.on("connection", function(socket) { - let ud = socket.handshake.session.userdata; - let user = ""; - console.log('session for: ', socket.handshake.session.userdata); - if(ud) { - clientList.forEach(function (element) { - console.log('client found! : ', element.name, 'with size', clientList.length); - if (element.name && element.name == socket.handshake.session.userdata) { - user = element.name; - element.connection = socket.id; - io.sockets.emit("displayUser", user); - } - }); - }else { - io.sockets.emit("displayUser", "New User"); - } socket.on("disableOthers", function(){ console.log('clicked disable'); @@ -68,15 +64,46 @@ io.on("connection", function(socket) { //io.sockets.to(getSocketFromClient(socket.handshake.session.userdata)).emit("specMsg", 'only for ' + socket.handshake.session.userdata); }); - socket.on("send hint", function(msg) { - socket.handshake.session.userdata = msg; - clientList.push({name: msg, connection: socket.id}); - socket.handshake.session.save(); + socket.on("setInitState", function(state, browserCache){ + console.log('session for: ', browserCache, 'socket', socket.id); + let user = browserCache.user; + let found = false; + clientList.forEach(function (element) { + if (element.name && element.name === user) { + console.log("updating " + user + " connection from ", element.connection, 'to', socket.id); + element.connection = socket.id; + io.sockets.emit("displayUser", user); + found = true; + } + }); + if(!found){ + console.log('adding client', user, 'with socket', socket.id); + clientList.push({name: user, connection: socket.id}) + //io.sockets.emit("displayUser", "New User"); + } - let full_msg = "[ " + getCurrentDate() + " ]: " + msg; + //The first user that connects sets the base cards + if(boardState.length<1){ + console.log('state set to', state); + boardState = state; + }else{ + updateAll(); + console.log('state already is ', boardState); + } + }); + + socket.on("button selected", function(state) { + boardState = state; //io.sockets.emit("update hints", full_msg, msg); - socket.broadcast.emit("update hints", full_msg, msg); + //socket.broadcast.emit("update hints", full_msg, msg); + sendBoardUpdate(); }); + + socket.on("clue sent", function(clue){ + clueLog.push(clue); + sendClueUpdate(); + }); + }); function getSocketFromClient(cl){ diff --git a/app/src/App.js b/app/src/App.js index 05bc6f42..1faf6b9b 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -79,7 +79,7 @@ class Card extends React.Component { @@ -115,7 +115,8 @@ class Chat extends React.Component { })}
-
+
clickHint(this)}> {this.createAmounts()}
@@ -273,18 +274,95 @@ function setBoard(order) { return [boardWords, boardTeams]; } -function clickAction(btn){ +//send out message to set initial state if it hasnt already +window.onload = function(){ + //sets random name upon connecting + localStorage.setItem('userInfo', 'u::'+ Math.random()); + + socket.emit("setInitState", getBoardState(), getBrowserData()); + console.log('initial state is: ', getBoardState()); +}; + +function getBrowserData(){ + return {user: localStorage.getItem('userInfo')}; +} + +function clickHint(hintbtn){ + setTimeout(function(){ + let newHint = document.getElementById('msg').value; + let state = getClueState(newHint); + console.log('hint clicked'); + socket.emit("clue sent", state); + }, 1); +} + +function clickGuessButton(btn){ btn.changeStyle(btn.props.team); - console.log('number clicked'); - socket.emit("send hint", "sent!"); + setTimeout(function(){ + let state = getBoardState(); + console.log('button clicked'); + socket.emit("button selected", state); + }, 1); +} + +function getBoardState(){ + let cards = []; + let collectedCards = document.getElementsByClassName('card'); + const NUM_CARDS_ROW = 5; + for(let i=0; i Date: Wed, 9 Oct 2019 20:10:30 -0400 Subject: [PATCH 15/46] MORE SOCKETS --- app/src/App.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/App.js b/app/src/App.js index 1faf6b9b..de7db67a 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -338,7 +338,7 @@ function getClueState(newHint){ socket.on("updateCluestate", function(cs){ let chatCont = document.getElementsByClassName('chat-container')[0]; - chatCont.innerHTML = ''; + //chatCont.innerHTML = ''; cs.forEach(function(msg){ let final_message = document.createElement('p'); console.log(msg); From 9c25e3cb56c675c2edc0c27663fd73a8af937e27 Mon Sep 17 00:00:00 2001 From: Levy Date: Wed, 9 Oct 2019 20:34:49 -0400 Subject: [PATCH 16/46] main menu --- app/public/detective.png | Bin 0 -> 137623 bytes app/src/App.css | 67 +++++++++++++++++++- app/src/App.js | 132 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 app/public/detective.png diff --git a/app/public/detective.png b/app/public/detective.png new file mode 100644 index 0000000000000000000000000000000000000000..bd63293435dc20fae8faeb08701bc9f3c5e5ee80 GIT binary patch literal 137623 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

y6I{uSP^+=7OI(C7+cfxTU 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

@~EPnF51BXU-rYtn?tY1qcYEfl?J|m?r-5a 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 DCVZc? literal 0 HcmV?d00001 diff --git a/app/src/App.css b/app/src/App.css index cf36e6d6..0df0ba47 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -6,7 +6,8 @@ height: 100vh; } -.App { +.App, +.gameCreate { background-color: #282c34; display: flex; flex-flow: column; @@ -179,7 +180,71 @@ input { cursor: pointer; } +.modal-header-menu { + font-size: 10vh; + text-align: center; + display: block; + color: white; + margin-top: 0.7%; + margin-bottom: 2%; +} + +.modal-body-menu { + text-align: center; +} + .modalButton { height: 100%; width: 100%; } + +.redrole { + border: medium; + border-color: black; + border-style: solid; + border-width: 2px; + color: black; + font-size: xx-large; + width: 20%; + text-align: center; + background-color: #ff6666; + padding: 0.5%; +} + +.bluerole { + border: medium; + border-color: black; + border-style: solid; + border-width: 2px; + color: black; + font-size: xx-large; + width: 20%; + text-align: center; + background-color: #4d79ff; + padding: 0.5%; +} + +.play { + color: black; + font-size: xx-large; + width: 30%; + margin-bottom: 1%; + padding: 0.5%; +} + +.center { + display: block; + margin-left: auto; + margin-right: auto; +} + +#menuName { + border: medium; + color: white; + border-style: solid; + border-width: 2px; + font-size: xx-large; + width: 40%; + text-align: center; + padding: 0.5%; +} diff --git a/app/src/App.js b/app/src/App.js index 700914b5..014f2ffe 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -49,6 +49,7 @@ function App() {

Codenames

+
); @@ -390,6 +391,137 @@ class Game extends React.Component { } } +class Menu extends React.Component { + constructor(props) { + super(props); + + this.state = { + modalIsOpen: true, + addGame: false, + selectedRole: "rspymaster" + }; + + this.openModal = this.openModal.bind(this); + this.closeModal = this.closeModal.bind(this); + } + + openModal() { + this.setState({ modalIsOpen: true }); + } + + closeModal() { + this.setState({ modalIsOpen: false }); + } + + render() { + return ( +
+
+ +
+
+
+
Codenames
+
+
+ +
+
+ Trulli +
+
+ + +
+ + +
+
+ +
+
+
+
+
+
+ ); + } +} + +function makeGray(btn, selected) { + let last = document.getElementById(selected.state.selectedRole); + last.disabled = false; + if (last.className === "redrole") { + last.style.backgroundColor = "#ff6666"; + } else { + last.style.backgroundColor = "#4d79ff"; + } + + let b = document.getElementById(btn); + b.style.backgroundColor = "gray"; + b.disabled = true; + selected.state.selectedRole = btn; +} + +function closeMenu(play) { + var u = document.getElementById("menuName"); + var redspy = document.getElementById("rspymaster"); + var reddet = document.getElementById("rdetective"); + var bluespy = document.getElementById("bspymaster"); + var bluedet = document.getElementById("bdetective"); + var username = u.value; + console.log(username); + if ( + redspy.disabled === true && + bluespy.disabled === true && + reddet.disabled === true && + bluedet.disabled === true + ) { + play.state.addGame = true; + play.closeModal(); + } +} + //takes full list of words and picks 25 unique for a game function setBoard(order) { let boardWords = Array(25).fill(null); From a7c80d42e0dcb9aa14db6dfecb184acb8dc2a646 Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Wed, 9 Oct 2019 20:43:53 -0400 Subject: [PATCH 17/46] Add hint support --- app/server.js | 100 ++++++----- app/src/App.css | 2 + app/src/App.js | 466 ++++++++++++++++++++++++++---------------------- 3 files changed, 315 insertions(+), 253 deletions(-) diff --git a/app/server.js b/app/server.js index 40b99066..f5a648b8 100644 --- a/app/server.js +++ b/app/server.js @@ -1,31 +1,31 @@ -var express = require('express'); -var path = require('path'); -var cookieParser = require('cookie-parser'); -var logger = require('morgan'); -var app = express(); -var server = require('http').createServer(app); -var fs = require('fs'); -var session = require("express-session")({ - secret: "my-secret", - resave: true, - saveUninitialized: true +const express = require('express'); +const path = require('path'); +const cookieParser = require('cookie-parser'); +const logger = require('morgan'); +const app = express(); +const server = require('http').createServer(app); +const fs = require('fs'); +const session = require('express-session')({ + secret: 'my-secret', + resave: true, + saveUninitialized: true, }), - sharedsession = require("express-socket.io-session"); -var socketio = require('socket.io'); -var io = socketio.listen(server); + sharedsession = require('express-socket.io-session'); +const socketio = require('socket.io'); +const io = socketio.listen(server); io.use(sharedsession(session)); app.use(logger('dev')); app.use(session); app.use(express.json()); -app.use(express.urlencoded({ extended: false })); +app.use(express.urlencoded({extended: false})); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); -app.applyPort = function(port){ - server.listen(port); - let message = "listening on port: " + port; - console.log(message); +app.applyPort = function(port) { + server.listen(port); + let message = 'listening on port: ' + port; + console.log(message); }; app.applyPort(8080); @@ -34,7 +34,7 @@ module.exports = app; ///connections and usages var clientList = []; var boardState = []; -var clueLog = []; +let hints = []; function updateAll(){ sendBoardUpdate(); @@ -57,12 +57,13 @@ io.on("connect", function(client){ io.on("connection", function(socket) { - socket.on("disableOthers", function(){ - console.log('clicked disable'); - socket.broadcast.emit("specMsg", 'only for ' + socket.handshake.session.userdata); + socket.on('disableOthers', function() { + console.log('clicked disable'); + socket.broadcast.emit('specMsg', + 'only for ' + socket.handshake.session.userdata); - //io.sockets.to(getSocketFromClient(socket.handshake.session.userdata)).emit("specMsg", 'only for ' + socket.handshake.session.userdata); - }); + //io.sockets.to(getSocketFromClient(socket.handshake.session.userdata)).emit("specMsg", 'only for ' + socket.handshake.session.userdata); + }); socket.on("setInitState", function(state, browserCache){ console.log('session for: ', browserCache, 'socket', socket.id); @@ -104,24 +105,43 @@ io.on("connection", function(socket) { sendClueUpdate(); }); + socket.on('hintSubmission', (sender, clue, amt) => { + console.log("hello"); + hints.push({sender: sender, clue: clue, amt: amt}); + socket.emit('hintHistory', hints);x`` + }); + + socket.on('send hint', function(msg) { + socket.handshake.session.userdata = msg; + clientList.push({name: msg, connection: socket.id}); + socket.handshake.session.save(); + + let full_msg = '[ ' + getCurrentDate() + ' ]: ' + msg; + //io.sockets.emit("update hints", full_msg, msg); + socket.broadcast.emit('update hints', full_msg, msg); + }); }); -function getSocketFromClient(cl){ - clientList.forEach(function (element) { - if(element.name == cl){ - console.log("GetsockFromCl", element.name, element.connection); - return element.connection; - } - }) +function getSocketFromClient(cl) { + clientList.forEach(function(element) { + if (element.name === cl) { + console.log('GetsockFromCl', element.name, element.connection); + return element.connection; + } + }); } function getCurrentDate() { - var currentDate = new Date(); - var day = (currentDate.getDate() < 10 ? '0' : '') + currentDate.getDate(); - var month = ((currentDate.getMonth() + 1) < 10 ? '0' : '') + (currentDate.getMonth() + 1); - var year = currentDate.getFullYear(); - var hour = (currentDate.getHours() < 10 ? '0' : '') + currentDate.getHours(); - var minute = (currentDate.getMinutes() < 10 ? '0' : '') + currentDate.getMinutes(); - var second = (currentDate.getSeconds() < 10 ? '0' : '') + currentDate.getSeconds(); - return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; + let currentDate = new Date(); + let day = (currentDate.getDate() < 10 ? '0' : '') + currentDate.getDate(); + let month = ((currentDate.getMonth() + 1) < 10 ? '0' : '') + + (currentDate.getMonth() + 1); + let year = currentDate.getFullYear(); + let hour = (currentDate.getHours() < 10 ? '0' : '') + currentDate.getHours(); + let minute = (currentDate.getMinutes() < 10 ? '0' : '') + + currentDate.getMinutes(); + let second = (currentDate.getSeconds() < 10 ? '0' : '') + + currentDate.getSeconds(); + return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + + second; } diff --git a/app/src/App.css b/app/src/App.css index 0df0ba47..adc9be9e 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -136,6 +136,8 @@ input { .amount.disabled { color: lightgray; + pointer-events:none; + } .amount.disabled:hover { cursor: default; diff --git a/app/src/App.js b/app/src/App.js index 5604771c..4617ace0 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -1,46 +1,47 @@ -import React from "react"; -import Modal from "react-modal"; -import "./App.css"; +import React from 'react'; +import Modal from 'react-modal'; +import './App.css'; -import socketIOClient from "socket.io-client"; -const socket = socketIOClient("localhost:8080"); +import socketIOClient from 'socket.io-client'; + +const socket = socketIOClient('localhost:8080'); //would normally come from database but this is for testing //list of ALL words let allWords = [ - "wall", - "back", - "orange", - "crash", - "hawk", - "kiwi", - "lab", - "ice cream", - "india", - "theater", - "plane", - "parachute", - "telescope", - "match", - "police", - "post", - "ray", - "kid", - "wind", - "box", - "knife", - "church", - "bell", - "lemon", - "triangle", - "cap", - "jam", - "organ", - "engine", - "agent", - "buck", - "day", - "doctor", - "ball" + 'wall', + 'back', + 'orange', + 'crash', + 'hawk', + 'kiwi', + 'lab', + 'ice cream', + 'india', + 'theater', + 'plane', + 'parachute', + 'telescope', + 'match', + 'police', + 'post', + 'ray', + 'kid', + 'wind', + 'box', + 'knife', + 'church', + 'bell', + 'lemon', + 'triangle', + 'cap', + 'jam', + 'organ', + 'engine', + 'agent', + 'buck', + 'day', + 'doctor', + 'ball', ]; function App() { @@ -55,22 +56,23 @@ function App() { ); } -Modal.setAppElement("#root"); +Modal.setAppElement('#root'); class Modals extends React.Component { constructor(props) { super(props); this.state = { words: this.props.words, - teams: this.props.teams + teams: this.props.teams, }; } + render() { return ( -
- - -
+
+ + +
); } } @@ -80,7 +82,7 @@ class Info extends React.Component { super(); this.state = { - modalIsOpen: false + modalIsOpen: false, }; this.openModal = this.openModal.bind(this); @@ -88,64 +90,74 @@ class Info extends React.Component { } openModal() { - this.setState({ modalIsOpen: true }); + this.setState({modalIsOpen: true}); } closeModal() { - this.setState({ modalIsOpen: false }); + this.setState({modalIsOpen: false}); } render() { return ( -
- - -
-
+
+ + +
+
× -
-
-
-
How to Play:
-
-
-
-

- On the board there are 25 tiles, each of which have the - codename of different secret agent. Each agent is either a - blue team agent, red team agent, a civilian, or the assassin. - The game is played with two teams, a red team and a blue team. - Both teams have one spymaster and one detective. -
-
- At the beginning of the game, only the spymasters can see the - position of the agents (this can be viewed by clicking on the - key button). The spymasters will each take turns giving clues - to their team's detective on which agents belong to their - team. These clues will include a one word hint and the amount - of agents that the hint relates to. The detective will then - guess which word the clue relates to by clicking on a codename - tile. If the detective guesses correctly then they will be - able to continue guessing until they have guessed the amount - specified by the spymaster. If the detective's guesses are all - correct, they will get a free guess which they can choose to - make or pass. If the detective guesses incorrectly it becomes - the other teams turn. If any detective guesses the assassin - then their team atomatically loses the game. -
-
A team wins the game if their detective can find all of - their team's agents or if the other team accidentally finds - the assassin. Good Luck! -

+
+
+
+
How to Play:
+
+
+
+

+ On the board there are 25 tiles, each of which have the + codename of different secret agent. Each agent is either a + blue team agent, red team agent, a civilian, or the + assassin. + The game is played with two teams, a red team and a blue + team. + Both teams have one spymaster and one detective. +
+
+ At the beginning of the game, only the spymasters can see + the + position of the agents (this can be viewed by clicking on + the + key button). The spymasters will each take turns giving + clues + to their team's detective on which agents belong to their + team. These clues will include a one word hint and the + amount + of agents that the hint relates to. The detective will then + guess which word the clue relates to by clicking on a + codename + tile. If the detective guesses correctly then they will be + able to continue guessing until they have guessed the amount + specified by the spymaster. If the detective's guesses are + all + correct, they will get a free guess which they can choose to + make or pass. If the detective guesses incorrectly it + becomes + the other teams turn. If any detective guesses the assassin + then their team atomatically loses the game. +
+
A team wins the game if their detective can find all of + their team's agents or if the other team accidentally finds + the assassin. Good Luck! +

+
-
-
-
+ +
); } } @@ -157,7 +169,7 @@ class Key extends React.Component { this.state = { modalIsOpen: false, boardWords: this.props.boardWords, - boardTeams: this.props.boardTeams + boardTeams: this.props.boardTeams, }; this.openModal = this.openModal.bind(this); @@ -165,42 +177,43 @@ class Key extends React.Component { } openModal() { - this.setState({ modalIsOpen: true }); + this.setState({modalIsOpen: true}); } closeModal() { - this.setState({ modalIsOpen: false }); + this.setState({modalIsOpen: false}); } render() { return ( -
- - -
-
+
+ + +
+
× -
-
-
-
Key:
-
-
-
- +
+
+
+
Key:
+
+
+
+ +
-
-
-
+ +
); } } @@ -209,24 +222,24 @@ class Card extends React.Component { constructor(props) { super(props); this.changeStyle = this.changeStyle.bind(this); - let cardColor = "tan"; - if (this.props.team === "teamA") { - cardColor = "red"; - } else if (this.props.team === "teamB") { - cardColor = "blue"; - } else if (this.props.team === "assassin") { - cardColor = "black"; + let cardColor = 'tan'; + if (this.props.team === 'teamA') { + cardColor = 'red'; + } else if (this.props.team === 'teamB') { + cardColor = 'blue'; + } else if (this.props.team === 'assassin') { + cardColor = 'black'; } if (this.props.keyboard === true) { - this.state = { color: cardColor, cardColor: cardColor }; + this.state = {color: cardColor, cardColor: cardColor}; } else { - this.state = { color: null, cardColor: cardColor }; + this.state = {color: null, cardColor: cardColor}; } } changeStyle(color) { this.setState({ - color: this.state.cardColor + color: this.state.cardColor, }); } @@ -247,21 +260,36 @@ class Chat extends React.Component { constructor(props) { super(props); this.state = { + team: this.props.team, wordsLeft: props.wordsLeft, - log: props.log + log: [], + clue: '' }; + socket.on('hintHistory', (hints)=>{ + console.log(hints); + this.setState({log: hints}) + }) + } + + submitHint(amount) { + if (this.state.clue === '') { + return; + } + socket.emit('hintSubmission', this.state.team, this.state.clue, amount); } createAmounts() { let table = []; for (let i = 0; i < 10; i++) { table.push( -
- {i} -
+
this.submitHint(i)} + className={'amount' + + (i <= this.state.wordsLeft ? '' : ' disabled')} + > + {i} +
, ); } return table; @@ -270,21 +298,23 @@ class Chat extends React.Component { render() { return ( -
-
- {this.state.log.map(clue => { - return ( -
- {clue.hint} -
- ); - })} -
- -
{this.createAmounts()}
+
+
+ {this.state.log.map(hint => { + return ( +
+ {hint.clue} : {hint.amt} +
+ ); + })} +
+ this.setState( + {clue: e.target.value})} + id="msg"/> +
{this.createAmounts()}
+
-
); } } @@ -295,59 +325,59 @@ class Board extends React.Component { this.state = { words: this.props.words, teams: this.props.teams, - keyboard: this.props.keyboard + keyboard: this.props.keyboard, }; } renderCard(i) { return ( - + ); } render() { return ( -
-
- {this.renderCard(0)} - {this.renderCard(1)} - {this.renderCard(2)} - {this.renderCard(3)} - {this.renderCard(4)} -
-
- {this.renderCard(5)} - {this.renderCard(6)} - {this.renderCard(7)} - {this.renderCard(8)} - {this.renderCard(9)} -
-
- {this.renderCard(10)} - {this.renderCard(11)} - {this.renderCard(12)} - {this.renderCard(13)} - {this.renderCard(14)} -
-
- {this.renderCard(15)} - {this.renderCard(16)} - {this.renderCard(17)} - {this.renderCard(18)} - {this.renderCard(19)} -
-
- {this.renderCard(20)} - {this.renderCard(21)} - {this.renderCard(22)} - {this.renderCard(23)} - {this.renderCard(24)} +
+
+ {this.renderCard(0)} + {this.renderCard(1)} + {this.renderCard(2)} + {this.renderCard(3)} + {this.renderCard(4)} +
+
+ {this.renderCard(5)} + {this.renderCard(6)} + {this.renderCard(7)} + {this.renderCard(8)} + {this.renderCard(9)} +
+
+ {this.renderCard(10)} + {this.renderCard(11)} + {this.renderCard(12)} + {this.renderCard(13)} + {this.renderCard(14)} +
+
+ {this.renderCard(15)} + {this.renderCard(16)} + {this.renderCard(17)} + {this.renderCard(18)} + {this.renderCard(19)} +
+
+ {this.renderCard(20)} + {this.renderCard(21)} + {this.renderCard(22)} + {this.renderCard(23)} + {this.renderCard(24)} +
-
); } } @@ -363,7 +393,7 @@ class Game extends React.Component { this.state = { boardWords: ingameCards, boardTeams: ingameTeams, - firstteam: firstteam + firstteam: firstteam, }; } @@ -371,23 +401,23 @@ class Game extends React.Component { let status; let order = this.state.firstteam; if (!order) { - status = "Red Team"; + status = 'Red'; } else { - status = "Blue Team"; + status = 'Blue'; } return ( -
- - - - -
-
-
+
+ + + + +
+
+
); } } @@ -545,24 +575,24 @@ function setBoard(order) { } //for words to teams - setTeam("teamA", order); - setTeam("teamB", order); - setTeam("assassin", order); - setTeam("citizen", order); + setTeam('teamA', order); + setTeam('teamB', order); + setTeam('assassin', order); + setTeam('citizen', order); function setTeam(type, order) { let amount = 7; - if (type === "assassin") { + if (type === 'assassin') { amount = 1; } if ( - (order === 0 && type === "teamA") || - (order === 1 && type === "teamB") + (order === 0 && type === 'teamA') || + (order === 1 && type === 'teamB') ) { amount += 2; } else if ( - (order === 1 && type === "teamA") || - (order === 0 && type === "teamB") + (order === 1 && type === 'teamA') || + (order === 0 && type === 'teamB') ) { amount++; } @@ -668,6 +698,16 @@ socket.on("updateBoardstate", function(bs){ button.style.backgroundColor = bs[i][j].color; } } + console.log('number clicked'); + socket.emit('send hint', 'sent!'); +}); + +socket.on('update hints', function(msg) { + let final_message = document.createElement('p'); + console.log(msg); + final_message.innerHTML = msg; + console.log(final_message); + document.getElementsByClassName('chat-container')[0].append(final_message); }); From c018ca4c29730bd3939ef8e39e92e4cae2c7fe35 Mon Sep 17 00:00:00 2001 From: Levy Date: Wed, 9 Oct 2019 21:00:45 -0400 Subject: [PATCH 18/46] selected button --- app/src/App.js | 105 +++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/app/src/App.js b/app/src/App.js index 5604771c..1860635b 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -232,13 +232,13 @@ class Card extends React.Component { render() { return ( - + ); } } @@ -267,7 +267,6 @@ class Chat extends React.Component { return table; } - render() { return (
@@ -399,7 +398,7 @@ class Menu extends React.Component { this.state = { modalIsOpen: true, addGame: false, - selectedRole: "rspymaster" + selectedRole: null }; this.openModal = this.openModal.bind(this); @@ -421,7 +420,7 @@ class Menu extends React.Component {
@@ -491,15 +490,20 @@ class Menu extends React.Component { function makeGray(btn, selected) { let last = document.getElementById(selected.state.selectedRole); - last.disabled = false; - if (last.className === "redrole") { - last.style.backgroundColor = "#ff6666"; - } else { - last.style.backgroundColor = "#4d79ff"; + console.log(last); + if (last !== null) { + last.disabled = false; + last.style.borderColor = "black"; + if (last.className === "redrole") { + last.style.backgroundColor = "#ff6666"; + } else { + last.style.backgroundColor = "#4d79ff"; + } } let b = document.getElementById(btn); b.style.backgroundColor = "gray"; + b.style.borderColor = "gold"; b.disabled = true; selected.state.selectedRole = btn; } @@ -580,47 +584,47 @@ function setBoard(order) { } //send out message to set initial state if it hasnt already -window.onload = function(){ +window.onload = function() { //sets random name upon connecting - localStorage.setItem('userInfo', 'u::'+ Math.random()); + localStorage.setItem("userInfo", "u::" + Math.random()); socket.emit("setInitState", getBoardState(), getBrowserData()); - console.log('initial state is: ', getBoardState()); + console.log("initial state is: ", getBoardState()); }; -function getBrowserData(){ - return {user: localStorage.getItem('userInfo')}; +function getBrowserData() { + return { user: localStorage.getItem("userInfo") }; } -function clickHint(hintbtn){ - setTimeout(function(){ - let newHint = document.getElementById('msg').value; +function clickHint(hintbtn) { + setTimeout(function() { + let newHint = document.getElementById("msg").value; let state = getClueState(newHint); - console.log('hint clicked'); + console.log("hint clicked"); socket.emit("clue sent", state); }, 1); } -function clickGuessButton(btn){ +function clickGuessButton(btn) { btn.changeStyle(btn.props.team); - setTimeout(function(){ + setTimeout(function() { let state = getBoardState(); - console.log('button clicked'); + console.log("button clicked"); socket.emit("button selected", state); }, 1); } -function getBoardState(){ +function getBoardState() { let cards = []; - let collectedCards = document.getElementsByClassName('card'); + let collectedCards = document.getElementsByClassName("card"); const NUM_CARDS_ROW = 5; - for(let i=0; i Date: Wed, 9 Oct 2019 21:02:46 -0400 Subject: [PATCH 19/46] sckt --- app/src/App.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/App.js b/app/src/App.js index 5604771c..60de0e54 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -502,8 +502,11 @@ function makeGray(btn, selected) { b.style.backgroundColor = "gray"; b.disabled = true; selected.state.selectedRole = btn; + //socket.emit("roleSelection", grabRoleState()); } + + function closeMenu(play) { var u = document.getElementById("menuName"); var redspy = document.getElementById("rspymaster"); From 731814b3413a9063c2243b32967ec17e8ac8d5b7 Mon Sep 17 00:00:00 2001 From: Levy Date: Wed, 9 Oct 2019 22:32:39 -0400 Subject: [PATCH 20/46] server/menu fixes --- app/server.js | 178 +++++++++-------- app/src/App.js | 517 ++++++++++++++++++++++++++----------------------- 2 files changed, 362 insertions(+), 333 deletions(-) diff --git a/app/server.js b/app/server.js index f5a648b8..d99a0b16 100644 --- a/app/server.js +++ b/app/server.js @@ -1,30 +1,30 @@ -const express = require('express'); -const path = require('path'); -const cookieParser = require('cookie-parser'); -const logger = require('morgan'); +const express = require("express"); +const path = require("path"); +const cookieParser = require("cookie-parser"); +const logger = require("morgan"); const app = express(); -const server = require('http').createServer(app); -const fs = require('fs'); -const session = require('express-session')({ - secret: 'my-secret', - resave: true, - saveUninitialized: true, - }), - sharedsession = require('express-socket.io-session'); -const socketio = require('socket.io'); +const server = require("http").createServer(app); +const fs = require("fs"); +const session = require("express-session")({ + secret: "my-secret", + resave: true, + saveUninitialized: true + }), + sharedsession = require("express-socket.io-session"); +const socketio = require("socket.io"); const io = socketio.listen(server); io.use(sharedsession(session)); -app.use(logger('dev')); +app.use(logger("dev")); app.use(session); app.use(express.json()); -app.use(express.urlencoded({extended: false})); +app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); -app.use(express.static(path.join(__dirname, 'public'))); +app.use(express.static(path.join(__dirname, "public"))); app.applyPort = function(port) { server.listen(port); - let message = 'listening on port: ' + port; + let message = "listening on port: " + port; console.log(message); }; app.applyPort(8080); @@ -36,96 +36,101 @@ var clientList = []; var boardState = []; let hints = []; -function updateAll(){ - sendBoardUpdate(); - sendClueUpdate(); +function updateAll() { + sendBoardUpdate(); + sendClueUpdate(); } -function sendBoardUpdate(){ - io.sockets.emit("updateBoardstate", boardState); +function sendBoardUpdate() { + io.sockets.emit("updateBoardstate", boardState); } -function sendClueUpdate(){ - io.sockets.emit("updateCluestate", clueLog); +function sendClueUpdate() { + // io.sockets.emit("updateCluestate", clueLog); } - -io.on("connect", function(client){ - console.log("establishing connection with", client.id); - console.log("all clients", clientList); - client.send(client.id); +io.on("connect", function(client) { + console.log("establishing connection with", client.id); + console.log("all clients", clientList); + client.send(client.id); }); io.on("connection", function(socket) { - - socket.on('disableOthers', function() { - console.log('clicked disable'); - socket.broadcast.emit('specMsg', - 'only for ' + socket.handshake.session.userdata); + socket.on("disableOthers", function() { + console.log("clicked disable"); + socket.broadcast.emit( + "specMsg", + "only for " + socket.handshake.session.userdata + ); //io.sockets.to(getSocketFromClient(socket.handshake.session.userdata)).emit("specMsg", 'only for ' + socket.handshake.session.userdata); }); - socket.on("setInitState", function(state, browserCache){ - console.log('session for: ', browserCache, 'socket', socket.id); - let user = browserCache.user; - let found = false; - clientList.forEach(function (element) { - if (element.name && element.name === user) { - console.log("updating " + user + " connection from ", element.connection, 'to', socket.id); - element.connection = socket.id; - io.sockets.emit("displayUser", user); - found = true; - } - }); - if(!found){ - console.log('adding client', user, 'with socket', socket.id); - clientList.push({name: user, connection: socket.id}) - //io.sockets.emit("displayUser", "New User"); - } - - //The first user that connects sets the base cards - if(boardState.length<1){ - console.log('state set to', state); - boardState = state; - }else{ - updateAll(); - console.log('state already is ', boardState); - } + socket.on("setInitState", function(state, browserCache) { + console.log("session for: ", browserCache, "socket", socket.id); + let user = browserCache.user; + let found = false; + clientList.forEach(function(element) { + if (element.name && element.name === user) { + console.log( + "updating " + user + " connection from ", + element.connection, + "to", + socket.id + ); + element.connection = socket.id; + io.sockets.emit("displayUser", user); + found = true; + } }); + if (!found) { + console.log("adding client", user, "with socket", socket.id); + clientList.push({ name: user, connection: socket.id }); + //io.sockets.emit("displayUser", "New User"); + } - socket.on("button selected", function(state) { - boardState = state; - //io.sockets.emit("update hints", full_msg, msg); - //socket.broadcast.emit("update hints", full_msg, msg); - sendBoardUpdate(); - }); + //The first user that connects sets the base cards + if (boardState.length < 1) { + console.log("state set to", state); + boardState = state; + } else { + updateAll(); + console.log("state already is ", boardState); + } + }); + + socket.on("button selected", function(state) { + boardState = state; + //io.sockets.emit("update hints", full_msg, msg); + //socket.broadcast.emit("update hints", full_msg, msg); + sendBoardUpdate(); + }); - socket.on("clue sent", function(clue){ + /* socket.on("clue sent", function(clue){ clueLog.push(clue); sendClueUpdate(); - }); + });*/ - socket.on('hintSubmission', (sender, clue, amt) => { + socket.on("hintSubmission", (sender, clue, amt) => { console.log("hello"); - hints.push({sender: sender, clue: clue, amt: amt}); - socket.emit('hintHistory', hints);x`` + hints.push({ sender: sender, clue: clue, amt: amt }); + socket.emit("hintHistory", hints); }); - socket.on('send hint', function(msg) { + socket.on("send hint", function(msg) { socket.handshake.session.userdata = msg; - clientList.push({name: msg, connection: socket.id}); + clientList.push({ name: msg, connection: socket.id }); socket.handshake.session.save(); - let full_msg = '[ ' + getCurrentDate() + ' ]: ' + msg; + let full_msg = "[ " + getCurrentDate() + " ]: " + msg; //io.sockets.emit("update hints", full_msg, msg); - socket.broadcast.emit('update hints', full_msg, msg); + socket.broadcast.emit("update hints", full_msg, msg); }); }); function getSocketFromClient(cl) { clientList.forEach(function(element) { if (element.name === cl) { - console.log('GetsockFromCl', element.name, element.connection); + console.log("GetsockFromCl", element.name, element.connection); return element.connection; } }); @@ -133,15 +138,16 @@ function getSocketFromClient(cl) { function getCurrentDate() { let currentDate = new Date(); - let day = (currentDate.getDate() < 10 ? '0' : '') + currentDate.getDate(); - let month = ((currentDate.getMonth() + 1) < 10 ? '0' : '') + - (currentDate.getMonth() + 1); + let day = (currentDate.getDate() < 10 ? "0" : "") + currentDate.getDate(); + let month = + (currentDate.getMonth() + 1 < 10 ? "0" : "") + (currentDate.getMonth() + 1); let year = currentDate.getFullYear(); - let hour = (currentDate.getHours() < 10 ? '0' : '') + currentDate.getHours(); - let minute = (currentDate.getMinutes() < 10 ? '0' : '') + - currentDate.getMinutes(); - let second = (currentDate.getSeconds() < 10 ? '0' : '') + - currentDate.getSeconds(); - return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + - second; + let hour = (currentDate.getHours() < 10 ? "0" : "") + currentDate.getHours(); + let minute = + (currentDate.getMinutes() < 10 ? "0" : "") + currentDate.getMinutes(); + let second = + (currentDate.getSeconds() < 10 ? "0" : "") + currentDate.getSeconds(); + return ( + year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second + ); } diff --git a/app/src/App.js b/app/src/App.js index 14eda6eb..8c49c52f 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -1,47 +1,47 @@ -import React from 'react'; -import Modal from 'react-modal'; -import './App.css'; +import React from "react"; +import Modal from "react-modal"; +import "./App.css"; -import socketIOClient from 'socket.io-client'; +import socketIOClient from "socket.io-client"; -const socket = socketIOClient('localhost:8080'); +const socket = socketIOClient("localhost:8080"); //would normally come from database but this is for testing //list of ALL words let allWords = [ - 'wall', - 'back', - 'orange', - 'crash', - 'hawk', - 'kiwi', - 'lab', - 'ice cream', - 'india', - 'theater', - 'plane', - 'parachute', - 'telescope', - 'match', - 'police', - 'post', - 'ray', - 'kid', - 'wind', - 'box', - 'knife', - 'church', - 'bell', - 'lemon', - 'triangle', - 'cap', - 'jam', - 'organ', - 'engine', - 'agent', - 'buck', - 'day', - 'doctor', - 'ball', + "wall", + "back", + "orange", + "crash", + "hawk", + "kiwi", + "lab", + "ice cream", + "india", + "theater", + "plane", + "parachute", + "telescope", + "match", + "police", + "post", + "ray", + "kid", + "wind", + "box", + "knife", + "church", + "bell", + "lemon", + "triangle", + "cap", + "jam", + "organ", + "engine", + "agent", + "buck", + "day", + "doctor", + "ball" ]; function App() { @@ -56,23 +56,23 @@ function App() { ); } -Modal.setAppElement('#root'); +Modal.setAppElement("#root"); class Modals extends React.Component { constructor(props) { super(props); this.state = { words: this.props.words, - teams: this.props.teams, + teams: this.props.teams }; } render() { return ( -
- - -
+
+ + +
); } } @@ -82,7 +82,7 @@ class Info extends React.Component { super(); this.state = { - modalIsOpen: false, + modalIsOpen: false }; this.openModal = this.openModal.bind(this); @@ -90,74 +90,64 @@ class Info extends React.Component { } openModal() { - this.setState({modalIsOpen: true}); + this.setState({ modalIsOpen: true }); } closeModal() { - this.setState({modalIsOpen: false}); + this.setState({ modalIsOpen: false }); } render() { return ( -
- - -
-
+
+ + +
+
× -
-
-
-
How to Play:
-
-
-
-

- On the board there are 25 tiles, each of which have the - codename of different secret agent. Each agent is either a - blue team agent, red team agent, a civilian, or the - assassin. - The game is played with two teams, a red team and a blue - team. - Both teams have one spymaster and one detective. -
-
- At the beginning of the game, only the spymasters can see - the - position of the agents (this can be viewed by clicking on - the - key button). The spymasters will each take turns giving - clues - to their team's detective on which agents belong to their - team. These clues will include a one word hint and the - amount - of agents that the hint relates to. The detective will then - guess which word the clue relates to by clicking on a - codename - tile. If the detective guesses correctly then they will be - able to continue guessing until they have guessed the amount - specified by the spymaster. If the detective's guesses are - all - correct, they will get a free guess which they can choose to - make or pass. If the detective guesses incorrectly it - becomes - the other teams turn. If any detective guesses the assassin - then their team atomatically loses the game. -
-
A team wins the game if their detective can find all of - their team's agents or if the other team accidentally finds - the assassin. Good Luck! -

-
+
+
+
+
How to Play:
+
+
+
+

+ On the board there are 25 tiles, each of which have the + codename of different secret agent. Each agent is either a + blue team agent, red team agent, a civilian, or the assassin. + The game is played with two teams, a red team and a blue team. + Both teams have one spymaster and one detective. +
+
+ At the beginning of the game, only the spymasters can see the + position of the agents (this can be viewed by clicking on the + key button). The spymasters will each take turns giving clues + to their team's detective on which agents belong to their + team. These clues will include a one word hint and the amount + of agents that the hint relates to. The detective will then + guess which word the clue relates to by clicking on a codename + tile. If the detective guesses correctly then they will be + able to continue guessing until they have guessed the amount + specified by the spymaster. If the detective's guesses are all + correct, they will get a free guess which they can choose to + make or pass. If the detective guesses incorrectly it becomes + the other teams turn. If any detective guesses the assassin + then their team atomatically loses the game. +
+
A team wins the game if their detective can find all of + their team's agents or if the other team accidentally finds + the assassin. Good Luck! +

- -
+
+ +
); } } @@ -169,7 +159,7 @@ class Key extends React.Component { this.state = { modalIsOpen: false, boardWords: this.props.boardWords, - boardTeams: this.props.boardTeams, + boardTeams: this.props.boardTeams }; this.openModal = this.openModal.bind(this); @@ -177,43 +167,42 @@ class Key extends React.Component { } openModal() { - this.setState({modalIsOpen: true}); + this.setState({ modalIsOpen: true }); } closeModal() { - this.setState({modalIsOpen: false}); + this.setState({ modalIsOpen: false }); } render() { return ( -
- - -
-
+
+ + +
+
× -
-
-
-
Key:
-
-
-
- -
+
+
+
+
Key:
+
+
+
+
- -
+
+ +
); } } @@ -222,24 +211,24 @@ class Card extends React.Component { constructor(props) { super(props); this.changeStyle = this.changeStyle.bind(this); - let cardColor = 'tan'; - if (this.props.team === 'teamA') { - cardColor = 'red'; - } else if (this.props.team === 'teamB') { - cardColor = 'blue'; - } else if (this.props.team === 'assassin') { - cardColor = 'black'; + let cardColor = "tan"; + if (this.props.team === "teamA") { + cardColor = "red"; + } else if (this.props.team === "teamB") { + cardColor = "blue"; + } else if (this.props.team === "assassin") { + cardColor = "black"; } if (this.props.keyboard === true) { - this.state = {color: cardColor, cardColor: cardColor}; + this.state = { color: cardColor, cardColor: cardColor }; } else { - this.state = {color: null, cardColor: cardColor}; + this.state = { color: null, cardColor: cardColor }; } } changeStyle(color) { this.setState({ - color: this.state.cardColor, + color: this.state.cardColor }); } @@ -263,33 +252,32 @@ class Chat extends React.Component { team: this.props.team, wordsLeft: props.wordsLeft, log: [], - clue: '' + clue: "" }; - socket.on('hintHistory', (hints)=>{ + socket.on("hintHistory", hints => { console.log(hints); - this.setState({log: hints}) - }) + this.setState({ log: hints }); + }); } submitHint(amount) { - if (this.state.clue === '') { + if (this.state.clue === "") { return; } - socket.emit('hintSubmission', this.state.team, this.state.clue, amount); + socket.emit("hintSubmission", this.state.team, this.state.clue, amount); } createAmounts() { let table = []; for (let i = 0; i < 10; i++) { table.push( -
this.submitHint(i)} - className={'amount' + - (i <= this.state.wordsLeft ? '' : ' disabled')} - > - {i} -
, +
this.submitHint(i)} + className={"amount" + (i <= this.state.wordsLeft ? "" : " disabled")} + > + {i} +
); } return table; @@ -297,23 +285,29 @@ class Chat extends React.Component { render() { return ( -
-
- {this.state.log.map(hint => { - return ( -
- {hint.clue} : {hint.amt} -
- ); - })} -
- this.setState( - {clue: e.target.value})} - id="msg"/> -
{this.createAmounts()}
-
+
+
+ {this.state.log.map(hint => { + return ( +
+ {hint.clue} : {hint.amt} +
+ ); + })} +
+ this.setState({ clue: e.target.value })} + id="msg" + /> +
{this.createAmounts()}
+
); } } @@ -324,59 +318,59 @@ class Board extends React.Component { this.state = { words: this.props.words, teams: this.props.teams, - keyboard: this.props.keyboard, + keyboard: this.props.keyboard }; } renderCard(i) { return ( - + ); } render() { return ( -
-
- {this.renderCard(0)} - {this.renderCard(1)} - {this.renderCard(2)} - {this.renderCard(3)} - {this.renderCard(4)} -
-
- {this.renderCard(5)} - {this.renderCard(6)} - {this.renderCard(7)} - {this.renderCard(8)} - {this.renderCard(9)} -
-
- {this.renderCard(10)} - {this.renderCard(11)} - {this.renderCard(12)} - {this.renderCard(13)} - {this.renderCard(14)} -
-
- {this.renderCard(15)} - {this.renderCard(16)} - {this.renderCard(17)} - {this.renderCard(18)} - {this.renderCard(19)} -
-
- {this.renderCard(20)} - {this.renderCard(21)} - {this.renderCard(22)} - {this.renderCard(23)} - {this.renderCard(24)} -
+
+
+ {this.renderCard(0)} + {this.renderCard(1)} + {this.renderCard(2)} + {this.renderCard(3)} + {this.renderCard(4)}
+
+ {this.renderCard(5)} + {this.renderCard(6)} + {this.renderCard(7)} + {this.renderCard(8)} + {this.renderCard(9)} +
+
+ {this.renderCard(10)} + {this.renderCard(11)} + {this.renderCard(12)} + {this.renderCard(13)} + {this.renderCard(14)} +
+
+ {this.renderCard(15)} + {this.renderCard(16)} + {this.renderCard(17)} + {this.renderCard(18)} + {this.renderCard(19)} +
+
+ {this.renderCard(20)} + {this.renderCard(21)} + {this.renderCard(22)} + {this.renderCard(23)} + {this.renderCard(24)} +
+
); } } @@ -392,7 +386,7 @@ class Game extends React.Component { this.state = { boardWords: ingameCards, boardTeams: ingameTeams, - firstteam: firstteam, + firstteam: firstteam }; } @@ -400,23 +394,23 @@ class Game extends React.Component { let status; let order = this.state.firstteam; if (!order) { - status = 'Red'; + status = "Red"; } else { - status = 'Blue'; + status = "Blue"; } return ( -
- - - - -
-
-
+
+ + + + +
+
+
); } } @@ -508,6 +502,9 @@ class Menu extends React.Component { +
@@ -519,7 +516,7 @@ class Menu extends React.Component { } function makeGray(btn, selected) { - let last = document.getElementById(selected.state.selectedRole); + /*let last = document.getElementById(selected.state.selectedRole); console.log(last); if (last !== null) { last.disabled = false; @@ -529,15 +526,42 @@ function makeGray(btn, selected) { } else { last.style.backgroundColor = "#4d79ff"; } - } + }*/ + + var redspy = document.getElementById("rspymaster"); + var reddet = document.getElementById("rdetective"); + var bluespy = document.getElementById("bspymaster"); + var bluedet = document.getElementById("bdetective"); + bluespy.disabled = true; + redspy.disabled = true; + reddet.disabled = true; + bluedet.disabled = true; let b = document.getElementById(btn); b.style.backgroundColor = "gray"; b.style.borderColor = "gold"; - b.disabled = true; selected.state.selectedRole = btn; } +function resetMenu(play) { + var redspy = document.getElementById("rspymaster"); + var reddet = document.getElementById("rdetective"); + var bluespy = document.getElementById("bspymaster"); + var bluedet = document.getElementById("bdetective"); + redspy.style.backgroundColor = "#ff6666"; + redspy.style.borderColor = "black"; + redspy.disabled = false; + bluespy.style.backgroundColor = "#4d79ff"; + bluespy.style.borderColor = "black"; + bluespy.disabled = false; + reddet.style.backgroundColor = "#ff6666"; + reddet.style.borderColor = "black"; + reddet.disabled = false; + bluedet.style.backgroundColor = "#4d79ff"; + bluedet.style.borderColor = "black"; + bluedet.disabled = false; +} + function closeMenu(play) { var u = document.getElementById("menuName"); var redspy = document.getElementById("rspymaster"); @@ -546,17 +570,16 @@ function closeMenu(play) { var bluedet = document.getElementById("bdetective"); var username = u.value; console.log(username); - if ( - redspy.disabled === true && - bluespy.disabled === true && - reddet.disabled === true && - bluedet.disabled === true - ) { + if (allSelected()) { play.state.addGame = true; play.closeModal(); } } +function allSelected() { + return true; +} + //takes full list of words and picks 25 unique for a game function setBoard(order) { let boardWords = Array(25).fill(null); @@ -579,24 +602,24 @@ function setBoard(order) { } //for words to teams - setTeam('teamA', order); - setTeam('teamB', order); - setTeam('assassin', order); - setTeam('citizen', order); + setTeam("teamA", order); + setTeam("teamB", order); + setTeam("assassin", order); + setTeam("citizen", order); function setTeam(type, order) { let amount = 7; - if (type === 'assassin') { + if (type === "assassin") { amount = 1; } if ( - (order === 0 && type === 'teamA') || - (order === 1 && type === 'teamB') + (order === 0 && type === "teamA") || + (order === 1 && type === "teamB") ) { amount += 2; } else if ( - (order === 1 && type === 'teamA') || - (order === 0 && type === 'teamB') + (order === 1 && type === "teamA") || + (order === 0 && type === "teamB") ) { amount++; } @@ -702,16 +725,16 @@ socket.on("updateBoardstate", function(bs) { button.style.backgroundColor = bs[i][j].color; } } - console.log('number clicked'); - socket.emit('send hint', 'sent!'); + console.log("number clicked"); + socket.emit("send hint", "sent!"); }); -socket.on('update hints', function(msg) { - let final_message = document.createElement('p'); +socket.on("update hints", function(msg) { + let final_message = document.createElement("p"); console.log(msg); final_message.innerHTML = msg; console.log(final_message); - document.getElementsByClassName('chat-container')[0].append(final_message); + document.getElementsByClassName("chat-container")[0].append(final_message); }); export default App; From c93cba43c06e917a38cce16fbb9fc387fc42018e Mon Sep 17 00:00:00 2001 From: dandaman2 Date: Wed, 9 Oct 2019 22:40:17 -0400 Subject: [PATCH 21/46] role selection1 --- app/server.js | 42 +++++++++++++++++++++++++++++++++++++----- app/src/App.js | 11 +++++++++-- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/app/server.js b/app/server.js index f5a648b8..b0d11288 100644 --- a/app/server.js +++ b/app/server.js @@ -35,17 +35,27 @@ module.exports = app; var clientList = []; var boardState = []; let hints = []; +let roleState = { + bspymaster: '', + rspymaster:'', + bdetective: '', + rdetetctive: '', +}; function updateAll(){ sendBoardUpdate(); sendClueUpdate(); } +function sendRoleState(){ + //io.sockets.emit("updateBoardstate", boardState); +} + function sendBoardUpdate(){ io.sockets.emit("updateBoardstate", boardState); } function sendClueUpdate(){ - io.sockets.emit("updateCluestate", clueLog); + //io.sockets.emit("updateCluestate", clueLog); } @@ -56,7 +66,6 @@ io.on("connect", function(client){ }); io.on("connection", function(socket) { - socket.on('disableOthers', function() { console.log('clicked disable'); socket.broadcast.emit('specMsg', @@ -79,7 +88,7 @@ io.on("connection", function(socket) { }); if(!found){ console.log('adding client', user, 'with socket', socket.id); - clientList.push({name: user, connection: socket.id}) + clientList.push({name: user, connection: socket.id, role: 'none'}) //io.sockets.emit("displayUser", "New User"); } @@ -88,6 +97,7 @@ io.on("connection", function(socket) { console.log('state set to', state); boardState = state; }else{ + sendRoleState(); updateAll(); console.log('state already is ', boardState); } @@ -101,14 +111,14 @@ io.on("connection", function(socket) { }); socket.on("clue sent", function(clue){ - clueLog.push(clue); + //clueLog.push(clue); sendClueUpdate(); }); socket.on('hintSubmission', (sender, clue, amt) => { console.log("hello"); hints.push({sender: sender, clue: clue, amt: amt}); - socket.emit('hintHistory', hints);x`` + socket.emit('hintHistory', hints); }); socket.on('send hint', function(msg) { @@ -120,8 +130,30 @@ io.on("connection", function(socket) { //io.sockets.emit("update hints", full_msg, msg); socket.broadcast.emit('update hints', full_msg, msg); }); + + socket.on("roleSelection", function(role){ + console.log(role); + + setRole(socket.id, role); + greyRole(role); + console.log(clientList); + console.log(roleState); + }); }); +function greyRole(role){ + io.sockets.emit("greyRole", role); +} + +function setRole(socketID, role){ + clientList.forEach(function(cl){ + if(cl.connection === socketID){ + cl.role = role; + roleState[role] = socketID; + } + }); +} + function getSocketFromClient(cl) { clientList.forEach(function(element) { if (element.name === cl) { diff --git a/app/src/App.js b/app/src/App.js index f4e17752..f2a75d04 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -536,7 +536,7 @@ function makeGray(btn, selected) { b.style.borderColor = "gold"; b.disabled = true; selected.state.selectedRole = btn; - //socket.emit("roleSelection", grabRoleState()); + socket.emit("roleSelection", selected.state.selectedRole); } @@ -706,7 +706,7 @@ socket.on("updateBoardstate", function(bs) { } } console.log('number clicked'); - socket.emit('send hint', 'sent!'); + //socket.emit('send hint', 'sent!'); }); socket.on('update hints', function(msg) { @@ -717,4 +717,11 @@ socket.on('update hints', function(msg) { document.getElementsByClassName('chat-container')[0].append(final_message); }); +socket.on('greyRole', function(role){ + console.log('greying role', role); + let button = document.getElementById(role); + button.style.backgroundColor = "grey"; + button.disabled = true; +}); + export default App; From 2ed149815213ad9927f2ae6dbeb37c7231d5561c Mon Sep 17 00:00:00 2001 From: Levy Date: Wed, 9 Oct 2019 23:01:25 -0400 Subject: [PATCH 22/46] changed how to play --- app/src/App.js | 82 ++++++++------------------------------------------ 1 file changed, 13 insertions(+), 69 deletions(-) diff --git a/app/src/App.js b/app/src/App.js index 8c49c52f..8533156c 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -70,7 +70,6 @@ class Modals extends React.Component { render() { return (
-
); @@ -125,19 +124,19 @@ class Info extends React.Component {

At the beginning of the game, only the spymasters can see the - position of the agents (this can be viewed by clicking on the - key button). The spymasters will each take turns giving clues - to their team's detective on which agents belong to their - team. These clues will include a one word hint and the amount - of agents that the hint relates to. The detective will then - guess which word the clue relates to by clicking on a codename - tile. If the detective guesses correctly then they will be - able to continue guessing until they have guessed the amount - specified by the spymaster. If the detective's guesses are all - correct, they will get a free guess which they can choose to - make or pass. If the detective guesses incorrectly it becomes - the other teams turn. If any detective guesses the assassin - then their team atomatically loses the game. + position of the agents (displayed by the border of the cards). + The spymasters will each take turns giving clues to their + team's detective on which agents belong to their team. These + clues will include a one word hint and the amount of agents + that the hint relates to. The detective will then guess which + word the clue relates to by clicking on a codename tile. If + the detective guesses correctly then they will be able to + continue guessing until they have guessed the amount specified + by the spymaster. If the detective's guesses are all correct, + they will get a free guess which they can choose to make or + pass. If the detective guesses incorrectly it becomes the + other teams turn. If any detective guesses the assassin then + their team atomatically loses the game.

A team wins the game if their detective can find all of their team's agents or if the other team accidentally finds @@ -152,61 +151,6 @@ class Info extends React.Component { } } -class Key extends React.Component { - constructor(props) { - super(props); - - this.state = { - modalIsOpen: false, - boardWords: this.props.boardWords, - boardTeams: this.props.boardTeams - }; - - this.openModal = this.openModal.bind(this); - this.closeModal = this.closeModal.bind(this); - } - - openModal() { - this.setState({ modalIsOpen: true }); - } - - closeModal() { - this.setState({ modalIsOpen: false }); - } - - render() { - return ( -
- - -
-
- - × - -
-
-
-
Key:
-
-
-
- -
-
-
-
-
- ); - } -} - class Card extends React.Component { constructor(props) { super(props); From e1645bf85abc2de87f1dbb518017cca14301ac7c Mon Sep 17 00:00:00 2001 From: dandaman2 Date: Wed, 9 Oct 2019 23:46:59 -0400 Subject: [PATCH 23/46] MODALS ARE HARD --- app/server.js | 14 +++++++++++++- app/src/App.js | 24 ++++++++++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/app/server.js b/app/server.js index 7ce66a4e..7b32fe6c 100644 --- a/app/server.js +++ b/app/server.js @@ -39,7 +39,7 @@ let roleState = { bspymaster: '', rspymaster:'', bdetective: '', - rdetetctive: '', + rdetective: '', }; function updateAll() { @@ -141,6 +141,18 @@ io.on("connection", function(socket) { console.log(clientList); console.log(roleState); }); + + socket.on("allSelected", function(){ + let allSel = roleState["bdetective"] && roleState["rdetective"] && roleState["bspymaster"] && roleState["rspymaster"]; + console.log(allSel, 'ROLES', roleState); + io.sockets.emit("allSelectedStatus", allSel); + }); + + socket.on("startGame", function(){ + socket.broadcast.emit("closeModal"); + //logic to start the game + }); + }); function greyRole(role){ diff --git a/app/src/App.js b/app/src/App.js index e9b3399b..0d8b7638 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -7,6 +7,7 @@ import socketIOClient from "socket.io-client"; const socket = socketIOClient("localhost:8080"); //would normally come from database but this is for testing //list of ALL words +let allReady = false; let allWords = [ "wall", "back", @@ -499,7 +500,7 @@ class Menu extends React.Component {

-
@@ -350,8 +333,6 @@ class Game extends React.Component { keyboard={false} /> - -

@@ -365,7 +346,6 @@ class Menu extends React.Component { this.state = { modalIsOpen: true, - addGame: false, selectedRole: null }; @@ -386,6 +366,7 @@ class Menu extends React.Component {
Date: Wed, 9 Oct 2019 23:29:59 -0400 Subject: [PATCH 25/46] Broadcast chat to all clients --- app/server.js | 2 +- app/src/App.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/server.js b/app/server.js index 7b32fe6c..4cf89bae 100644 --- a/app/server.js +++ b/app/server.js @@ -120,7 +120,7 @@ io.on("connection", function(socket) { socket.on("hintSubmission", (sender, clue, amt) => { console.log("hello"); hints.push({ sender: sender, clue: clue, amt: amt }); - socket.emit("hintHistory", hints); + io.sockets.emit("hintHistory", hints); }); socket.on("send hint", function(msg) { diff --git a/app/src/App.js b/app/src/App.js index 0de4eef6..8f341fbf 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -232,10 +232,10 @@ class Chat extends React.Component { return (
- {this.state.log.map(hint => { + {this.state.log.map((hint, index) => { return (
From 0bc42ec1c42c5ae6f24bb768e046dfa8635cd8ee Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Thu, 10 Oct 2019 00:02:34 -0400 Subject: [PATCH 26/46] Play closes all modals --- app/src/App.js | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/app/src/App.js b/app/src/App.js index 8f341fbf..78b55481 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -45,18 +45,39 @@ let allWords = [ "ball" ]; -function App() { - return ( -
-
-

Codenames

-
- - -
- ); +class App extends React.Component { + constructor(props) { + super(props); + this.state = { + modalOpen: true, + }; + + socket.on("closeModal", this.closeModal.bind(this)); + } + + closeModal() { + console.log("closeModal"); + this.setState({modalOpen: false}); + } + + + + render() { + return ( +
+
+

Codenames

+
+ {this.state.modalOpen && + + } + +
+ ); + } } + Modal.setAppElement("#root"); class Modals extends React.Component { From 7ac9001eac00e80c2bd3df47dbca35359af0b2f8 Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Thu, 10 Oct 2019 00:13:27 -0400 Subject: [PATCH 27/46] Remove merge conflict --- app/src/App.js | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/app/src/App.js b/app/src/App.js index 749e131b..72e64371 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -45,19 +45,6 @@ let allWords = [ "ball" ]; -<<<<<<< HEAD -function App() { - return ( -
-
-

Codenames

- -
- - -
- ); -======= class App extends React.Component { constructor(props) { super(props); @@ -88,7 +75,6 @@ class App extends React.Component {
); } ->>>>>>> 0bc42ec1c42c5ae6f24bb768e046dfa8635cd8ee } From fb0d61bc8f3f5a2c113efc6f23c013cdef82386b Mon Sep 17 00:00:00 2001 From: Levy Date: Thu, 10 Oct 2019 00:31:11 -0400 Subject: [PATCH 28/46] merge --- app/src/App.js | 61 +++++++++----------------------------------------- 1 file changed, 11 insertions(+), 50 deletions(-) diff --git a/app/src/App.js b/app/src/App.js index 749e131b..6c005bae 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -45,53 +45,33 @@ let allWords = [ "ball" ]; -<<<<<<< HEAD -function App() { - return ( -
-
-

Codenames

- -
- - -
- ); -======= class App extends React.Component { constructor(props) { super(props); this.state = { - modalOpen: true, + modalOpen: true }; socket.on("closeModal", this.closeModal.bind(this)); } closeModal() { - console.log("closeModal"); - this.setState({modalOpen: false}); + this.setState({ modalOpen: false }); } - - render() { return ( -
-
-

Codenames

-
- {this.state.modalOpen && - - } - -
+
+
+

Codenames

+
+ {this.state.modalOpen && } + +
); } ->>>>>>> 0bc42ec1c42c5ae6f24bb768e046dfa8635cd8ee } - Modal.setAppElement("#root"); class Modals extends React.Component { @@ -217,7 +197,6 @@ class Chat extends React.Component { clue: "" }; socket.on("hintHistory", hints => { - console.log(hints); this.setState({ log: hints }); }); } @@ -251,11 +230,7 @@ class Chat extends React.Component {
{this.state.log.map((hint, index) => { return ( -
+
{hint.clue} : {hint.amt}
); @@ -522,7 +497,6 @@ function closeMenu(play) { var bluespy = document.getElementById("bspymaster"); var bluedet = document.getElementById("bdetective"); var username = u.value; - console.log(username); if (allReady) { play.closeModal(); socket.emit("startGame"); @@ -581,7 +555,7 @@ function setBoard(order) { } } } - + console.log(boardTeams); return [boardWords, boardTeams]; } @@ -591,7 +565,6 @@ window.onload = function() { localStorage.setItem("userInfo", "u::" + Math.random()); socket.emit("setInitState", getBoardState(), getBrowserData()); - console.log("initial state is: ", getBoardState()); }; function getBrowserData() { @@ -602,7 +575,6 @@ function clickHint(hintbtn) { setTimeout(function() { let newHint = document.getElementById("msg").value; let state = getClueState(newHint); - console.log("hint clicked"); socket.emit("clue sent", state); }, 1); } @@ -611,7 +583,6 @@ function clickGuessButton(btn) { btn.changeStyle(btn.props.team); setTimeout(function() { let state = getBoardState(); - console.log("button clicked"); socket.emit("button selected", state); }, 1); } @@ -630,7 +601,6 @@ function getBoardState() { }; } } - console.log(cards); return cards; } @@ -652,15 +622,12 @@ socket.on("updateCluestate", function(cs) { //chatCont.innerHTML = ''; cs.forEach(function(msg) { let final_message = document.createElement("p"); - console.log(msg); final_message.innerHTML = msg; - console.log(final_message); chatCont.append(final_message); }); }); socket.on("updateBoardstate", function(bs) { - console.log("updating board state", bs); if (bs.length < 1) { return; } @@ -669,25 +636,20 @@ socket.on("updateBoardstate", function(bs) { let cardsInRow = rows[i].getElementsByClassName("card"); for (let j = 0; j < cardsInRow.length; j++) { let button = cardsInRow[j]; - console.log(bs[i][j]); button.innerHTML = bs[i][j].word; button.style.backgroundColor = bs[i][j].color; } } - console.log("number clicked"); //socket.emit('send hint', 'sent!'); }); socket.on("update hints", function(msg) { let final_message = document.createElement("p"); - console.log(msg); final_message.innerHTML = msg; - console.log(final_message); document.getElementsByClassName("chat-container")[0].append(final_message); }); socket.on("greyRole", function(role) { - console.log("greying role", role); let button = document.getElementById(role); button.style.backgroundColor = "grey"; button.disabled = true; @@ -695,7 +657,6 @@ socket.on("greyRole", function(role) { }); socket.on("allSelectedStatus", function(status) { - console.log("status", status); if (status) { allReady = true; } From 7ae4c086283e64dac00cfd9378157a99fc6ae6e5 Mon Sep 17 00:00:00 2001 From: dandaman2 Date: Thu, 10 Oct 2019 00:31:28 -0400 Subject: [PATCH 29/46] shtuff --- app/server.js | 4 ++-- app/src/App.js | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/server.js b/app/server.js index 7b32fe6c..b99b4348 100644 --- a/app/server.js +++ b/app/server.js @@ -48,7 +48,7 @@ function updateAll() { } function sendRoleState(){ - //io.sockets.emit("updateBoardstate", boardState); + io.sockets.emit("updateRoleState", roleState); } function sendBoardUpdate(){ @@ -84,7 +84,7 @@ io.on("connection", function(socket) { if (element.name && element.name === user) { console.log("updating " + user + " connection from ", element.connection, 'to', socket.id); element.connection = socket.id; - io.sockets.emit("displayUser", user); + //io.sockets.emit("displayUser", user); found = true; } }); diff --git a/app/src/App.js b/app/src/App.js index 0de4eef6..52b85f37 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -583,15 +583,12 @@ function setBoard(order) { //send out message to set initial state if it hasnt already window.onload = function() { - //sets random name upon connecting - localStorage.setItem("userInfo", "u::" + Math.random()); - + console.log('the sessionstorage: ', sessionStorage.getItem("userInfo")); socket.emit("setInitState", getBoardState(), getBrowserData()); - console.log("initial state is: ", getBoardState()); }; function getBrowserData() { - return { user: localStorage.getItem("userInfo") }; + return { user: sessionStorage.getItem("userInfo") || 'USER'}; } function clickHint(hintbtn) { @@ -697,6 +694,18 @@ socket.on("allSelectedStatus", function(status){ } }); +socket.on("updateRoleState", function(rs){ + for(let role in rs){ + if(rs.hasOwnProperty(role) && rs[role]){ + console.log('greying role', role); + let button = document.getElementById(role); + button.style.backgroundColor = "grey"; + button.disabled = true; + } + } + +}); + socket.on("closeModal", ()=>{ //document.getElementById("playBtn").click(); }); From 42d510a1ceb9733f025038d338d9bc5aad907cd7 Mon Sep 17 00:00:00 2001 From: Levy Date: Thu, 10 Oct 2019 00:45:05 -0400 Subject: [PATCH 30/46] added borders --- app/src/App.js | 47 +++++++++++++++++++---------------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/app/src/App.js b/app/src/App.js index 6c005bae..1b3ceb77 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -3,6 +3,7 @@ import Modal from "react-modal"; import "./App.css"; import socketIOClient from "socket.io-client"; +import { SSL_OP_SINGLE_DH_USE } from "constants"; const socket = socketIOClient("localhost:8080"); //would normally come from database but this is for testing @@ -64,6 +65,7 @@ class App extends React.Component {

Codenames

+
{this.state.modalOpen && } @@ -161,11 +163,7 @@ class Card extends React.Component { } else if (this.props.team === "assassin") { cardColor = "black"; } - if (this.props.keyboard === true) { - this.state = { color: cardColor, cardColor: cardColor }; - } else { - this.state = { color: null, cardColor: cardColor }; - } + this.state = { color: null, cardColor: cardColor, cardBorder: cardColor }; } changeStyle(color) { @@ -178,7 +176,11 @@ class Card extends React.Component { return (
+ {this.props.role.endsWith("spymaster") && +
+ this.setState({clue: e.target.value})} + id="msg" + /> +
{this.createAmounts()}
+
+ } +
); } @@ -326,7 +333,7 @@ class Game extends React.Component { this.state = { boardWords: ingameCards, boardTeams: ingameTeams, - firstteam: firstteam + firstteam: firstteam, }; } @@ -340,8 +347,11 @@ class Game extends React.Component { } return (
- - + +

@@ -353,6 +363,8 @@ class Menu extends React.Component { constructor(props) { super(props); + this.selectRole = props.selectRole; + this.state = { modalIsOpen: true, selectedRole: null @@ -362,6 +374,7 @@ class Menu extends React.Component { this.closeModal = this.closeModal.bind(this); } + openModal() { this.setState({ modalIsOpen: true }); } @@ -467,6 +480,7 @@ function makeGray(btn, selected) { b.style.backgroundColor = "gray"; b.style.borderColor = "gold"; selected.state.selectedRole = btn; + selected.selectRole(btn); socket.emit("roleSelection", selected.state.selectedRole); } @@ -568,14 +582,6 @@ function getBrowserData() { return { user: sessionStorage.getItem("userInfo") || 'USER'}; } -function clickHint(hintbtn) { - setTimeout(function() { - let newHint = document.getElementById("msg").value; - let state = getClueState(newHint); - socket.emit("clue sent", state); - }, 1); -} - function getBoardState() { let cards = []; let collectedCards = document.getElementsByClassName("card"); @@ -593,29 +599,6 @@ function getBoardState() { return cards; } -function getClueState(newHint) { - let chatCont = document.getElementsByClassName("chat-container")[0]; - let chats = chatCont.getElementsByTagName("p"); - let chatText = []; - for (let i = 0; i < chats.length; i++) { - chatText.push(chats[i].innerHTML); - } - if (newHint) { - chatText.push(newHint); - } - return chatText; -} - -socket.on("updateCluestate", function(cs) { - let chatCont = document.getElementsByClassName("chat-container")[0]; - //chatCont.innerHTML = ''; - cs.forEach(function(msg) { - let final_message = document.createElement("p"); - final_message.innerHTML = msg; - chatCont.append(final_message); - }); -}); - socket.on("updateBoardstate", function(bs) { if (bs.length < 1) { return; From 0a4dfcd141f4015c8b94e8d393def136e5421ba9 Mon Sep 17 00:00:00 2001 From: Levy Date: Thu, 10 Oct 2019 02:05:42 -0400 Subject: [PATCH 32/46] fixed borders --- app/src/App.js | 66 +++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/app/src/App.js b/app/src/App.js index 1cc2baab..4ba2712b 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -51,7 +51,7 @@ class App extends React.Component { super(props); this.state = { modalOpen: true, - selectedRole: '', + selectedRole: "" }; socket.on("closeModal", this.closeModal.bind(this)); @@ -62,21 +62,21 @@ class App extends React.Component { } selectRole(role) { - this.setState({selectedRole: role}) + this.setState({ selectedRole: role }); } render() { return ( -
-
-

Codenames

- -
- {this.state.modalOpen && - - } - -
+
+
+

Codenames

+ +
+ {this.state.modalOpen && ( + + )} + +
); } } @@ -250,17 +250,17 @@ class Chat extends React.Component {
); })} - {this.props.role.endsWith("spymaster") && + {this.props.role.endsWith("spymaster") && (
this.setState({clue: e.target.value})} - id="msg" + placeholder="Clue" + onChange={e => this.setState({ clue: e.target.value })} + id="msg" />
{this.createAmounts()}
- } -
+ )} +
); } @@ -333,7 +333,7 @@ class Game extends React.Component { this.state = { boardWords: ingameCards, boardTeams: ingameTeams, - firstteam: firstteam, + firstteam: firstteam }; } @@ -347,11 +347,8 @@ class Game extends React.Component { } return (
- - + +

@@ -364,7 +361,6 @@ class Menu extends React.Component { super(props); this.selectRole = props.selectRole; - this.state = { modalIsOpen: true, selectedRole: null @@ -374,7 +370,6 @@ class Menu extends React.Component { this.closeModal = this.closeModal.bind(this); } - openModal() { this.setState({ modalIsOpen: true }); } @@ -574,12 +569,12 @@ function setBoard(order) { //send out message to set initial state if it hasnt already window.onload = function() { - console.log('the sessionstorage: ', sessionStorage.getItem("userInfo")); + console.log("the sessionstorage: ", sessionStorage.getItem("userInfo")); socket.emit("setInitState", getBoardState(), getBrowserData()); }; function getBrowserData() { - return { user: sessionStorage.getItem("userInfo") || 'USER'}; + return { user: sessionStorage.getItem("userInfo") || "USER" }; } function getBoardState() { @@ -634,20 +629,19 @@ socket.on("allSelectedStatus", function(status) { } }); -socket.on("updateRoleState", function(rs){ - for(let role in rs){ - if(rs.hasOwnProperty(role) && rs[role]){ - console.log('greying role', role); - let button = document.getElementById(role); +socket.on("updateRoleState", function(rs) { + for (let role in rs) { + if (rs.hasOwnProperty(role) && rs[role]) { + console.log("greying role", role); + let button = document.getElementById(role); button.style.backgroundColor = "grey"; button.disabled = true; } } - }); -socket.on("closeModal", ()=>{ - //document.getElementById("playBtn").click(); +socket.on("closeModal", () => { + //document.getElementById("playBtn").click(); }); export default App; From 2d88992bc07d42d7893d36a1e3e7ed565dd3c102 Mon Sep 17 00:00:00 2001 From: dandaman2 Date: Thu, 10 Oct 2019 02:53:21 -0400 Subject: [PATCH 33/46] resetting roles works --- app/server.js | 12 +++++++++++- app/src/App.js | 25 ++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/server.js b/app/server.js index 2464f39e..41ccaf7e 100644 --- a/app/server.js +++ b/app/server.js @@ -133,7 +133,7 @@ io.on("connection", function(socket) { }); socket.on("roleSelection", function(role) { - console.log(role); + console.log('JUST SELECTED ROLE', role); setRole(socket.id, role); greyRole(role); @@ -155,6 +155,16 @@ io.on("connection", function(socket) { socket.broadcast.emit("closeModal"); //logic to start the game }); + + socket.on("resetRoles", ()=>{ + roleState = { + bspymaster: "", + rspymaster: "", + bdetective: "", + rdetective: "" + }; + io.sockets.emit("resetRoles"); + }); }); function greyRole(role) { diff --git a/app/src/App.js b/app/src/App.js index dc2cb753..a119f08f 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -499,6 +499,8 @@ function resetMenu(play) { bluedet.style.backgroundColor = "#4d79ff"; bluedet.style.borderColor = "black"; bluedet.disabled = false; + + socket.emit("resetRoles"); } function closeMenu(play) { @@ -578,7 +580,7 @@ window.onload = function() { }; function getBrowserData() { - return { user: sessionStorage.getItem("userInfo") || 'USER'}; + return { user: sessionStorage.getItem("userInfo") || 'USER' + Math.random()}; } function clickHint(hintbtn) { @@ -696,8 +698,25 @@ socket.on("updateRoleState", function(rs){ }); -socket.on("closeModal", ()=>{ - //document.getElementById("playBtn").click(); +socket.on("resetRoles", ()=>{ + var redspy = document.getElementById("rspymaster"); + var reddet = document.getElementById("rdetective"); + var bluespy = document.getElementById("bspymaster"); + var bluedet = document.getElementById("bdetective"); + redspy.style.backgroundColor = "#ff6666"; + redspy.style.borderColor = "black"; + redspy.disabled = false; + bluespy.style.backgroundColor = "#4d79ff"; + bluespy.style.borderColor = "black"; + bluespy.disabled = false; + reddet.style.backgroundColor = "#ff6666"; + reddet.style.borderColor = "black"; + reddet.disabled = false; + bluedet.style.backgroundColor = "#4d79ff"; + bluedet.style.borderColor = "black"; + bluedet.disabled = false; + + allReady = false; }); export default App; From a4770b0b8acb00068d4971ac95211f7ef4911ad8 Mon Sep 17 00:00:00 2001 From: dandaman2 Date: Thu, 10 Oct 2019 04:50:41 -0400 Subject: [PATCH 34/46] Added backend turn logic and screenlock css --- app/server.js | 46 +++++++++++++++++++++++++++++++++++++++------- app/src/App.css | 5 +++++ app/src/App.js | 38 ++++++++++++++++++++------------------ 3 files changed, 64 insertions(+), 25 deletions(-) diff --git a/app/server.js b/app/server.js index 41ccaf7e..c596fd53 100644 --- a/app/server.js +++ b/app/server.js @@ -42,6 +42,19 @@ let roleState = { rdetective: "" }; +function turnAfter(role){ + switch(role){ + case 'bdetective': + return 'rspymaster'; + case 'rspymaster': + return 'rdetective'; + case 'rdetective': + return 'bspymaster'; + case 'bspymaster': + return 'bdetective'; + } +} + function updateAll() { sendBoardUpdate(); sendClueUpdate(); @@ -132,10 +145,10 @@ io.on("connection", function(socket) { socket.broadcast.emit("update hints", full_msg, msg); }); - socket.on("roleSelection", function(role) { + socket.on("roleSelection", function(role, name) { console.log('JUST SELECTED ROLE', role); - setRole(socket.id, role); + setRoleAndName(socket.id, role, name); greyRole(role); console.log(clientList); console.log(roleState); @@ -165,26 +178,45 @@ io.on("connection", function(socket) { }; io.sockets.emit("resetRoles"); }); + + + socket.on("nextTurn", function(lastTurnData){ + let nextRole = ""; + clientList.forEach(function(cli){ + if(socket.id === cli.connection){ + nextRole = turnAfter(cli.role); + } + }); + clientList.forEach(function(cli){ + if(cli.role === nextRole){ + io.to(cli.connection).emit("your turn", lastTurnData); + }else{ + io.to(cli.connection).emit("lockup", getClient(nextRole)); + } + }); + }); + }); function greyRole(role) { io.sockets.emit("greyRole", role); } -function setRole(socketID, role) { +function setRoleAndName(socketID, role, name) { clientList.forEach(function(cl) { if (cl.connection === socketID) { cl.role = role; + cl.name = name; roleState[role] = socketID; } }); } -function getSocketFromClient(cl) { + +function getClient(role) { clientList.forEach(function(element) { - if (element.name === cl) { - console.log("GetsockFromCl", element.name, element.connection); - return element.connection; + if (element.role === role) { + return element; } }); } diff --git a/app/src/App.css b/app/src/App.css index aad97059..109b1854 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -254,3 +254,8 @@ input { text-align: center; padding: 0.5%; } + +.disabled-events{ + pointer-events: none; + opacity: 0.4; +} diff --git a/app/src/App.js b/app/src/App.js index 56d74e74..a48b6507 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -196,13 +196,6 @@ class Card extends React.Component { } } -function clickGuessButton(btn) { - btn.changeStyle(btn.props.team); - setTimeout(function() { - let state = getBoardState(); - socket.emit("button selected", state); - }, 1); -} class Chat extends React.Component { constructor(props) { @@ -476,7 +469,12 @@ function makeGray(btn, selected) { b.style.borderColor = "gold"; selected.state.selectedRole = btn; selected.selectRole(btn); - socket.emit("roleSelection", selected.state.selectedRole); + + let nameInput = document.getElementById("menuName"); + let name = nameInput.value || selected.state.selectedRole; + nameInput.disabled = true; + sessionStorage.setItem("userInfo", name); + socket.emit("roleSelection", selected.state.selectedRole, name); } function resetMenu(play) { @@ -573,20 +571,15 @@ function setBoard(order) { window.onload = function() { console.log("the sessionstorage: ", sessionStorage.getItem("userInfo")); socket.emit("setInitState", getBoardState(), getBrowserData()); + + //for disabling events + //document.getElementsByClassName("modal-body-menu")[0].classList.add('disabled-events'); }; function getBrowserData() { return { user: sessionStorage.getItem("userInfo") || 'USER' + Math.random()}; } -function clickHint(hintbtn) { - setTimeout(function() { - let newHint = document.getElementById("msg").value; - let state = getClueState(newHint); - console.log("hint clicked"); - socket.emit("clue sent", state); - }, 1); -} function clickGuessButton(btn) { btn.changeStyle(btn.props.team); @@ -595,7 +588,6 @@ function clickGuessButton(btn) { console.log("button clicked"); socket.emit("button selected", state); }, 1); - return { user: sessionStorage.getItem("userInfo") || "USER" }; } function getBoardState() { @@ -666,6 +658,7 @@ socket.on("resetRoles", ()=>{ var reddet = document.getElementById("rdetective"); var bluespy = document.getElementById("bspymaster"); var bluedet = document.getElementById("bdetective"); + redspy.style.backgroundColor = "#ff6666"; redspy.style.borderColor = "black"; redspy.disabled = false; @@ -679,7 +672,16 @@ socket.on("resetRoles", ()=>{ bluedet.style.borderColor = "black"; bluedet.disabled = false; + document.getElementById("menuName").disabled = false; + allReady = false; }); - +socket.on("lockup", (playerName)=>{ + //banner to other player name + document.getElementsByClassName("game")[0].classList.add('disabled-events'); +}); +socket.on("your turn", (lastTurnData)=>{ + //banner for yourself + document.getElementsByClassName("game")[0].classList.remove('disabled-events'); +}); export default App; From a00f4acc48d5a602779c29c855915e42776b4de0 Mon Sep 17 00:00:00 2001 From: Levy Date: Thu, 10 Oct 2019 05:10:14 -0400 Subject: [PATCH 35/46] Show correct card colors for spymasters and detectives --- app/package-lock.json | 13 +++ app/package.json | 1 + app/server.js | 85 ++++++++++----- app/src/App.js | 242 +++++++++++++++++------------------------- 4 files changed, 173 insertions(+), 168 deletions(-) diff --git a/app/package-lock.json b/app/package-lock.json index ef7e39d7..7aeae910 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -8605,6 +8605,11 @@ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "optional": true }, + "nanoid": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.2.tgz", + "integrity": "sha512-q0iKJHcLc9rZg/qtJ/ioG5s6/5357bqvkYCpqXJxpcyfK7L5us8+uJllZosqPWou7l6E1lY2Qqoq5ce+AMbFuQ==" + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -11525,6 +11530,14 @@ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" }, + "shortid": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.15.tgz", + "integrity": "sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw==", + "requires": { + "nanoid": "^2.1.0" + } + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", diff --git a/app/package.json b/app/package.json index 46f65be7..cc0b89ed 100644 --- a/app/package.json +++ b/app/package.json @@ -12,6 +12,7 @@ "react-dom": "^16.10.2", "react-modal": "^3.10.1", "react-scripts": "3.2.0", + "shortid": "^2.2.15", "socket.io": "latest", "socket.io-client": "^2.3.0" }, diff --git a/app/server.js b/app/server.js index c596fd53..0be58e4f 100644 --- a/app/server.js +++ b/app/server.js @@ -60,12 +60,27 @@ function updateAll() { sendClueUpdate(); } -function sendRoleState(){ - io.sockets.emit("updateRoleState", roleState); +function sendRoleState() { + io.sockets.emit("updateRoleState", roleState); } function sendBoardUpdate() { - io.sockets.emit("updateBoardstate", boardState); + let detectivelist = boardState.map(card => { + return { + word: card.word, + borderColor: card.revealedColor, + revealedColor: card.revealedColor + }; + }); + clientList.forEach(c => { + console.log(c); + if (c.role.endsWith("spymaster")) { + io.to(c.connection).emit("updateBoardState", boardState); + } else { + io.to(c.connection).emit("updateBoardState", detectivelist); + } + }); + console.log(boardState); } function sendClueUpdate() { //io.sockets.emit("updateCluestate", clueLog); @@ -88,23 +103,28 @@ io.on("connection", function(socket) { //io.sockets.to(getSocketFromClient(socket.handshake.session.userdata)).emit("specMsg", 'only for ' + socket.handshake.session.userdata); }); - socket.on("setInitState", function(state, browserCache){ - console.log('session for: ', browserCache, 'socket', socket.id); - let user = browserCache.user; - let found = false; - clientList.forEach(function (element) { - if (element.name && element.name === user) { - console.log("updating " + user + " connection from ", element.connection, 'to', socket.id); - element.connection = socket.id; - //io.sockets.emit("displayUser", user); - found = true; - } - }); - if(!found){ - console.log('adding client', user, 'with socket', socket.id); - clientList.push({name: user, connection: socket.id, role: 'none'}) - //io.sockets.emit("displayUser", "New User"); - } + socket.on("setInitState", function(state, browserCache) { + console.log("session for: ", browserCache, "socket", socket.id); + let user = browserCache.user; + let found = false; + clientList.forEach(function(element) { + if (element.name && element.name === user) { + console.log( + "updating " + user + " connection from ", + element.connection, + "to", + socket.id + ); + element.connection = socket.id; + //io.sockets.emit("displayUser", user); + found = true; + } + }); + if (!found) { + console.log("adding client", user, "with socket", socket.id); + clientList.push({ name: user, connection: socket.id, role: "none" }); + //io.sockets.emit("displayUser", "New User"); + } //The first user that connects sets the base cards if (boardState.length < 1) { @@ -112,7 +132,6 @@ io.on("connection", function(socket) { boardState = state; } else { sendRoleState(); - updateAll(); console.log("state already is ", boardState); } }); @@ -145,13 +164,25 @@ io.on("connection", function(socket) { socket.broadcast.emit("update hints", full_msg, msg); }); +<<<<<<< HEAD socket.on("roleSelection", function(role, name) { console.log('JUST SELECTED ROLE', role); setRoleAndName(socket.id, role, name); +======= + socket.on("guessed", word => { + boardState.forEach(card => { + if (card.word === word) { + card.revealedColor = card.borderColor; + } + }); + sendBoardUpdate(); + }); + + socket.on("roleSelection", function(role) { + setRole(socket.id, role); +>>>>>>> Show correct card colors for spymasters and detectives greyRole(role); - console.log(clientList); - console.log(roleState); }); socket.on("allSelected", function() { @@ -160,11 +191,11 @@ io.on("connection", function(socket) { roleState["rdetective"] && roleState["bspymaster"] && roleState["rspymaster"]; - console.log(allSel, "ROLES", roleState); io.sockets.emit("allSelectedStatus", allSel); }); socket.on("startGame", function() { + sendBoardUpdate(); socket.broadcast.emit("closeModal"); //logic to start the game }); @@ -199,10 +230,16 @@ io.on("connection", function(socket) { }); function greyRole(role) { + console.log("Sending greyRole"); io.sockets.emit("greyRole", role); } +<<<<<<< HEAD function setRoleAndName(socketID, role, name) { +======= +function setRole(socketID, role) { + console.log(`setRole(${socketID}, ${role})`); +>>>>>>> Show correct card colors for spymasters and detectives clientList.forEach(function(cl) { if (cl.connection === socketID) { cl.role = role; diff --git a/app/src/App.js b/app/src/App.js index a48b6507..dd7f2c2c 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -1,5 +1,6 @@ import React from "react"; import Modal from "react-modal"; +import shortid from "shortid"; import "./App.css"; import socketIOClient from "socket.io-client"; @@ -54,9 +55,12 @@ class App extends React.Component { selectedRole: "" }; + console.log("App"); socket.on("closeModal", this.closeModal.bind(this)); } + componentDidMount() {} + closeModal() { this.setState({ modalOpen: false }); } @@ -162,15 +166,10 @@ class Card extends React.Component { constructor(props) { super(props); this.changeStyle = this.changeStyle.bind(this); - let cardColor = "tan"; - if (this.props.team === "teamA") { - cardColor = "red"; - } else if (this.props.team === "teamB") { - cardColor = "blue"; - } else if (this.props.team === "assassin") { - cardColor = "black"; - } - this.state = { color: null, cardColor: cardColor, cardBorder: cardColor }; + this.state = { + word: this.props.word, + borderColor: this.props.border + }; } changeStyle(color) { @@ -182,13 +181,14 @@ class Card extends React.Component { render() { return ( @@ -196,7 +196,6 @@ class Card extends React.Component { } } - class Chat extends React.Component { constructor(props) { super(props); @@ -263,53 +262,39 @@ class Board extends React.Component { constructor(props) { super(props); this.state = { - words: this.props.words, - teams: this.props.teams + cards: this.props.cards }; + socket.on("updateBoardState", bs => { + console.log("Received update board state"); + console.log(bs); + this.setState({ cards: bs }); + }); } - renderCard(i) { - return ; + renderCard(card) { + return ( + + ); } render() { return ( -
-
- {this.renderCard(0)} - {this.renderCard(1)} - {this.renderCard(2)} - {this.renderCard(3)} - {this.renderCard(4)} -
-
- {this.renderCard(5)} - {this.renderCard(6)} - {this.renderCard(7)} - {this.renderCard(8)} - {this.renderCard(9)} -
-
- {this.renderCard(10)} - {this.renderCard(11)} - {this.renderCard(12)} - {this.renderCard(13)} - {this.renderCard(14)} -
-
- {this.renderCard(15)} - {this.renderCard(16)} - {this.renderCard(17)} - {this.renderCard(18)} - {this.renderCard(19)} -
-
- {this.renderCard(20)} - {this.renderCard(21)} - {this.renderCard(22)} - {this.renderCard(23)} - {this.renderCard(24)} -
+
+ {[0, 1, 2, 3, 4].map(n => { + return ( +
+ {" "} + {[0, 1, 2, 3, 4].map(m => { + return this.renderCard(this.state.cards[n * 5 + m]); + })} +
+ ); + })}
); } @@ -319,13 +304,8 @@ class Game extends React.Component { constructor(props) { super(props); let firstteam = Math.floor(Math.random() * 2); - let ingame = setBoard(firstteam); - let ingameCards = ingame[0]; - let ingameTeams = ingame[1]; - this.state = { - boardWords: ingameCards, - boardTeams: ingameTeams, + cards: setBoard(firstteam), firstteam: firstteam }; } @@ -340,7 +320,7 @@ class Game extends React.Component { } return (
- +

@@ -513,81 +493,67 @@ function closeMenu(play) { //takes full list of words and picks 25 unique for a game function setBoard(order) { - let boardWords = Array(25).fill(null); - let boardTeams = Array(25).fill(null); + let cards = []; //for setting board words for (let i = 0; i < 25; i++) { + cards[i] = { revealedColor: "whitesmoke" }; let useCheck = false; let counter = Math.floor(Math.random() * allWords.length); - for (let j = 0; j < boardWords.length; j++) { - if (boardWords[j] === allWords[counter]) { + for (let j = 0; j < cards.length; j++) { + if (cards[j].word === allWords[counter]) { useCheck = true; } } - if (useCheck === false) { - boardWords[i] = allWords[counter]; + if (!useCheck) { + cards[i].word = allWords[counter]; } else { i--; } } - //for words to teams - setTeam("teamA", order); - setTeam("teamB", order); - setTeam("assassin", order); - setTeam("citizen", order); + setTeam("red", order); + + setTeam("blue", order); + + setTeam("black", order); + + setTeam("tan", order); function setTeam(type, order) { let amount = 7; - if (type === "assassin") { + if (type === "black") { amount = 1; } - if ( - (order === 0 && type === "teamA") || - (order === 1 && type === "teamB") - ) { + if ((order === 0 && type === "red") || (order === 1 && type === "blue")) { amount += 2; } else if ( - (order === 1 && type === "teamA") || - (order === 0 && type === "teamB") + (order === 1 && type === "red") || + (order === 0 && type === "blue") ) { amount++; } + for (let j = 0; j < amount; j++) { let counter = Math.floor(Math.random() * 25); - if (boardTeams[counter] == null) { - boardTeams[counter] = type; + if (cards[counter].borderColor == null) { + cards[counter].borderColor = type; } else { j--; } } } - console.log(boardTeams); - return [boardWords, boardTeams]; + socket.emit("setInitState", cards, getBrowserData()); + return cards; } //send out message to set initial state if it hasnt already window.onload = function() { console.log("the sessionstorage: ", sessionStorage.getItem("userInfo")); - socket.emit("setInitState", getBoardState(), getBrowserData()); - - //for disabling events - //document.getElementsByClassName("modal-body-menu")[0].classList.add('disabled-events'); }; function getBrowserData() { - return { user: sessionStorage.getItem("userInfo") || 'USER' + Math.random()}; -} - - -function clickGuessButton(btn) { - btn.changeStyle(btn.props.team); - setTimeout(function() { - let state = getBoardState(); - console.log("button clicked"); - socket.emit("button selected", state); - }, 1); + return { user: sessionStorage.getItem("userInfo") || "USER" + Math.random() }; } function getBoardState() { @@ -595,34 +561,20 @@ function getBoardState() { let collectedCards = document.getElementsByClassName("card"); const NUM_CARDS_ROW = 5; for (let i = 0; i < NUM_CARDS_ROW; i++) { - cards[i] = []; for (let j = 0; j < NUM_CARDS_ROW; j++) { let selCard = collectedCards[i * NUM_CARDS_ROW + j]; - cards[i][j] = { - word: selCard.innerHTML, - color: selCard.style.backgroundColor - }; + if (selCard) { + cards[i * NUM_CARDS_ROW + j] = { + word: selCard.innerHTML, + revealedColor: selCard.style.backgroundColor, + borderColor: selCard.style.borderColor + }; + } } } return cards; } -socket.on("updateBoardstate", function(bs) { - if (bs.length < 1) { - return; - } - let rows = document.getElementsByClassName("board-row"); - for (let i = 0; i < rows.length; i++) { - let cardsInRow = rows[i].getElementsByClassName("card"); - for (let j = 0; j < cardsInRow.length; j++) { - let button = cardsInRow[j]; - button.innerHTML = bs[i][j].word; - button.style.backgroundColor = bs[i][j].color; - } - } - //socket.emit('send hint', 'sent!'); -}); - socket.on("update hints", function(msg) { let final_message = document.createElement("p"); final_message.innerHTML = msg; @@ -653,35 +605,37 @@ socket.on("updateRoleState", function(rs) { } }); -socket.on("resetRoles", ()=>{ - var redspy = document.getElementById("rspymaster"); - var reddet = document.getElementById("rdetective"); - var bluespy = document.getElementById("bspymaster"); - var bluedet = document.getElementById("bdetective"); - - redspy.style.backgroundColor = "#ff6666"; - redspy.style.borderColor = "black"; - redspy.disabled = false; - bluespy.style.backgroundColor = "#4d79ff"; - bluespy.style.borderColor = "black"; - bluespy.disabled = false; - reddet.style.backgroundColor = "#ff6666"; - reddet.style.borderColor = "black"; - reddet.disabled = false; - bluedet.style.backgroundColor = "#4d79ff"; - bluedet.style.borderColor = "black"; - bluedet.disabled = false; - - document.getElementById("menuName").disabled = false; - - allReady = false; +socket.on("resetRoles", () => { + var redspy = document.getElementById("rspymaster"); + var reddet = document.getElementById("rdetective"); + var bluespy = document.getElementById("bspymaster"); + var bluedet = document.getElementById("bdetective"); + + redspy.style.backgroundColor = "#ff6666"; + redspy.style.borderColor = "black"; + redspy.disabled = false; + bluespy.style.backgroundColor = "#4d79ff"; + bluespy.style.borderColor = "black"; + bluespy.disabled = false; + reddet.style.backgroundColor = "#ff6666"; + reddet.style.borderColor = "black"; + reddet.disabled = false; + bluedet.style.backgroundColor = "#4d79ff"; + bluedet.style.borderColor = "black"; + bluedet.disabled = false; + + document.getElementById("menuName").disabled = false; + + allReady = false; }); -socket.on("lockup", (playerName)=>{ +socket.on("lockup", playerName => { //banner to other player name - document.getElementsByClassName("game")[0].classList.add('disabled-events'); + document.getElementsByClassName("game")[0].classList.add("disabled-events"); }); -socket.on("your turn", (lastTurnData)=>{ +socket.on("your turn", lastTurnData => { //banner for yourself - document.getElementsByClassName("game")[0].classList.remove('disabled-events'); + document + .getElementsByClassName("game")[0] + .classList.remove("disabled-events"); }); export default App; From eee69d2c646762473228aa9b1ad6b3dd50bc3462 Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Thu, 10 Oct 2019 05:18:34 -0400 Subject: [PATCH 36/46] Make chat scrollable --- app/server.js | 15 +++------------ app/src/App.css | 22 +++++++++++++++------- app/src/App.js | 18 ++++++++++-------- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/app/server.js b/app/server.js index 0be58e4f..f2d141c7 100644 --- a/app/server.js +++ b/app/server.js @@ -164,12 +164,13 @@ io.on("connection", function(socket) { socket.broadcast.emit("update hints", full_msg, msg); }); -<<<<<<< HEAD socket.on("roleSelection", function(role, name) { console.log('JUST SELECTED ROLE', role); setRoleAndName(socket.id, role, name); -======= + + greyRole(role); + }); socket.on("guessed", word => { boardState.forEach(card => { if (card.word === word) { @@ -179,11 +180,6 @@ io.on("connection", function(socket) { sendBoardUpdate(); }); - socket.on("roleSelection", function(role) { - setRole(socket.id, role); ->>>>>>> Show correct card colors for spymasters and detectives - greyRole(role); - }); socket.on("allSelected", function() { let allSel = @@ -234,12 +230,7 @@ function greyRole(role) { io.sockets.emit("greyRole", role); } -<<<<<<< HEAD function setRoleAndName(socketID, role, name) { -======= -function setRole(socketID, role) { - console.log(`setRole(${socketID}, ${role})`); ->>>>>>> Show correct card colors for spymasters and detectives clientList.forEach(function(cl) { if (cl.connection === socketID) { cl.role = role; diff --git a/app/src/App.css b/app/src/App.css index 109b1854..d449618c 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -2,10 +2,15 @@ box-sizing: border-box; } -#root { +body { + overflow: hidden; height: 100vh; } +#root { + height: 100%; +} + .App { background-color: #282c34; display: flex; @@ -91,18 +96,21 @@ h1 { background-color: whitesmoke; padding: 2%; border-radius: 8px; + display: flex; + flex-direction: column; +} + +.log { + overflow-y: scroll; + flex: 1 1 auto; } .hintSubmission { - position: absolute; - bottom: 0; - left: 0; - padding: 2%; + padding-top: 2%; display: flex; flex-direction: row; background: whitesmoke; - width: 96%; - margin: 0 2%; + width: 100%; border-top: 2px black solid; } diff --git a/app/src/App.js b/app/src/App.js index dd7f2c2c..ae41ae72 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -235,6 +235,7 @@ class Chat extends React.Component { return (
+
{this.state.log.map((hint, index) => { return (
@@ -242,16 +243,17 @@ class Chat extends React.Component {
); })} - {this.props.role.endsWith("spymaster") && ( -
- + {this.props.role.endsWith("spymaster") && +
+ this.setState({ clue: e.target.value })} + onChange={e => this.setState({clue: e.target.value})} id="msg" - /> -
{this.createAmounts()}
-
- )} + /> +
{this.createAmounts()}
+
+ }
); From df98c395601e92dc499992105f5f88ace275c89f Mon Sep 17 00:00:00 2001 From: Levy Date: Thu, 10 Oct 2019 06:47:38 -0400 Subject: [PATCH 37/46] small ui fixes --- app/public/spy.png | Bin 0 -> 29251 bytes app/src/App.css | 31 ++++++++++++++++++++++--- app/src/App.js | 56 +++++++++++++++++++++++++++++---------------- 3 files changed, 64 insertions(+), 23 deletions(-) create mode 100644 app/public/spy.png diff --git a/app/public/spy.png b/app/public/spy.png new file mode 100644 index 0000000000000000000000000000000000000000..7520554f5dbc9858b8782f461bc1a01f37d1eba4 GIT binary patch literal 29251 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 iHH#(9kl2d*PwK+i℘p>n}j?N7`w>qiFk)bN>h91=}0| literal 0 HcmV?d00001 diff --git a/app/src/App.css b/app/src/App.css index d449618c..dc99d5cc 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -67,7 +67,8 @@ h1 { .card { height: 100%; - border-radius: 8px; + border-radius: 10px; + border-width: 5px; flex: 0 1 17%; font-size: x-large; min-width: 0; @@ -178,7 +179,19 @@ input { .modal { font-family: verdana, "Lucida Grande", arial, sans-serif; - font-size: 20px; + font-size: x-large; +} + +.modal-header, +.modal-body { + margin-left: 3%; +} + +.spyImage { + float: right; + margin-right: 50px; + margin-left: 30px; + margin-bottom: 20px; } .close:hover, @@ -263,7 +276,19 @@ input { padding: 0.5%; } -.disabled-events{ +.disabled-events { pointer-events: none; opacity: 0.4; } + +.Reset { + font-size: x-large; + padding: 0.5%; + width: 40%; + border-radius: 8px; +} + +.test1 { + text-align: center; + margin-bottom: 1.5%; +} diff --git a/app/src/App.js b/app/src/App.js index ae41ae72..ba4f3c36 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -80,6 +80,9 @@ class App extends React.Component { )} +
+ +
); } @@ -126,6 +129,12 @@ class Modals extends React.Component {
+

On the board there are 25 tiles, each of which have the codename of different secret agent. Each agent is either a @@ -236,24 +245,28 @@ class Chat extends React.Component {

- {this.state.log.map((hint, index) => { - return ( -
- {hint.clue} : {hint.amt} -
- ); - })} + {this.state.log.map((hint, index) => { + return ( +
+ {hint.clue} : {hint.amt} +
+ ); + })}
- {this.props.role.endsWith("spymaster") && -
- + this.setState({clue: e.target.value})} + onChange={e => this.setState({ clue: e.target.value })} id="msg" - /> -
{this.createAmounts()}
-
- } + /> +
{this.createAmounts()}
+
+ )}
); @@ -514,9 +527,9 @@ function setBoard(order) { } } //for words to teams - setTeam("red", order); + setTeam("#ff6666", order); - setTeam("blue", order); + setTeam("#4d79ff", order); setTeam("black", order); @@ -527,11 +540,14 @@ function setBoard(order) { if (type === "black") { amount = 1; } - if ((order === 0 && type === "red") || (order === 1 && type === "blue")) { + if ( + (order === 0 && type === "#ff6666") || + (order === 1 && type === "#4d79ff") + ) { amount += 2; } else if ( - (order === 1 && type === "red") || - (order === 0 && type === "blue") + (order === 1 && type === "#ff6666") || + (order === 0 && type === "#4d79ff") ) { amount++; } From 73e7eedbd187724c5a63a5f369f21b2699ee3c5e Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Thu, 10 Oct 2019 07:03:42 -0400 Subject: [PATCH 38/46] Implement turn logic --- app/server.js | 147 +++++++++++++++++++++++++++++++------------------ app/src/App.js | 62 ++++++++++----------- 2 files changed, 122 insertions(+), 87 deletions(-) diff --git a/app/server.js b/app/server.js index f2d141c7..78b1540c 100644 --- a/app/server.js +++ b/app/server.js @@ -8,17 +8,19 @@ const fs = require("fs"); const session = require("express-session")({ secret: "my-secret", resave: true, - saveUninitialized: true + saveUninitialized: true, }), sharedsession = require("express-socket.io-session"); const socketio = require("socket.io"); const io = socketio.listen(server); +const RED = "#ff6666"; +const BLU = "#4d79ff"; io.use(sharedsession(session)); app.use(logger("dev")); app.use(session); app.use(express.json()); -app.use(express.urlencoded({ extended: false })); +app.use(express.urlencoded({extended: false})); app.use(cookieParser()); app.use(express.static(path.join(__dirname, "public"))); @@ -39,20 +41,23 @@ let roleState = { bspymaster: "", rspymaster: "", bdetective: "", - rdetective: "" + rdetective: "", }; -function turnAfter(role){ - switch(role){ - case 'bdetective': - return 'rspymaster'; - case 'rspymaster': - return 'rdetective'; - case 'rdetective': - return 'bspymaster'; - case 'bspymaster': - return 'bdetective'; - } +let currentTurn = null; +let guessesRemaining = 0; + +function turnAfter(role) { + switch (role) { + case "bdetective": + return "rspymaster"; + case "rspymaster": + return "rdetective"; + case "rdetective": + return "bspymaster"; + case "bspymaster": + return "bdetective"; + } } function updateAll() { @@ -69,23 +74,45 @@ function sendBoardUpdate() { return { word: card.word, borderColor: card.revealedColor, - revealedColor: card.revealedColor + revealedColor: card.revealedColor, }; }); clientList.forEach(c => { - console.log(c); if (c.role.endsWith("spymaster")) { io.to(c.connection).emit("updateBoardState", boardState); } else { io.to(c.connection).emit("updateBoardState", detectivelist); } }); - console.log(boardState); } + function sendClueUpdate() { //io.sockets.emit("updateCluestate", clueLog); } +function isTurn(id) { + console.log("Current Turn", currentTurn); + clientList.forEach((c) => { + if (c.connection === id) { + console.log(c.role, currentTurn, c.role === currentTurn); + return c.role === currentTurn; + } + }); +} + +function nextTurn() { + console.log("before", currentTurn); + currentTurn = turnAfter(currentTurn); + console.log("after", currentTurn); + clientList.forEach(function(cli) { + if (cli.role === currentTurn) { + io.to(cli.connection).emit("your turn"); + } else { + io.to(cli.connection).emit("lockup", getClient(currentTurn)); + } + }); +} + io.on("connect", function(client) { console.log("establishing connection with", client.id); console.log("all clients", clientList); @@ -97,13 +124,13 @@ io.on("connection", function(socket) { console.log("clicked disable"); socket.broadcast.emit( "specMsg", - "only for " + socket.handshake.session.userdata + "only for " + socket.handshake.session.userdata, ); //io.sockets.to(getSocketFromClient(socket.handshake.session.userdata)).emit("specMsg", 'only for ' + socket.handshake.session.userdata); }); - socket.on("setInitState", function(state, browserCache) { + socket.on("setInitState", function(state, browserCache, playerOne) { console.log("session for: ", browserCache, "socket", socket.id); let user = browserCache.user; let found = false; @@ -113,7 +140,7 @@ io.on("connection", function(socket) { "updating " + user + " connection from ", element.connection, "to", - socket.id + socket.id, ); element.connection = socket.id; //io.sockets.emit("displayUser", user); @@ -122,17 +149,18 @@ io.on("connection", function(socket) { }); if (!found) { console.log("adding client", user, "with socket", socket.id); - clientList.push({ name: user, connection: socket.id, role: "none" }); + clientList.push({name: user, connection: socket.id, role: "none"}); //io.sockets.emit("displayUser", "New User"); } //The first user that connects sets the base cards if (boardState.length < 1) { - console.log("state set to", state); + console.log("state set to", state, playerOne); boardState = state; + currentTurn = playerOne; + console.log("Starting turn: ", currentTurn); } else { sendRoleState(); - console.log("state already is ", boardState); } }); @@ -149,14 +177,20 @@ io.on("connection", function(socket) { }); socket.on("hintSubmission", (sender, clue, amt) => { - console.log("hello"); - hints.push({ sender: sender, clue: clue, amt: amt }); + hints.push({sender: sender, clue: clue, amt: amt}); io.sockets.emit("hintHistory", hints); + if (amt !== 0) { + guessesRemaining = amt + 1; + } else { + nextTurn(); + } + nextTurn(); + }); socket.on("send hint", function(msg) { socket.handshake.session.userdata = msg; - clientList.push({ name: msg, connection: socket.id }); + clientList.push({name: msg, connection: socket.id}); socket.handshake.session.save(); let full_msg = "[ " + getCurrentDate() + " ]: " + msg; @@ -165,22 +199,36 @@ io.on("connection", function(socket) { }); socket.on("roleSelection", function(role, name) { - console.log('JUST SELECTED ROLE', role); + console.log("JUST SELECTED ROLE", role); setRoleAndName(socket.id, role, name); greyRole(role); }); + socket.on("guessed", word => { + if (isTurn(socket.id)) { + console.log("out of order"); + } + console.log(word); boardState.forEach(card => { if (card.word === word) { card.revealedColor = card.borderColor; + if (currentTurn.startsWith("r") && card.borderColor === RED) { + guessesRemaining--; + } else if (currentTurn.startsWith("b") && card.borderColor === BLU) { + guessesRemaining--; + } else { + guessesRemaining = 0; + } + if (guessesRemaining === 0) { + nextTurn(); + } } }); sendBoardUpdate(); }); - socket.on("allSelected", function() { let allSel = roleState["bdetective"] && @@ -193,35 +241,26 @@ io.on("connection", function(socket) { socket.on("startGame", function() { sendBoardUpdate(); socket.broadcast.emit("closeModal"); + clientList.forEach(c => { + if (c.role === currentTurn) { + console.log("your turn: " + c.role); + io.to(c.connection).emit("your turn"); + } + }); //logic to start the game }); - socket.on("resetRoles", ()=>{ - roleState = { - bspymaster: "", - rspymaster: "", - bdetective: "", - rdetective: "" - }; - io.sockets.emit("resetRoles"); + socket.on("resetRoles", () => { + roleState = { + bspymaster: "", + rspymaster: "", + bdetective: "", + rdetective: "", + }; + io.sockets.emit("resetRoles"); }); - - socket.on("nextTurn", function(lastTurnData){ - let nextRole = ""; - clientList.forEach(function(cli){ - if(socket.id === cli.connection){ - nextRole = turnAfter(cli.role); - } - }); - clientList.forEach(function(cli){ - if(cli.role === nextRole){ - io.to(cli.connection).emit("your turn", lastTurnData); - }else{ - io.to(cli.connection).emit("lockup", getClient(nextRole)); - } - }); - }); + socket.on("nextTurn", nextTurn); }); @@ -240,7 +279,6 @@ function setRoleAndName(socketID, role, name) { }); } - function getClient(role) { clientList.forEach(function(element) { if (element.role === role) { @@ -253,7 +291,8 @@ function getCurrentDate() { let currentDate = new Date(); let day = (currentDate.getDate() < 10 ? "0" : "") + currentDate.getDate(); let month = - (currentDate.getMonth() + 1 < 10 ? "0" : "") + (currentDate.getMonth() + 1); + (currentDate.getMonth() + 1 < 10 ? "0" : "") + + (currentDate.getMonth() + 1); let year = currentDate.getFullYear(); let hour = (currentDate.getHours() < 10 ? "0" : "") + currentDate.getHours(); let minute = diff --git a/app/src/App.js b/app/src/App.js index ba4f3c36..e9cf882e 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -7,6 +7,9 @@ import socketIOClient from "socket.io-client"; import { SSL_OP_SINGLE_DH_USE } from "constants"; const socket = socketIOClient("localhost:8080"); + +const RED = '#ff6666'; +const BLU = '#4d79ff'; //would normally come from database but this is for testing //list of ALL words let allReady = false; @@ -221,7 +224,7 @@ class Chat extends React.Component { if (this.state.clue === "") { return; } - socket.emit("hintSubmission", this.props.team, this.state.clue, amount); + socket.emit("hintSubmission", this.props.role, this.state.clue, amount); } createAmounts() { @@ -245,17 +248,13 @@ class Chat extends React.Component {
- {this.state.log.map((hint, index) => { - return ( -
- {hint.clue} : {hint.amt} -
- ); - })} + {this.state.log.map((hint, index) => { + return ( +
+ {hint.clue} : {hint.amt} +
+ ); + })}
{this.props.role.endsWith("spymaster") && (
@@ -321,8 +320,16 @@ class Game extends React.Component { let firstteam = Math.floor(Math.random() * 2); this.state = { cards: setBoard(firstteam), - firstteam: firstteam + firstteam: firstteam, + disabled: true, }; + socket.on("lockup", () => { + //banner to other player name + this.setState({disabled: true}); + }); + socket.on("your turn", lastTurnData => { + this.setState({disabled: false}); + }); } render() { @@ -334,7 +341,7 @@ class Game extends React.Component { status = "Blue"; } return ( -
+

@@ -527,9 +534,9 @@ function setBoard(order) { } } //for words to teams - setTeam("#ff6666", order); + setTeam(RED, order); - setTeam("#4d79ff", order); + setTeam(BLU, order); setTeam("black", order); @@ -540,14 +547,11 @@ function setBoard(order) { if (type === "black") { amount = 1; } - if ( - (order === 0 && type === "#ff6666") || - (order === 1 && type === "#4d79ff") - ) { + if ((order === 0 && type === RED) || (order === 1 && type === BLU)) { amount += 2; } else if ( - (order === 1 && type === "#ff6666") || - (order === 0 && type === "#4d79ff") + (order === 1 && type === RED) || + (order === 0 && type === BLU) ) { amount++; } @@ -561,7 +565,7 @@ function setBoard(order) { } } } - socket.emit("setInitState", cards, getBrowserData()); + socket.emit("setInitState", cards, getBrowserData(), order === 0 ? "rspymaster" : "bspymaster"); return cards; } @@ -646,14 +650,6 @@ socket.on("resetRoles", () => { allReady = false; }); -socket.on("lockup", playerName => { - //banner to other player name - document.getElementsByClassName("game")[0].classList.add("disabled-events"); -}); -socket.on("your turn", lastTurnData => { - //banner for yourself - document - .getElementsByClassName("game")[0] - .classList.remove("disabled-events"); -}); + + export default App; From 97ccb7033717bfc16deb9a64370d267ae0983de2 Mon Sep 17 00:00:00 2001 From: dandaman2 Date: Thu, 10 Oct 2019 07:08:00 -0400 Subject: [PATCH 39/46] roles are shown and buttons have hovers and colors --- app/src/App.css | 14 ++++++++++++++ app/src/App.js | 22 +++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/app/src/App.css b/app/src/App.css index d449618c..752521cb 100644 --- a/app/src/App.css +++ b/app/src/App.css @@ -7,6 +7,10 @@ body { height: 100vh; } +button:hover{ + cursor: pointer; +} + #root { height: 100%; } @@ -263,6 +267,16 @@ input { padding: 0.5%; } +#yourTeam{ + margin-bottom: 35px; + text-align: center; + padding: 5px; +} + +.good-to-go{ + background-color: limegreen; +} + .disabled-events{ pointer-events: none; opacity: 0.4; diff --git a/app/src/App.js b/app/src/App.js index ae41ae72..8c7e5bba 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -73,7 +73,10 @@ class App extends React.Component { return (
-

Codenames

+
+

Codenames

+
+
{this.state.modalOpen && ( @@ -447,16 +450,25 @@ function makeGray(btn, selected) { bluedet.disabled = true; let b = document.getElementById(btn); + let teamColor = b.style.backgroundColor; + let roleName = b.innerHTML.split("Team")[1]; b.style.backgroundColor = "gray"; b.style.borderColor = "gold"; selected.state.selectedRole = btn; selected.selectRole(btn); + let nameInput = document.getElementById("menuName"); let name = nameInput.value || selected.state.selectedRole; nameInput.disabled = true; sessionStorage.setItem("userInfo", name); socket.emit("roleSelection", selected.state.selectedRole, name); + + + let whoYouAre = document.getElementById("yourTeam"); + console.log(teamColor); + whoYouAre.style.backgroundColor = teamColor; + whoYouAre.innerHTML = name + " (" + roleName + " )"; } function resetMenu(play) { @@ -593,6 +605,7 @@ socket.on("greyRole", function(role) { socket.on("allSelectedStatus", function(status) { if (status) { allReady = true; + document.getElementById("playBtn").classList.add('good-to-go'); } }); @@ -625,14 +638,17 @@ socket.on("resetRoles", () => { bluedet.style.backgroundColor = "#4d79ff"; bluedet.style.borderColor = "black"; bluedet.disabled = false; - + document.getElementById("menuName").disabled = false; allReady = false; + document.getElementById("playBtn").classList.remove('good-to-go'); }); socket.on("lockup", playerName => { //banner to other player name - document.getElementsByClassName("game")[0].classList.add("disabled-events"); + document + .getElementsByClassName("game")[0] + .classList.add("disabled-events"); }); socket.on("your turn", lastTurnData => { //banner for yourself From 9a692eb7e38b7cc20dc4cb5c120fabe76e3e3ca0 Mon Sep 17 00:00:00 2001 From: Tim Winters Date: Thu, 10 Oct 2019 07:22:29 -0400 Subject: [PATCH 40/46] Add decreasing hint count --- app/server.js | 6 ++- app/src/App.js | 142 +++++++++++++++++++++++-------------------------- 2 files changed, 71 insertions(+), 77 deletions(-) diff --git a/app/server.js b/app/server.js index 78b1540c..66acd1d0 100644 --- a/app/server.js +++ b/app/server.js @@ -70,6 +70,8 @@ function sendRoleState() { } function sendBoardUpdate() { + let redLeft = boardState.filter((card) => card.revealedColor !== card.borderColor && card.borderColor === RED).length; + let bluLeft = boardState.filter((card) => card.revealedColor !== card.borderColor && card.borderColor === BLU).length; let detectivelist = boardState.map(card => { return { word: card.word, @@ -79,9 +81,9 @@ function sendBoardUpdate() { }); clientList.forEach(c => { if (c.role.endsWith("spymaster")) { - io.to(c.connection).emit("updateBoardState", boardState); + io.to(c.connection).emit("updateBoardState", boardState, redLeft, bluLeft); } else { - io.to(c.connection).emit("updateBoardState", detectivelist); + io.to(c.connection).emit("updateBoardState", detectivelist, redLeft, bluLeft); } }); } diff --git a/app/src/App.js b/app/src/App.js index e9cf882e..f7004ee7 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -4,12 +4,12 @@ import shortid from "shortid"; import "./App.css"; import socketIOClient from "socket.io-client"; -import { SSL_OP_SINGLE_DH_USE } from "constants"; +import {SSL_OP_SINGLE_DH_USE} from "constants"; const socket = socketIOClient("localhost:8080"); -const RED = '#ff6666'; -const BLU = '#4d79ff'; +const RED = "#ff6666"; +const BLU = "#4d79ff"; //would normally come from database but this is for testing //list of ALL words let allReady = false; @@ -47,7 +47,7 @@ let allWords = [ "buck", "day", "doctor", - "ball" + "ball", ]; class App extends React.Component { @@ -55,21 +55,22 @@ class App extends React.Component { super(props); this.state = { modalOpen: true, - selectedRole: "" + selectedRole: "", }; console.log("App"); socket.on("closeModal", this.closeModal.bind(this)); } - componentDidMount() {} + componentDidMount() { + } closeModal() { - this.setState({ modalOpen: false }); + this.setState({modalOpen: false}); } selectRole(role) { - this.setState({ selectedRole: role }); + this.setState({selectedRole: role}); } render() { @@ -77,12 +78,12 @@ class App extends React.Component {

Codenames

- +
{this.state.modalOpen && ( - + )} - +
@@ -98,7 +99,7 @@ class Modals extends React.Component { super(); this.state = { - modalIsOpen: false + modalIsOpen: false, }; this.openModal = this.openModal.bind(this); @@ -106,11 +107,11 @@ class Modals extends React.Component { } openModal() { - this.setState({ modalIsOpen: true }); + this.setState({modalIsOpen: true}); } closeModal() { - this.setState({ modalIsOpen: false }); + this.setState({modalIsOpen: false}); } render() { @@ -125,11 +126,11 @@ class Modals extends React.Component { × -
-
+
+
How to Play:
-
+
-
+
+
At the beginning of the game, only the spymasters can see the position of the agents (displayed by the border of the cards). The spymasters will each take turns giving clues to their @@ -160,8 +161,8 @@ class Modals extends React.Component { pass. If the detective guesses incorrectly it becomes the other teams turn. If any detective guesses the assassin then their team atomatically loses the game. -
-
A team wins the game if their detective can find all of +
+
A team wins the game if their detective can find all of their team's agents or if the other team accidentally finds the assassin. Good Luck!

@@ -180,13 +181,13 @@ class Card extends React.Component { this.changeStyle = this.changeStyle.bind(this); this.state = { word: this.props.word, - borderColor: this.props.border + borderColor: this.props.border, }; } changeStyle(color) { this.setState({ - color: this.state.cardColor + color: this.state.cardColor, }); } @@ -198,7 +199,7 @@ class Card extends React.Component { style={{ backgroundColor: this.props.revealedColor, borderStyle: SSL_OP_SINGLE_DH_USE, - borderColor: this.state.borderColor + borderColor: this.state.borderColor, }} onClick={() => socket.emit("guessed", this.props.value)} > @@ -213,10 +214,10 @@ class Chat extends React.Component { super(props); this.state = { log: [], - clue: "" + clue: "", }; socket.on("hintHistory", hints => { - this.setState({ log: hints }); + this.setState({log: hints}); }); } @@ -237,7 +238,7 @@ class Chat extends React.Component { className={"amount" + (i <= this.props.wordsLeft ? "" : " disabled")} > {i} -
+
, ); } return table; @@ -248,19 +249,20 @@ class Chat extends React.Component {
- {this.state.log.map((hint, index) => { - return ( -
- {hint.clue} : {hint.amt} -
- ); - })} + {this.state.log.map((hint, index) => { + return ( +
+ {hint.clue} : {hint.amt} +
+ ); + })}
{this.props.role.endsWith("spymaster") && (
this.setState({ clue: e.target.value })} + onChange={e => this.setState({clue: e.target.value})} id="msg" />
{this.createAmounts()}
@@ -273,17 +275,6 @@ class Chat extends React.Component { } class Board extends React.Component { - constructor(props) { - super(props); - this.state = { - cards: this.props.cards - }; - socket.on("updateBoardState", bs => { - console.log("Received update board state"); - console.log(bs); - this.setState({ cards: bs }); - }); - } renderCard(card) { return ( @@ -304,7 +295,7 @@ class Board extends React.Component {
{" "} {[0, 1, 2, 3, 4].map(m => { - return this.renderCard(this.state.cards[n * 5 + m]); + return this.renderCard(this.props.cards[n * 5 + m]); })}
); @@ -320,12 +311,19 @@ class Game extends React.Component { let firstteam = Math.floor(Math.random() * 2); this.state = { cards: setBoard(firstteam), + redLeft: firstteam === 0 ? 9 : 8, + bluLeft: firstteam === 1 ? 9 : 8, firstteam: firstteam, disabled: true, }; + socket.on("updateBoardState", (bs, redLeft, bluLeft) => { + console.log("Received update board state"); + console.log(bs); + this.setState({cards: bs, redLeft: redLeft, bluLeft: bluLeft}); + }); socket.on("lockup", () => { //banner to other player name - this.setState({disabled: true}); + this.setState({disabled: true}); }); socket.on("your turn", lastTurnData => { this.setState({disabled: false}); @@ -333,19 +331,12 @@ class Game extends React.Component { } render() { - let status; - let order = this.state.firstteam; - if (!order) { - status = "Red"; - } else { - status = "Blue"; - } return (
- - -
-
+ + +
+
); } @@ -358,7 +349,7 @@ class Menu extends React.Component { this.selectRole = props.selectRole; this.state = { modalIsOpen: true, - selectedRole: null + selectedRole: null, }; this.openModal = this.openModal.bind(this); @@ -366,11 +357,11 @@ class Menu extends React.Component { } openModal() { - this.setState({ modalIsOpen: true }); + this.setState({modalIsOpen: true}); } closeModal() { - this.setState({ modalIsOpen: false }); + this.setState({modalIsOpen: false}); } render() { @@ -381,7 +372,7 @@ class Menu extends React.Component { shouldCloseOnOverlayClick={false} isOpen={this.state.modalIsOpen} onRequestClose={this.closeModal} - style={{ content: { backgroundColor: "#282c34", padding: 0 } }} + style={{content: {backgroundColor: "#282c34", padding: 0}}} >
@@ -394,8 +385,8 @@ class Menu extends React.Component { id="menuName" autoComplete="off" > -
-
+
+
-
-
+
+
-
+
-
-
+
+
+
); @@ -609,6 +609,14 @@ function getBoardState() { return cards; } +function resetAll(){ + socket.emit("resetAll"); +} + +socket.on("reset", ()=>{ + window.location.reload(); +}); + socket.on("update hints", function(msg) { let final_message = document.createElement("p"); final_message.innerHTML = msg; From 2f0254556545955de88d4710727f44b2545ac6bb Mon Sep 17 00:00:00 2001 From: Dan Duff <37387085+dandaman2@users.noreply.github.com> Date: Thu, 10 Oct 2019 09:27:02 -0400 Subject: [PATCH 44/46] Added README --- README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..d085509a --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +# cs4241-FinalProject + +## Team Members +- Daniel Duff +- Timothy Winters +- Andrew Levy + +**Codenames** +For our Final Project, we implemented a multiplayer game called "Codenames", an electronic version of a fun and collaborative card game. +(rules can be found here: https://czechgames.com/files/rules/codenames-rules-en.pdf). + +Using JavaScript's Socket.io and Socket.io-client libraries we were able to create an application that communicates with a Node.js server, +and updates client real-time. This was mainly used for implementing a constant game state (and storing that information on the server), +as well as updating player's turn order. Maintaining game state, as well as ensuring it was consistent among multiple clients (as well as +updating that information real-time) was very challenging, as it was something none of us had any prior experience with. Ensuring all socket +all socket information was kept up-to-date in addition to random board setup generation was a task which we struggled with tackling at first, +however we were able to overcome our difficulties! + + +## This project features: +- A React.js front-end framework that dynamically renders DOM elements for players. +- Modularization in the implementation of the React.js frontend. +- Useage of the Socket.io and Socket.io-client libraries to maintain game state and interact with React components. +- A simple Node.js database which maintains game state, as well as storing card, socket, and player information. +- CSS Stylesheets that are dynamically implemented into Javascript Components. +- State manipulation and 'locking' of user input when it's not their turn (as well as 'unlocking' on the correct turn). +- Codename's base logic ruleset. +- Elements of the game which are meant to be hidden from players cannot be seen or accessed via the browser directly +(thus preventing cheating by inspecting the page's HTML). + +This project was a very collaborative effort, as multiple members did multiple tasks. +- Creation and Manipulation of React.js framework: Andrew, Tim. +- CSS Styling, images, and additional help menu: Andrew +- Creation of Socket Communication: Daniel, Tim. +- Creation of Backend Node.js and Socket.io setup: Daniel. +- Refactoring and State Manipulation (as well as hiding game elements from browser's DOM lookup): Tim. + From fa9b1a669116a474f7fcd20e7dbb22607571af95 Mon Sep 17 00:00:00 2001 From: Andrew Levy <44853528+AndrewLevy395@users.noreply.github.com> Date: Thu, 10 Oct 2019 11:03:22 -0400 Subject: [PATCH 45/46] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d085509a..e96f7684 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ For our Final Project, we implemented a multiplayer game called "Codenames", an Using JavaScript's Socket.io and Socket.io-client libraries we were able to create an application that communicates with a Node.js server, and updates client real-time. This was mainly used for implementing a constant game state (and storing that information on the server), as well as updating player's turn order. Maintaining game state, as well as ensuring it was consistent among multiple clients (as well as -updating that information real-time) was very challenging, as it was something none of us had any prior experience with. Ensuring all socket +updating that information real-time) was very challenging, as it was something none of us had any prior experience with. Ensuring all socket information was kept up-to-date in addition to random board setup generation was a task which we struggled with tackling at first, however we were able to overcome our difficulties! From e69283ee669ce821e772bd72b95d9343ec3804e2 Mon Sep 17 00:00:00 2001 From: Andrew Levy <44853528+AndrewLevy395@users.noreply.github.com> Date: Thu, 10 Oct 2019 13:55:25 -0400 Subject: [PATCH 46/46] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index fbeca219..a4d4c861 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ updating that information real-time) was very challenging, as it was something n all socket information was kept up-to-date in addition to random board setup generation was a task which we struggled with tackling at first, however we were able to overcome our difficulties! +**How To Run** +We were unable to place the game on a remote client due to socketing conflicts. In the future we're hoping to get this to work so that people can play our game online. The game can be run by running npm intall and then npm start in the app package.json directory. After running these commands the application can be accessed via localhost:3000 in a browser. Multiple tabs can count as multiple players (for testing purposes) as long as they are connected to localhost:3000 as well. + ## This project features: - A React.js front-end framework that dynamically renders DOM elements for players.