diff --git a/.gitignore b/.gitignore index 185e6631928dca2f51224e61a3861cc88fa2b74e..d02e51f32d2e8a7019a1cbce2d0d74980a33da84 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,8 @@ node_modules /dist -# local env files -.env.local -.env.*.local +# all dev/prod specific env files; we have sample.env.* as templates +.env.* # Log files npm-debug.log* diff --git a/README.md b/README.md index b4db2cc3b2a3b869770262d27fb5075c394719fc..d3bca6304446e8a777ab09e7e64a59e7b6aceedf 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,15 @@ > The Web-UI component of the AUTOradio framework +# Setup + ## Prerequisites -This version is an early development prototype, only the interface to the [steering/pv module](https://gitlab.servus.at/autoradio/pv) is implemented partly yet. +This version is an early development prototype. -## Build Setup +Detailed setup infos will follow, as soon as we reach something between alpha and beta stage. -For the current early dev prototype you only need the first two steps here: +## Running it locally (dev environment) ``` bash ## Project setup @@ -16,18 +18,19 @@ npm install ### Compiles and hot-reloads for development npm run serve +``` -### Compiles and minifies for production -npm run build +Before you can actually run it, you have to copy the `sample.env.development` file to `.env.development` and change the values to reflect your local setup. -### Run your tests -npm run test +For customizing the whole vue cli development environment, see [Configuration Reference](https://cli.vuejs.org/config/). -### Lints and fixes files -npm run lint -``` +## Setting it up on a server (production environment) -For customizing the whole vue cli development environment, see [Configuration Reference](https://cli.vuejs.org/config/). +To build the production code, use `npm run build`. This compiles and minifies the code for production. Then you just have to put it on some static website. + +Before building you have to copy the `sample.env.production` file to `.env.production` and change the values to your final setup. + +> TODO: provide an example setup ## Configuration @@ -52,7 +55,7 @@ CORS_ORIGIN_WHITELIST = ( This assumes of course that you have the dashboard running on its standard localhost port 8080. If you want to change this to e.g. port `9090`, add a line `PORT: 9090,` to the `.env.development` file of the dashboard package. -## Detailed infos on build environment +# Infos on build environment This project is built with [Vue.js 2](https://vuejs.org). Take a look at their [Guide](https://vuejs.org/v2/guide/) or the [API docs](https://vuejs.org/v2/api/) to find out more about the core framework. As template we are using the _webpack template_. For a detailed explanation on how things work with this, check out the [webpack guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). For the whole einvornment setup we started out with Vue CLI 2 but now work with [Vue CLI 3](https://cli.vuejs.org). diff --git a/package-lock.json b/package-lock.json index 6268307148bddf6ca1568aa1ea0d19c686f61283..3413945fe76f99e18b44123dfb1f3830379f5ca7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,25 +14,94 @@ } }, "@babel/core": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", - "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", + "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.2.2", - "@babel/template": "^7.2.2", - "@babel/traverse": "^7.2.2", - "@babel/types": "^7.2.2", + "@babel/generator": "^7.4.4", + "@babel/helpers": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/parser": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "dev": true + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", + "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/generator": { @@ -68,38 +137,132 @@ } }, "@babel/helper-call-delegate": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", - "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "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==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.0.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + }, + "dependencies": { + "@babel/generator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/parser": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "dev": true + }, + "@babel/traverse": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", + "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.2.tgz", - "integrity": "sha512-tdW8+V8ceh2US4GsYdNVNoohq5uVwOf9k6krjwW4E1lINcHgttnWcNqgdoessn12dAy8QkbezlbQh2nXISNY+A==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", + "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", "@babel/helper-member-expression-to-functions": "^7.0.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.2.3" + "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-split-export-declaration": "^7.4.4" + }, + "dependencies": { + "@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==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-define-map": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", - "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", + "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.0.0", - "lodash": "^4.17.10" + "@babel/types": "^7.4.4", + "lodash": "^4.17.11" + }, + "dependencies": { + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-explode-assignable-expression": { @@ -133,12 +296,25 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", - "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", + "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==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.4.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-member-expression-to-functions": { @@ -160,17 +336,56 @@ } }, "@babel/helper-module-transforms": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", - "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", + "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/template": "^7.2.2", - "@babel/types": "^7.2.2", - "lodash": "^4.17.10" + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.4.4", + "lodash": "^4.17.11" + }, + "dependencies": { + "@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==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/parser": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "dev": true + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-optimise-call-expression": { @@ -189,12 +404,12 @@ "dev": true }, "@babel/helper-regex": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", - "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", + "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "@babel/helper-remap-async-to-generator": { @@ -211,15 +426,73 @@ } }, "@babel/helper-replace-supers": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", - "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", + "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.0.0", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.2.3", - "@babel/types": "^7.0.0" + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + }, + "dependencies": { + "@babel/generator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/parser": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "dev": true + }, + "@babel/traverse": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", + "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-simple-access": { @@ -254,14 +527,83 @@ } }, "@babel/helpers": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", - "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", + "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", "dev": true, "requires": { - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.5", - "@babel/types": "^7.3.0" + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + }, + "dependencies": { + "@babel/generator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@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==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/parser": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", + "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "dev": true + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", + "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/highlight": { @@ -293,22 +635,22 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz", - "integrity": "sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz", + "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.3.0", + "@babel/helper-create-class-features-plugin": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-proposal-decorators": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz", - "integrity": "sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz", + "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.3.0", + "@babel/helper-create-class-features-plugin": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-decorators": "^7.2.0" } @@ -324,9 +666,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz", - "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", + "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -344,14 +686,14 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", - "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", + "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.2.0" + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" } }, "@babel/plugin-syntax-async-generators": { @@ -427,9 +769,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", - "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", + "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -447,29 +789,51 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", - "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", + "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "@babel/plugin-transform-classes": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", - "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", + "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", + "@babel/helper-define-map": "^7.4.4", "@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.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-split-export-declaration": "^7.4.4", "globals": "^11.1.0" + }, + "dependencies": { + "@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==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-computed-properties": { @@ -482,23 +846,23 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz", - "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", + "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", - "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", + "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" } }, "@babel/plugin-transform-duplicate-keys": { @@ -521,18 +885,18 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", - "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", + "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", - "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", + "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==", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", @@ -559,23 +923,23 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", - "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", + "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-module-transforms": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", "@babel/helper-simple-access": "^7.1.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", - "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", + "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.0.0", + "@babel/helper-hoist-variables": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0" } }, @@ -590,18 +954,18 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", - "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz", + "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==", "dev": true, "requires": { "regexp-tree": "^0.1.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", - "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", + "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -618,29 +982,29 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", - "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", + "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==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.1.0", + "@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-regenerator": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", - "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz", + "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==", "dev": true, "requires": { - "regenerator-transform": "^0.13.3" + "regenerator-transform": "^0.13.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz", - "integrity": "sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", + "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -678,9 +1042,9 @@ } }, "@babel/plugin-transform-template-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", - "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", + "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==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", @@ -697,27 +1061,27 @@ } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", - "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", + "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0", - "regexpu-core": "^4.1.3" + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" } }, "@babel/preset-env": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz", - "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz", + "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", "dev": true, "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-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.3.1", + "@babel/plugin-proposal-object-rest-spread": "^7.3.4", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", "@babel/plugin-syntax-async-generators": "^7.2.0", @@ -725,10 +1089,10 @@ "@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.2.0", + "@babel/plugin-transform-async-to-generator": "^7.3.4", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.2.0", - "@babel/plugin-transform-classes": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.3.4", + "@babel/plugin-transform-classes": "^7.3.4", "@babel/plugin-transform-computed-properties": "^7.2.0", "@babel/plugin-transform-destructuring": "^7.2.0", "@babel/plugin-transform-dotall-regex": "^7.2.0", @@ -739,13 +1103,13 @@ "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-modules-amd": "^7.2.0", "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.3.4", "@babel/plugin-transform-modules-umd": "^7.2.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", "@babel/plugin-transform-new-target": "^7.0.0", "@babel/plugin-transform-object-super": "^7.2.0", "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.3.4", "@babel/plugin-transform-shorthand-properties": "^7.2.0", "@babel/plugin-transform-spread": "^7.2.0", "@babel/plugin-transform-sticky-regex": "^7.2.0", @@ -759,22 +1123,22 @@ } }, "@babel/runtime": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", - "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.4.tgz", + "integrity": "sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg==", "dev": true, "requires": { - "regenerator-runtime": "^0.12.0" + "regenerator-runtime": "^0.13.2" } }, "@babel/runtime-corejs2": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.3.1.tgz", - "integrity": "sha512-YpO13776h3e6Wy8dl2J8T9Qwlvopr+b4trCEhHE+yek6yIqV8sx6g3KozdHMbXeBpjosbPi+Ii5Z7X9oXFHUKA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.4.4.tgz", + "integrity": "sha512-hE7oVwVsRws84u5/nkaWWdN2J4SXEGuXKjrAsP0E4nkYImjSbpdHfGTS2nvFc82aDGIuG6OzhAQMpIzTHuZeKA==", "dev": true, "requires": { - "core-js": "^2.5.7", - "regenerator-runtime": "^0.12.0" + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" } }, "@babel/template": { @@ -843,6 +1207,16 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@nuxt/opencollective": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.2.2.tgz", + "integrity": "sha512-ie50SpS47L+0gLsW4yP23zI/PtjsDRglyozX2G09jeiUazC1AJlGPZo0JUs9iuCDUoIgsDEf66y7/bSfig0BpA==", + "requires": { + "chalk": "^2.4.1", + "consola": "^2.3.0", + "node-fetch": "^2.3.0" + } + }, "@soda/friendly-errors-webpack-plugin": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", @@ -896,139 +1270,176 @@ } } }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "11.13.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", + "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, "@types/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", - "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, "@vue/babel-helper-vue-jsx-merge-props": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.2.tgz", - "integrity": "sha512-Yj92Q1GcGjjctecBfnBmVqKSlMdyZaVq10hlZB4HSd1DJgu4cWgpEImJSzcJRUCZmas6UigwE7f4IjJuQs+JvQ==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.3.tgz", + "integrity": "sha512-cbFQnd3dDPsfWuxbWW2phynX2zsckwC4GfAkcE1QH1lZL2ZAD2V97xY3BmvTowMkjeFObRKQt1P3KKA6AoB0hQ==", "dev": true }, "@vue/babel-plugin-transform-vue-jsx": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0-beta.2.tgz", - "integrity": "sha512-fvAymRZAPHitomRE+jIipWRj0STXNSMqeOSdOFu9Ffjqg9WGOxSdCjORxexManfZ2y5QDv7gzI1xfgprsK3nlw==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0-beta.3.tgz", + "integrity": "sha512-yn+j2B/2aEagaxXrMSK3qcAJnlidfXg9v+qmytqrjUXc4zfi8QVC/b4zCev1FDmTip06/cs/csENA4law6Xhpg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0-beta.2", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0-beta.3", "html-tags": "^2.0.0", "lodash.kebabcase": "^4.1.1", "svg-tags": "^1.0.0" } }, "@vue/babel-preset-app": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.4.0.tgz", - "integrity": "sha512-P7IaOFtMUd5iic2PH/iY6YPgtPnyd7SzA+ACv1283F5RcLutTURhl2smC1cWUJFGVrUhTmsYEcbS4+06wKymWw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.7.0.tgz", + "integrity": "sha512-6PHZ1TYO8OGy22TLyKm/+VmCzLB9L1UxaA3CFxXJH0h/YUOmgdmuAk3AWhomYSwk2GF51On3aQzYouoaWhvBDQ==", "dev": true, "requires": { + "@babel/helper-module-imports": "^7.0.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-decorators": "^7.1.0", "@babel/plugin-syntax-dynamic-import": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/preset-env": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.4.0", + "@babel/preset-env": "^7.0.0 < 7.4.0", "@babel/runtime": "^7.0.0", "@babel/runtime-corejs2": "^7.2.0", - "@vue/babel-preset-jsx": "^1.0.0-beta.2", + "@vue/babel-preset-jsx": "^1.0.0-beta.3", "babel-plugin-dynamic-import-node": "^2.2.0", - "core-js": "^2.6.3" + "babel-plugin-module-resolver": "3.2.0", + "core-js": "^2.6.5" } }, "@vue/babel-preset-jsx": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0-beta.2.tgz", - "integrity": "sha512-nZoAKBR/h6iPMQ66ieQcIdlpPBmqhtUUcgjBS541jIVxSog1rwzrc00jlsuecLonzUMWPU0PabyitsG74vhN1w==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0-beta.3.tgz", + "integrity": "sha512-qMKGRorTI/0nE83nLEM7MyQiBZUqc62sZyjkBdVaaU7S61MHI8RKHPtbLMMZlWXb2NCJ0fQci8xJWUK5JE+TFA==", "dev": true, "requires": { - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0-beta.2", - "@vue/babel-plugin-transform-vue-jsx": "^1.0.0-beta.2", - "@vue/babel-sugar-functional-vue": "^1.0.0-beta.2", - "@vue/babel-sugar-inject-h": "^1.0.0-beta.2", - "@vue/babel-sugar-v-model": "^1.0.0-beta.2", - "@vue/babel-sugar-v-on": "^1.0.0-beta.2" + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0-beta.3", + "@vue/babel-plugin-transform-vue-jsx": "^1.0.0-beta.3", + "@vue/babel-sugar-functional-vue": "^1.0.0-beta.3", + "@vue/babel-sugar-inject-h": "^1.0.0-beta.3", + "@vue/babel-sugar-v-model": "^1.0.0-beta.3", + "@vue/babel-sugar-v-on": "^1.0.0-beta.3" } }, "@vue/babel-sugar-functional-vue": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0-beta.2.tgz", - "integrity": "sha512-5qvi4hmExgjtrESDk0vflL69dIxkDAukJcYH9o4663E8Nh12Jpbmr+Ja8WmgkAPtTVhk90UVcVUFCCZLHBmhkQ==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0-beta.3.tgz", + "integrity": "sha512-CBIa0sQWn3vfBS2asfTgv0WwdyKvNTKtE/cCfulZ7MiewLBh0RlvvSmdK9BIMTiHErdeZNSGUGlU6JuSHLyYkQ==", "dev": true, "requires": { "@babel/plugin-syntax-jsx": "^7.2.0" } }, "@vue/babel-sugar-inject-h": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0-beta.2.tgz", - "integrity": "sha512-qGXZ6yE+1trk82xCVJ9j3shsgI+R2ePj3+o8b2Ee7JNaRqQvMfTwpgx5BRlk4q1+CTjvYexdqBS+q4Kg7sSxcg==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0-beta.3.tgz", + "integrity": "sha512-HKMBMmFfdK9GBp3rX2bHIwILBdgc5F3ahmCB72keJxzaAQrgDAnD+ho70exUge+inAGlNF34WsQcGPElTf9QZg==", "dev": true, "requires": { "@babel/plugin-syntax-jsx": "^7.2.0" } }, "@vue/babel-sugar-v-model": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0-beta.2.tgz", - "integrity": "sha512-63US3IMEtATJzzK2le/Na53Sk2bp3LHfwZ8eMFwbTaz6e2qeV9frBl3ZYaha64ghT4IDSbrDXUmm0J09EAzFfA==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0-beta.3.tgz", + "integrity": "sha512-et39eTEh7zW4wfZoSl9Jf0/n2r9OTT8U02LtSbXsjgYcqaDQFusN0+n7tw4bnOqvnnSVjEp7bVsQCWwykC3Wgg==", "dev": true, "requires": { "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0-beta.2", - "@vue/babel-plugin-transform-vue-jsx": "^1.0.0-beta.2", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0-beta.3", + "@vue/babel-plugin-transform-vue-jsx": "^1.0.0-beta.3", "camelcase": "^5.0.0", "html-tags": "^2.0.0", "svg-tags": "^1.0.0" } }, "@vue/babel-sugar-v-on": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0-beta.2.tgz", - "integrity": "sha512-XH/m3k11EKdMY0MrTg4+hQv8BFM8juzHT95chYkgxDmvDdVJnSCuf9+mcysEJttWD4PVuUGN7EHoIWsIhC0dRw==", + "version": "1.0.0-beta.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0-beta.3.tgz", + "integrity": "sha512-F+GapxCiy50jf2Q2B4exw+KYBzlGdeKMAMW1Dbvb0Oa59SA0CH6tsUOIAsXb0A05jwwg/of0LaVeo+4aLefVxQ==", "dev": true, "requires": { "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.0.0-beta.2", + "@vue/babel-plugin-transform-vue-jsx": "^1.0.0-beta.3", "camelcase": "^5.0.0" } }, "@vue/cli-overlay": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.4.0.tgz", - "integrity": "sha512-uLfQZvMChAf3UQNR+WN8a7vAPqvaw2tJs1TrNxPg+Dr7bm7HWoitvFremF0vLWkxIRM5e+VJgYV3wHk9EwWhzg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.7.0.tgz", + "integrity": "sha512-QO1rsBVKPZrt+5rHSZXc5UEPVwVgiayOk/cDl+GwSJoR36gnWs1wy1oUX1Awd7QpGiMBK/1+A7aAGhfzKR23Cg==", "dev": true }, "@vue/cli-plugin-babel": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.4.0.tgz", - "integrity": "sha512-8ViOzJa8UqUnmMl1422t8EIlCUc5PegSMsdU6xoqfavL83uEGjR+fE4gAI+g7xKo7Qk9+8Z8VvaredXMbmxCzA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.7.0.tgz", + "integrity": "sha512-QysJYerzaGzvJ5iT61KpE4hFHiDU8NQ7QjSwIkOAJAx0KY8o0WCjLpAVvjmKtZqNXPBc5Jc3P+eeaz9qQPWNeQ==", "dev": true, "requires": { "@babel/core": "^7.0.0", - "@vue/babel-preset-app": "^3.4.0", - "@vue/cli-shared-utils": "^3.4.0", + "@vue/babel-preset-app": "^3.7.0", + "@vue/cli-shared-utils": "^3.7.0", "babel-loader": "^8.0.5", "webpack": ">=4 < 4.29" } }, "@vue/cli-plugin-eslint": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.4.0.tgz", - "integrity": "sha512-KbUpN3Zd/V5zCah9nT9cukTHmd9g4IRskyuIeBw5KZqRDoUgCS7I2+OWlcAMneRuqZwgFbTFYmr9N3s6gz4SVg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.7.0.tgz", + "integrity": "sha512-oFdOLQu6PQKbxinF55XH1lH8hgiDRyb3gIvSKu5YV5r6dnsRdKDxOKLE1PTbaZzQot3Ny/Y7gk025x1qpni3IA==", "dev": true, "requires": { - "@vue/cli-shared-utils": "^3.4.0", + "@vue/cli-shared-utils": "^3.7.0", "babel-eslint": "^10.0.1", "eslint": "^4.19.1", - "eslint-loader": "^2.1.1", + "eslint-loader": "^2.1.2", "eslint-plugin-vue": "^4.7.1", - "globby": "^9.0.0", + "globby": "^9.2.0", "webpack": ">=4 < 4.29" }, "dependencies": { @@ -1037,6 +1448,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, + "optional": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", @@ -1044,11 +1456,19 @@ "json-schema-traverse": "^0.3.0" } }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "optional": true + }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, + "optional": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -1060,6 +1480,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, + "optional": true, "requires": { "ms": "^2.1.1" } @@ -1069,6 +1490,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, + "optional": true, "requires": { "ajv": "^5.3.0", "babel-code-frame": "^6.22.0", @@ -1115,6 +1537,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", "dev": true, + "optional": true, "requires": { "vue-eslint-parser": "^2.0.3" } @@ -1124,6 +1547,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", "dev": true, + "optional": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -1133,103 +1557,128 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true + "dev": true, + "optional": true }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "dev": true, + "optional": true }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, + "optional": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "dev": true, + "optional": true } } }, "@vue/cli-service": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.4.0.tgz", - "integrity": "sha512-AtLiin5Jlw0ULKXJtBhUaykz0VzDgYq2RCf7nxfB7Vsi5fTbJyOVeWYe9KsnsM6VTRBWRUI8NzPPMYxV2uxtQA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.7.0.tgz", + "integrity": "sha512-RMVwpCE3EB9cL9VAgu1Dy/tGxz5zrVG4UMPk5t4KDu8jJhHxvcAzgIEIfS6KRp0AKfA6iDW4J0NU0fopnpyL+g==", "dev": true, "requires": { "@intervolga/optimize-cssnano-plugin": "^1.0.5", "@soda/friendly-errors-webpack-plugin": "^1.7.1", - "@vue/cli-overlay": "^3.4.0", - "@vue/cli-shared-utils": "^3.4.0", - "@vue/component-compiler-utils": "^2.5.2", + "@vue/cli-overlay": "^3.7.0", + "@vue/cli-shared-utils": "^3.7.0", + "@vue/component-compiler-utils": "^2.6.0", "@vue/preload-webpack-plugin": "^1.1.0", "@vue/web-component-wrapper": "^1.2.0", - "acorn": "^6.0.6", + "acorn": "^6.1.1", "acorn-walk": "^6.1.1", "address": "^1.0.3", - "autoprefixer": "^9.4.7", + "autoprefixer": "^9.5.1", + "browserslist": "^4.5.4", "cache-loader": "^2.0.1", "case-sensitive-paths-webpack-plugin": "^2.2.0", "chalk": "^2.4.2", - "clipboardy": "^1.2.3", - "cliui": "^4.1.0", + "cli-highlight": "^2.1.0", + "clipboardy": "^2.0.0", + "cliui": "^5.0.0", "copy-webpack-plugin": "^4.6.0", "css-loader": "^1.0.1", - "cssnano": "^4.1.8", + "cssnano": "^4.1.10", + "current-script-polyfill": "^1.0.0", "debug": "^4.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", "escape-string-regexp": "^1.0.5", "file-loader": "^3.0.1", "fs-extra": "^7.0.1", - "globby": "^9.0.0", + "globby": "^9.2.0", "hash-sum": "^1.0.2", "html-webpack-plugin": "^3.2.0", "launch-editor-middleware": "^2.2.1", "lodash.defaultsdeep": "^4.6.0", "lodash.mapvalues": "^4.6.0", "lodash.transform": "^4.6.0", - "mini-css-extract-plugin": "^0.5.0", + "mini-css-extract-plugin": "^0.6.0", "minimist": "^1.2.0", - "ora": "^3.0.0", + "ora": "^3.4.0", "portfinder": "^1.0.20", "postcss-loader": "^3.0.0", - "read-pkg": "^4.0.1", - "semver": "^5.6.0", + "read-pkg": "^5.0.0", + "semver": "^6.0.0", "slash": "^2.0.0", "source-map-url": "^0.4.0", "ssri": "^6.0.1", "string.prototype.padend": "^3.0.0", - "terser-webpack-plugin": "^1.2.1", + "terser-webpack-plugin": "^1.2.3", "thread-loader": "^2.1.2", "url-loader": "^1.1.2", - "vue-loader": "^15.6.2", + "vue-loader": "^15.7.0", "webpack": ">=4 < 4.29", - "webpack-bundle-analyzer": "^3.0.3", + "webpack-bundle-analyzer": "^3.3.0", "webpack-chain": "^4.11.0", - "webpack-dev-server": "^3.1.14", + "webpack-dev-server": "^3.3.1", "webpack-merge": "^4.2.1", "yorkie": "^2.0.0" }, "dependencies": { "acorn": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz", - "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", "dev": true } } }, "@vue/cli-shared-utils": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.4.0.tgz", - "integrity": "sha512-w9j2qIroUUC2ym4Lb0lLMdlGmYThhwV0OizOEVigB5eZOEUEBV2Mv43K+nWJ6OyRBACnvhJTDi1gIwJo8zUvOw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.7.0.tgz", + "integrity": "sha512-+LPDAQ1CE3ci1ADOvNqJMPdqyxgJxOq5HUgGDSKCHwviXF6GtynfljZXiSzgWh5ueMFxJphCfeMsTZqFWwsHVg==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -1239,17 +1688,25 @@ "lru-cache": "^5.1.1", "node-ipc": "^9.1.1", "opn": "^5.3.0", - "ora": "^3.0.0", + "ora": "^3.4.0", "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "semver": "^5.5.0", + "request-promise-native": "^1.0.7", + "semver": "^6.0.0", "string.prototype.padstart": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true + } } }, "@vue/component-compiler-utils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.5.2.tgz", - "integrity": "sha512-3exq9O89GXo9E+CGKzgURCbasG15FtFMs8QRrCUVWGaKue4Egpw41MHb3Avtikv1VykKfBq3FvAnf9Nx3sdVJg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz", + "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==", "dev": true, "requires": { "consolidate": "^0.15.1", @@ -1260,7 +1717,7 @@ "postcss-selector-parser": "^5.0.0", "prettier": "1.16.3", "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.8.2" + "vue-template-es2015-compiler": "^1.9.0" }, "dependencies": { "lru-cache": { @@ -1484,13 +1941,13 @@ "dev": true }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, "acorn": { @@ -1513,6 +1970,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, + "optional": true, "requires": { "acorn": "^3.0.4" }, @@ -1521,7 +1979,8 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true + "dev": true, + "optional": true } } }, @@ -1532,15 +1991,15 @@ "dev": true }, "address": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz", + "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==", "dev": true }, "ajv": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", - "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -1556,9 +2015,9 @@ "dev": true }, "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "alphanum-sort": { @@ -1568,9 +2027,9 @@ "dev": true }, "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, "ansi-escapes": { @@ -1586,19 +2045,25 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "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==", - "dev": true, "requires": { "color-convert": "^1.9.0" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -1775,9 +2240,9 @@ "dev": true }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-limiter": { @@ -1799,13 +2264,13 @@ "dev": true }, "autoprefixer": { - "version": "9.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.7.tgz", - "integrity": "sha512-qS5wW6aXHkm53Y4z73tFGsUhmZu4aMPV9iHXYlF0c/wxjknXNHuj/1cIQb+6YH692DbJGGWcckAXX+VxKvahMA==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", + "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", "dev": true, "requires": { - "browserslist": "^4.4.1", - "caniuse-lite": "^1.0.30000932", + "browserslist": "^4.5.4", + "caniuse-lite": "^1.0.30000957", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^7.0.14", @@ -1939,37 +2404,17 @@ "object.assign": "^4.1.0" } }, - "babel-polyfill": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", - "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", - "requires": { - "babel-runtime": "^6.22.0", - "core-js": "^2.4.0", - "regenerator-runtime": "^0.10.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" - } - } - }, - "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=", + "babel-plugin-module-resolver": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", + "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", + "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" } }, "balanced-match": { @@ -2073,9 +2518,9 @@ "dev": true }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "bluebird": { @@ -2163,21 +2608,21 @@ "dev": true }, "bootstrap": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.2.1.tgz", - "integrity": "sha512-tt/7vIv3Gm2mnd/WeDx36nfGGHleil0Wg8IeB7eMrVkY0fZ5iTaBisSh8oNANc2IBsCc6vCgCNTIM/IEN0+50Q==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" }, "bootstrap-vue": { - "version": "2.0.0-rc.11", - "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.0.0-rc.11.tgz", - "integrity": "sha512-LxR+oL8yKr1DVoWUWTX+XhiT0xaTMH6142u2VSFDm4tewTH8HIrzN2YIl7HLZrw2DIuE9bRMIdWJqqn3aQe7Hw==", + "version": "2.0.0-rc.19", + "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.0.0-rc.19.tgz", + "integrity": "sha512-OCbRwqKb0F+RGr162m+RyKI4yNM0VjfxOGI32CMgHfCnnc0MZ0wF2Svg2E3Q7AWCq0N8LgD/EsF/K7Vg3kdDyw==", "requires": { - "bootstrap": "^4.1.1", - "lodash.get": "^4.4.2", - "lodash.startcase": "^4.4.0", - "opencollective": "^1.0.3", - "popper.js": "^1.12.9", - "vue-functional-data-merge": "^2.0.5" + "@nuxt/opencollective": "^0.2.2", + "bootstrap": "^4.3.1", + "core-js": ">=2.6.5 <3.0.0", + "popper.js": "^1.15.0", + "portal-vue": "^2.1.1", + "vue-functional-data-merge": "^2.0.7" } }, "brace-expansion": { @@ -2297,14 +2742,14 @@ } }, "browserslist": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", - "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.6.tgz", + "integrity": "sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" + "caniuse-lite": "^1.0.30000963", + "electron-to-chromium": "^1.3.127", + "node-releases": "^1.1.17" } }, "buffer": { @@ -2441,6 +2886,7 @@ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, + "optional": true, "requires": { "callsites": "^0.2.0" } @@ -2449,7 +2895,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true + "dev": true, + "optional": true }, "camel-case": { "version": "3.0.0", @@ -2462,9 +2909,9 @@ } }, "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caniuse-api": { @@ -2480,9 +2927,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000935", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000935.tgz", - "integrity": "sha512-1Y2uJ5y56qDt3jsDTdBHL1OqiImzjoQcBG6Yl3Qizq8mcc2SgCFpi+ZwLLqkztYnk9l87IYqRlNBnPSOTbFkXQ==", + "version": "1.0.30000963", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000963.tgz", + "integrity": "sha512-n4HUiullc7Lw0LyzpeLa2ffP8KxFBGdxqD/8G3bSL6oB758hZ2UE2CVK+tQN958tJIi0/tfpjAc67aAtoHgnrQ==", "dev": true }, "case-sensitive-paths-webpack-plugin": { @@ -2501,7 +2948,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2511,7 +2957,9 @@ "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true, + "optional": true }, "check-types": { "version": "7.4.0", @@ -2520,9 +2968,9 @@ "dev": true }, "chokidar": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.0.tgz", - "integrity": "sha512-5t6G2SH8eO6lCvYOoUpaRnF5Qfd//gd7qJAkwRUw9qlGVkiQ13uwQngqbWWaurOsaAm9+kUGbITADxt6H0XFNQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -2536,7 +2984,7 @@ "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", - "upath": "^1.1.0" + "upath": "^1.1.1" } }, "chownr": { @@ -2574,7 +3022,8 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "dev": true, + "optional": true }, "class-utils": { "version": "0.3.6", @@ -2620,103 +3069,81 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, "requires": { "restore-cursor": "^2.0.0" } }, - "cli-spinners": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", - "dev": true - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "cli-highlight": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.0.tgz", + "integrity": "sha512-DxaFAFBGRaB+xueXP7jlJC5f867gZUZXz74RaxeZ9juEZM2Sm/s6ilzpz0uxKiT+Mj6TzHlibtXfG/dK5bSwDA==", "dev": true, "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" + "chalk": "^2.3.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^4.0.0", + "yargs": "^11.0.0" } }, + "cli-spinners": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz", + "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==", + "dev": true + }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true }, "clipboardy": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", - "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.0.0.tgz", + "integrity": "sha512-XbVjHMsss0giNUkp/tV/3eEAZe8i1fZTLzmPKqjE1RGIAWOTiF5D014f6R+g53ZAq0IK3cPrJXFvqE8eQjhFYQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "arch": "^2.1.0", - "execa": "^0.8.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "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==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.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" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "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==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", @@ -2727,7 +3154,8 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "dev": true, + "optional": true }, "coa": { "version": "2.0.2", @@ -2757,9 +3185,9 @@ } }, "color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", - "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", + "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -2770,7 +3198,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -2778,8 +3205,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { "version": "1.5.3", @@ -2791,12 +3217,6 @@ "simple-swizzle": "^0.2.2" } }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true - }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -2807,9 +3227,9 @@ } }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, "commondir": { @@ -2819,31 +3239,31 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": ">= 1.40.0 < 2" } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, @@ -2889,6 +3309,11 @@ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, + "consola": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.6.0.tgz", + "integrity": "sha512-jge0Ip1NVoOafxZq1zxG1sLYVBtKV45BF39VV6YKSWb45nyLOHY51YP0+cBQ2DyOTKhCjtF0XrRJkjTvX4wzgQ==" + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -3142,9 +3567,9 @@ } }, "core-js": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz", - "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==" + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" }, "core-util-is": { "version": "1.0.2", @@ -3153,14 +3578,14 @@ "dev": true }, "cosmiconfig": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", - "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", + "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", "dev": true, "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", + "js-yaml": "^3.13.0", "parse-json": "^4.0.0" } }, @@ -3380,9 +3805,9 @@ "dev": true }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "cssesc": { @@ -3392,52 +3817,52 @@ "dev": true }, "cssnano": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz", - "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.6", + "cssnano-preset-default": "^4.0.7", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" } }, "cssnano-preset-default": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz", - "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", "cssnano-util-raw-cache": "^4.0.1", "postcss": "^7.0.0", - "postcss-calc": "^7.0.0", - "postcss-colormin": "^4.0.2", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^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.10", - "postcss-merge-rules": "^4.0.2", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.1", - "postcss-minify-params": "^4.0.1", - "postcss-minify-selectors": "^4.0.1", + "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.1", - "postcss-normalize-positions": "^4.0.1", - "postcss-normalize-repeat-style": "^4.0.1", - "postcss-normalize-string": "^4.0.1", - "postcss-normalize-timing-functions": "^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.1", - "postcss-ordered-values": "^4.1.1", - "postcss-reduce-initial": "^4.0.2", - "postcss-reduce-transforms": "^4.0.1", - "postcss-svgo": "^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" } }, @@ -3489,6 +3914,12 @@ } } }, + "current-script-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz", + "integrity": "sha1-8xz35PPiGLBybnOMqSoC00iO9hU=", + "dev": true + }, "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", @@ -3556,36 +3987,13 @@ "dev": true }, "default-gateway": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", - "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { - "execa": "^0.10.0", + "execa": "^1.0.0", "ip-regex": "^2.1.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.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" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } } }, "defaults": { @@ -3648,17 +4056,18 @@ } }, "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { + "@types/glob": "^7.1.1", "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" + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { "globby": { @@ -3681,6 +4090,12 @@ "dev": true } } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true } } }, @@ -3768,6 +4183,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "optional": true, "requires": { "esutils": "^2.0.2" } @@ -3782,21 +4198,13 @@ } }, "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { @@ -3812,14 +4220,19 @@ "dev": true }, "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { "domelementtype": "1" } }, + "dompurify": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-1.0.10.tgz", + "integrity": "sha512-huhl3DSWX5LaA7jDtnj3XQdJgWW1wYouNW7N0drGzQa4vEUSVWyeFN+Atx6HP4r5cang6oQytMom6I4yhGJj5g==" + }, "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", @@ -3839,6 +4252,18 @@ "is-obj": "^1.0.0" } }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, + "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==", + "dev": true + }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -3886,9 +4311,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.113", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", - "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", + "version": "1.3.128", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.128.tgz", + "integrity": "sha512-1QK+KELj1mhC9iE7grSP9PP2f06F85UgTs0M9qjuvSuKwxbyifhyPB8dZ27IlYvzMBnLtO4oHNBKTQoN6Tg5mg==", "dev": true }, "elliptic": { @@ -3906,6 +4331,12 @@ "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==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -3918,14 +4349,6 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -4016,35 +4439,35 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.13.0.tgz", - "integrity": "sha512-nqD5WQMisciZC5EHZowejLKQjWGuFS5c70fxqSKlnDME+oz9zmE8KTlX+lHSg+/5wsC/kf9Q9eMkC8qS3oM2fg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^6.9.1", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.0", + "espree": "^5.0.1", "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", + "lodash": "^4.17.11", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", @@ -4055,14 +4478,14 @@ "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", - "table": "^5.0.2", + "table": "^5.2.3", "text-table": "^0.2.0" }, "dependencies": { "acorn": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz", - "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true }, "acorn-jsx": { @@ -4071,25 +4494,28 @@ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, - "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", - "dev": true - }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "espree": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", - "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "^6.0.2", + "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } @@ -4105,6 +4531,26 @@ "tmp": "^0.0.33" } }, + "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==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -4122,9 +4568,9 @@ } }, "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -4138,17 +4584,17 @@ "run-async": "^2.2.0", "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^4.0.0" + "ansi-regex": "^4.1.0" } } } @@ -4176,16 +4622,64 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.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=", + "dev": true + } + } + }, "table": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.2.tgz", - "integrity": "sha512-f8mJmuu9beQEDkKHLzOv4VxVYlU68NpdzjbGPl69i4Hx0sTopJuNxuzJd17iV2h24dAfa93u794OnDA5jqXvfQ==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", + "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", "dev": true, "requires": { - "ajv": "^6.6.1", + "ajv": "^6.9.1", "lodash": "^4.17.11", - "slice-ansi": "^2.0.0", - "string-width": "^2.1.1" + "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==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.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==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" } } } @@ -4204,18 +4698,18 @@ } }, "eslint-plugin-vue": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.1.0.tgz", - "integrity": "sha512-C7avvbGLb9J1PyGiFolPcGR4ljUc+dKm5ZJdrUKXwXFxHHx4SqOmRI29AsFyW7PbCGcnOvIlaq7NJS6HDIak+g==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.2.tgz", + "integrity": "sha512-CtGWH7IB0DA6BZOwcV9w9q3Ri6Yuo8qMjx05SmOGJ6X6E0Yo3y9E/gQ5tuNxg2dEt30tRnBoFTbvtmW9iEoyHA==", "dev": true, "requires": { - "vue-eslint-parser": "^4.0.2" + "vue-eslint-parser": "^5.0.0" }, "dependencies": { "acorn": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz", - "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true }, "acorn-jsx": { @@ -4236,9 +4730,9 @@ } }, "vue-eslint-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-4.0.3.tgz", - "integrity": "sha512-AUeQsYdO6+7QXCems+WvGlrXd37PHv/zcRQSQdY1xdOMwdFAPEnMBsv7zPvk0TPGulXkK/5p/ITgrjiYB7k3ag==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", + "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", "dev": true, "requires": { "debug": "^4.1.0", @@ -4252,9 +4746,9 @@ } }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -4278,6 +4772,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, + "optional": true, "requires": { "acorn": "^5.5.0", "acorn-jsx": "^3.0.0" @@ -4332,9 +4827,9 @@ "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", "dev": true }, "events": { @@ -4513,6 +5008,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "optional": true, "requires": { "chardet": "^0.4.0", "iconv-lite": "^0.4.17", @@ -4647,6 +5144,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -4656,6 +5154,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, + "optional": true, "requires": { "flat-cache": "^1.2.1", "object-assign": "^4.0.1" @@ -4685,10 +5184,9 @@ } }, "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-4.1.2.tgz", + "integrity": "sha512-iSWteWtfNcrWQTkQw8ble2bnonSl7YJImsn9OZKpE2E4IHhXI78eASpDYUljXZZdYj36QsEKjOs/CsiDqmKMJw==" }, "fill-range": { "version": "4.0.0", @@ -4745,24 +5243,60 @@ } } }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + } + } + }, "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^1.0.0", + "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^2.0.0" } }, "flat-cache": { @@ -4770,6 +5304,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "dev": true, + "optional": true, "requires": { "circular-json": "^0.3.1", "graceful-fs": "^4.1.2", @@ -4777,6 +5312,12 @@ "write": "^0.2.1" } }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "dev": true + }, "flush-write-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.0.tgz", @@ -4907,14 +5448,14 @@ "dev": true }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -4926,7 +5467,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -4947,12 +5489,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4967,17 +5511,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4986,12 +5533,12 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -5094,7 +5641,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5106,6 +5654,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5120,6 +5669,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5127,12 +5677,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5151,29 +5703,30 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, @@ -5201,13 +5754,13 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -5231,7 +5784,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5243,6 +5797,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5328,7 +5883,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -5343,7 +5899,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -5364,6 +5920,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5383,6 +5940,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5426,12 +5984,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -5525,13 +6085,14 @@ "dev": true }, "globby": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.0.0.tgz", - "integrity": "sha512-q0qiO/p1w/yJ0hk8V9x1UXlgsXUxlGd0AHUOXZVXBO6aznDtpx7M8D1kBrCAItoPm+4l8r6ATXV1JpjY2SBQOw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dev": true, "requires": { + "@types/glob": "^7.1.1", "array-union": "^1.0.2", - "dir-glob": "^2.2.1", + "dir-glob": "^2.2.2", "fast-glob": "^2.2.6", "glob": "^7.1.3", "ignore": "^4.0.3", @@ -5560,13 +6121,21 @@ "dev": true }, "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.0.tgz", + "integrity": "sha512-wfSnvypBDRW94v5W3ckvvz/zFUNdJ81VgOP6tE4bPpRUcc0wGqU+y0eZjJEvKxwubJFix6P84sE8M51YWLT7rQ==", "dev": true, "requires": { "duplexer": "^0.1.1", - "pify": "^3.0.0" + "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==", + "dev": true + } } }, "handle-thing": { @@ -5604,6 +6173,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" }, @@ -5611,15 +6181,15 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true } } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.0", @@ -5697,6 +6267,12 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "highlight.js": { + "version": "9.15.6", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", + "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", + "dev": true + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -5709,9 +6285,9 @@ } }, "hoek": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz", - "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz", + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==", "dev": true }, "hoopy": { @@ -5775,6 +6351,14 @@ "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==", + "dev": true + } } }, "html-tags": { @@ -5825,49 +6409,29 @@ } }, "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" + "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": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true } } }, @@ -5907,15 +6471,15 @@ } }, "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { - "http-proxy": "^1.16.2", + "http-proxy": "^1.17.0", "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "http-signature": { @@ -5939,6 +6503,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -5978,9 +6543,9 @@ } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iferr": { @@ -6097,6 +6662,7 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, + "optional": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", @@ -6112,16 +6678,35 @@ "string-width": "^2.1.0", "strip-ansi": "^4.0.0", "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "internal-ip": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", - "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, "invariant": { @@ -6134,9 +6719,9 @@ } }, "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==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, "ip": { @@ -6152,9 +6737,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "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==", "dev": true }, "is-absolute-url": { @@ -6298,7 +6883,8 @@ "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=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "4.0.0", @@ -6336,29 +6922,35 @@ "dev": true }, "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=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", + "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==", "dev": true }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "^2.1.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=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "^1.0.2" } }, + "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=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -6371,7 +6963,8 @@ "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true }, "is-regex": { "version": "1.0.4", @@ -6391,7 +6984,8 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-svg": { "version": "3.0.0", @@ -6507,9 +7101,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -6600,11 +7194,6 @@ "verror": "1.10.0" } }, - "jsrsasign": { - "version": "8.0.12", - "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-8.0.12.tgz", - "integrity": "sha1-Iqu5ZW00owuVMENnIINeicLlwxY=" - }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -6637,12 +7226,12 @@ } }, "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "invert-kv": "^1.0.0" } }, "levn": { @@ -6656,9 +7245,9 @@ } }, "loader-fs-cache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", - "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "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==", "dev": true, "requires": { "find-cache-dir": "^0.1.1", @@ -6735,19 +7324,20 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^3.0.0", + "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true }, "lodash.defaultsdeep": { "version": "4.6.0", @@ -6755,11 +7345,6 @@ "integrity": "sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E=", "dev": true }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -6778,11 +7363,6 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=" - }, "lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", @@ -6891,14 +7471,12 @@ "dev": true }, "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" + "mimic-fn": "^1.0.0" } }, "memory-fs": { @@ -6978,42 +7556,55 @@ } }, "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", + "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", "dev": true }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "mime-db": "~1.37.0" + "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==" + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true }, "mini-css-extract-plugin": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", - "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz", + "integrity": "sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==", "dev": true, "requires": { "loader-utils": "^1.1.0", + "normalize-url": "^2.0.1", "schema-utils": "^1.0.0", "webpack-sources": "^1.1.0" }, "dependencies": { + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -7051,7 +7642,8 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true }, "mississippi": { "version": "3.0.0", @@ -7148,12 +7740,24 @@ "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", "dev": true, "optional": true }, @@ -7183,9 +7787,9 @@ "dev": true }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { @@ -7210,13 +7814,9 @@ } }, "node-fetch": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", - "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz", + "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==" }, "node-forge": { "version": "0.7.5", @@ -7275,9 +7875,9 @@ } }, "node-releases": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.7.tgz", - "integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.17.tgz", + "integrity": "sha512-/SCjetyta1m7YXLgtACZGDYJdCSIBAWorDWkGCGZlydP2Ll7J48l7j/JxNYZ+xsgSPbWfdulVS/aY+GdjUsQ7Q==", "dev": true, "requires": { "semver": "^5.3.0" @@ -7352,7 +7952,8 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "object-copy": { "version": "0.1.0", @@ -7392,9 +7993,9 @@ "dev": true }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-visit": { @@ -7456,13 +8057,9 @@ "dev": true }, "oidc-client": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/oidc-client/-/oidc-client-1.6.1.tgz", - "integrity": "sha512-buA9G0hlFjUwxoL/xuHunBtTgoICtJSojnZtATqMliUTKxPYAzHprOQ85Lj0hgF+Zv8lI/ViqaNFDG0Z5KCUKA==", - "requires": { - "babel-polyfill": ">=6.9.1", - "jsrsasign": "^8.0.12" - } + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/oidc-client/-/oidc-client-1.7.1.tgz", + "integrity": "sha512-qsPBQVa/BY6AmdY89erANJbfDXrX1dqu9lKgvYZzkVDzIj5mmw6wGjFeQuV2HDm4TiJA0VT5HSTWOWnXZUYu0g==" }, "on-finished": { "version": "2.3.0", @@ -7474,9 +8071,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "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==", "dev": true }, "once": { @@ -7492,94 +8089,11 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, "requires": { "mimic-fn": "^1.0.0" } }, - "opencollective": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz", - "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=", - "requires": { - "babel-polyfill": "6.23.0", - "chalk": "1.1.3", - "inquirer": "3.0.6", - "minimist": "1.2.0", - "node-fetch": "1.6.3", - "opn": "4.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "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" - } - }, - "inquirer": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz", - "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=", - "requires": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.1", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^2.0.0", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, - "opn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "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=" - } - } - }, "opener": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", @@ -7587,9 +8101,9 @@ "dev": true }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -7610,16 +8124,16 @@ } }, "ora": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", - "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "dev": true, "requires": { - "chalk": "^2.3.1", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", - "cli-spinners": "^1.1.0", + "cli-spinners": "^2.0.0", "log-symbols": "^2.2.0", - "strip-ansi": "^4.0.0", + "strip-ansi": "^5.2.0", "wcwidth": "^1.0.1" } }, @@ -7639,20 +8153,71 @@ "dev": true }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.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" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } } }, "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=" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "p-defer": { "version": "1.0.0", @@ -7667,45 +8232,45 @@ "dev": true }, "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "^1.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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^1.1.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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parallel-transform": { @@ -7729,26 +8294,26 @@ } }, "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "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==", "dev": true, "requires": { "callsites": "^3.0.0" }, "dependencies": { "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true } } }, "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { "asn1.js": "^4.0.0", @@ -7769,10 +8334,16 @@ "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==", + "dev": true + }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -7866,12 +8437,14 @@ "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -7883,18 +8456,78 @@ "dev": true, "requires": { "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "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==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "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==", + "dev": true + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" } }, "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true + "dev": true, + "optional": true }, "popper.js": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz", - "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", + "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" + }, + "portal-vue": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.3.tgz", + "integrity": "sha512-7NSn4044csr6eqnt3XefU2DFzEHMnOhvuD1jei2MntMyIvDPIavk2h6Fg/h62pA4Vh8K33iauPzrLLI1N7RVXA==" }, "portfinder": { "version": "1.0.20", @@ -7971,9 +8604,9 @@ } }, "postcss-colormin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", - "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -7994,9 +8627,9 @@ } }, "postcss-discard-comments": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", - "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dev": true, "requires": { "postcss": "^7.0.0" @@ -8079,9 +8712,9 @@ } }, "postcss-merge-longhand": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", - "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", "dev": true, "requires": { "css-color-names": "0.0.4", @@ -8091,9 +8724,9 @@ } }, "postcss-merge-rules": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", - "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -8128,9 +8761,9 @@ } }, "postcss-minify-gradients": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", - "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==", + "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==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -8140,9 +8773,9 @@ } }, "postcss-minify-params": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", - "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==", + "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==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -8154,9 +8787,9 @@ } }, "postcss-minify-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", - "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -8303,9 +8936,9 @@ } }, "postcss-normalize-display-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", - "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==", + "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==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -8314,9 +8947,9 @@ } }, "postcss-normalize-positions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", - "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==", + "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==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -8326,9 +8959,9 @@ } }, "postcss-normalize-repeat-style": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", - "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==", + "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==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -8338,9 +8971,9 @@ } }, "postcss-normalize-string": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", - "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==", + "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==", "dev": true, "requires": { "has": "^1.0.0", @@ -8349,9 +8982,9 @@ } }, "postcss-normalize-timing-functions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", - "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==", + "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==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -8383,9 +9016,9 @@ } }, "postcss-normalize-whitespace": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", - "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "dev": true, "requires": { "postcss": "^7.0.0", @@ -8393,9 +9026,9 @@ } }, "postcss-ordered-values": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", - "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -8404,9 +9037,9 @@ } }, "postcss-reduce-initial": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", - "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==", + "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==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -8416,9 +9049,9 @@ } }, "postcss-reduce-transforms": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", - "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -8439,9 +9072,9 @@ } }, "postcss-svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", - "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==", + "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==", "dev": true, "requires": { "is-svg": "^3.0.0", @@ -8473,6 +9106,12 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, "prettier": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", @@ -8520,13 +9159,13 @@ "dev": true }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "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==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, "prr": { @@ -8612,6 +9251,17 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "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", @@ -8625,15 +9275,15 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -8679,14 +9329,15 @@ } }, "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", + "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", "dev": true, "requires": { - "normalize-package-data": "^2.3.2", + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", "parse-json": "^4.0.0", - "pify": "^3.0.0" + "type-fest": "^0.4.1" } }, "readable-stream": { @@ -8722,24 +9373,24 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", - "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", + "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", "dev": true, "requires": { "regenerate": "^1.4.0" } }, "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", "dev": true }, "regenerator-transform": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", - "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", + "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", "dev": true, "requires": { "private": "^0.1.6" @@ -8756,34 +9407,30 @@ } }, "regexp-tree": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.1.tgz", - "integrity": "sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw==", - "dev": true, - "requires": { - "cli-table3": "^0.5.0", - "colors": "^1.1.2", - "yargs": "^12.0.5" - } + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz", + "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==", + "dev": true }, "regexpp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true + "dev": true, + "optional": true }, "regexpu-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", - "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^7.0.0", + "regenerate-unicode-properties": "^8.0.2", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.0.2" + "unicode-match-property-value-ecmascript": "^1.1.0" } }, "regjsgen": { @@ -8822,14 +9469,14 @@ "dev": true }, "renderkid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.2.tgz", - "integrity": "sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", "dev": true, "requires": { "css-select": "^1.1.0", - "dom-converter": "~0.2", - "htmlparser2": "~3.3.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", "strip-ansi": "^3.0.0", "utila": "^0.4.0" }, @@ -8914,23 +9561,23 @@ } }, "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", "dev": true, "requires": { - "lodash": "^4.13.1" + "lodash": "^4.17.11" } }, "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "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==", "dev": true, "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" } }, "require-directory": { @@ -8956,6 +9603,7 @@ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, + "optional": true, "requires": { "caller-path": "^0.1.0", "resolve-from": "^1.0.0" @@ -8967,10 +9615,16 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, + "reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=", + "dev": true + }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -8997,7 +9651,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true + "dev": true, + "optional": true }, "resolve-url": { "version": "0.2.1", @@ -9009,6 +9664,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -9055,6 +9711,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, "requires": { "is-promise": "^2.1.0" } @@ -9068,30 +9725,27 @@ "aproba": "^1.1.1" } }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" - }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true + "dev": true, + "optional": true }, "rx-lite-aggregates": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, + "optional": true, "requires": { "rx-lite": "*" } }, "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.1.tgz", + "integrity": "sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -9115,7 +9769,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sax": { "version": "1.2.4", @@ -9149,9 +9804,9 @@ } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, "send": { @@ -9329,7 +9984,8 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-swizzle": { "version": "0.2.2", @@ -9359,6 +10015,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, + "optional": true, "requires": { "is-fullwidth-code-point": "^2.0.0" } @@ -9529,6 +10186,15 @@ } } }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "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", @@ -9555,9 +10221,9 @@ } }, "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -9605,9 +10271,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", "dev": true }, "spdy": { @@ -9638,9 +10304,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -9775,13 +10441,37 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "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=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.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=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "string.prototype.padend": { @@ -9816,11 +10506,12 @@ } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-eof": { @@ -9842,9 +10533,9 @@ "dev": true }, "stylehacks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", - "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", + "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==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -9869,7 +10560,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -9881,33 +10571,25 @@ "dev": true }, "svgo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", - "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "dev": true, "requires": { - "coa": "~2.0.1", - "colors": "~1.1.2", + "chalk": "^2.4.1", + "coa": "^2.0.2", "css-select": "^2.0.0", - "css-select-base-adapter": "~0.1.0", + "css-select-base-adapter": "^0.1.1", "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", - "csso": "^3.5.0", - "js-yaml": "^3.12.0", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", - "object.values": "^1.0.4", + "object.values": "^1.1.0", "sax": "~1.2.4", - "stable": "~0.1.6", + "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" - }, - "dependencies": { - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - } } }, "table": { @@ -9915,6 +10597,7 @@ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, + "optional": true, "requires": { "ajv": "^5.2.3", "ajv-keywords": "^2.1.0", @@ -9929,6 +10612,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, + "optional": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", @@ -9940,37 +10624,40 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true + "dev": true, + "optional": true }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true + "dev": true, + "optional": true }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "dev": true, + "optional": true } } }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "^2.19.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.9" + "source-map-support": "~0.5.10" }, "dependencies": { "source-map": { @@ -9982,9 +10669,9 @@ } }, "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", "dev": true, "requires": { "cacache": "^11.0.2", @@ -10022,6 +10709,24 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "thread-loader": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.2.tgz", @@ -10036,7 +10741,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "through2": { "version": "2.0.5", @@ -10073,6 +10779,7 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -10212,14 +10919,20 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true + }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, "typedarray": { @@ -10229,15 +10942,21 @@ "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "dev": true, "requires": { - "commander": "~2.17.1", + "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==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10263,15 +10982,15 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", - "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", + "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==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", - "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", + "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==", "dev": true }, "union-value": { @@ -10398,9 +11117,9 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "upper-case": { @@ -10467,12 +11186,12 @@ } }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -10568,15 +11287,16 @@ } }, "vue": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.2.tgz", - "integrity": "sha512-NZAb0H+t3/99g2nygURcEJ+ncvzNLPiEiFI5MGhc1Cjsw5uYprF+Ol7SOd1RXPcmVVzK7jUBl0th2tNgt+VQDg==" + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz", + "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==" }, "vue-eslint-parser": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", "dev": true, + "optional": true, "requires": { "debug": "^3.1.0", "eslint-scope": "^3.7.1", @@ -10591,6 +11311,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, + "optional": true, "requires": { "ms": "^2.1.1" } @@ -10600,6 +11321,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", "dev": true, + "optional": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -10613,15 +11335,15 @@ "integrity": "sha512-pvLc+H+x2prwBj/uSEIITyxjz/7ZUVVK8uYbrYMmhDvMXnzh9OvQvVEwcOSBQjsubd4Eq41/CSJaWzy4hemMNQ==" }, "vue-hot-reload-api": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz", - "integrity": "sha512-AA86yKZ5uOKz87/q1UpngEXhbRkaYg1b7HMMVRobNV1IVKqZe8oLIzo6iMocVwZXnYitlGwf2k4ZRLOZlS8oPQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz", + "integrity": "sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==", "dev": true }, "vue-loader": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.6.2.tgz", - "integrity": "sha512-T6fONodj861M3PqZ1jlbUFjeezbUnPRY2bd+3eZuDvYADgkN3VFU2H5feqySNg9XBt8rcbyBGmFWTZtrOX+v5w==", + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz", + "integrity": "sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==", "dev": true, "requires": { "@vue/component-compiler-utils": "^2.5.1", @@ -10632,9 +11354,9 @@ } }, "vue-router": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.2.tgz", - "integrity": "sha512-opKtsxjp9eOcFWdp6xLQPLmRGgfM932Tl56U9chYTnoWqKxQ8M20N7AkdEbM5beUh6wICoFGYugAX9vQjyJLFg==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.6.tgz", + "integrity": "sha512-Ox0ciFLswtSGRTHYhGvx2L44sVbTPNS+uD2kRISuo8B39Y79rOo0Kw0hzupTmiVtftQYCZl87mwldhh2L9Aquw==" }, "vue-style-loader": { "version": "4.1.2", @@ -10647,9 +11369,9 @@ } }, "vue-template-compiler": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.2.tgz", - "integrity": "sha512-2dBKNCtBPdx1TFef7T4zwF8IjOx2xbMNryCtFzneP+XIonJwOtnkq4s1mhKv8W79gXcGINQWtuaxituGAcuSnA==", + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz", + "integrity": "sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -10657,9 +11379,9 @@ } }, "vue-template-es2015-compiler": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.8.2.tgz", - "integrity": "sha512-cliV19VHLJqFUYbz/XeWXe5CO6guzwd0yrrqqp0bmjlMP3ZZULY7fu8RTC4+3lmHwo6ESVDHFDsvjB15hcR5IA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", "dev": true }, "watchpack": { @@ -10724,12 +11446,13 @@ } }, "webpack-bundle-analyzer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz", - "integrity": "sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", + "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", "dev": true, "requires": { - "acorn": "^5.7.3", + "acorn": "^6.0.7", + "acorn-walk": "^6.1.1", "bfj": "^6.1.1", "chalk": "^2.4.1", "commander": "^2.18.0", @@ -10743,10 +11466,16 @@ "ws": "^6.0.0" }, "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", "dev": true } } @@ -10762,53 +11491,53 @@ } }, "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.2.tgz", + "integrity": "sha512-A47I5SX60IkHrMmZUlB0ZKSWi29TZTcPz7cha1Z75yYOsgWh/1AcPmQEbC8ZIbU3A1ytSv1PMU0PyPz2Lmz2jg==", "dev": true, "requires": { - "memory-fs": "~0.4.1", + "memory-fs": "^0.4.1", "mime": "^2.3.1", "range-parser": "^1.0.3", "webpack-log": "^2.0.0" } }, "webpack-dev-server": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", - "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.3.1.tgz", + "integrity": "sha512-jY09LikOyGZrxVTXK0mgIq9y2IhCoJ05848dKZqX1gAGLU1YDqgpOT71+W53JH/wI4v6ky4hm+KvSyW14JEs5A==", "dev": true, "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": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", + "chokidar": "^2.1.5", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.0", + "express": "^4.16.4", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", "import-local": "^2.0.0", - "internal-ip": "^3.0.1", + "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", + "killable": "^1.0.1", + "loglevel": "^1.6.1", + "opn": "^5.5.0", + "portfinder": "^1.0.20", "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "semver": "^5.6.0", - "serve-index": "^1.7.2", + "selfsigned": "^1.10.4", + "semver": "^6.0.0", + "serve-index": "^1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.3.0", "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "3.4.0", + "webpack-dev-middleware": "^3.6.2", "webpack-log": "^2.0.0", - "yargs": "12.0.2" + "yargs": "12.0.5" }, "dependencies": { "ansi-regex": { @@ -10817,30 +11546,120 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "camelcase": { + "cliui": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "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=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "ms": "^2.1.1" + "locate-path": "^3.0.0" } }, - "decamelize": { + "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==", + "dev": true + }, + "lcid": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "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==", "dev": true, "requires": { - "xregexp": "4.0.0" + "p-limit": "^2.0.0" } }, + "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==", + "dev": true + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -10852,6 +11671,12 @@ "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -10861,14 +11686,23 @@ "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==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { "cliui": "^4.0.0", - "decamelize": "^2.0.0", + "decamelize": "^1.2.0", "find-up": "^3.0.0", "get-caller-file": "^1.0.1", "os-locale": "^3.0.0", @@ -10878,16 +11712,17 @@ "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" + "yargs-parser": "^11.1.1" } }, "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==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -11033,25 +11868,20 @@ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, + "optional": true, "requires": { "mkdirp": "^0.5.1" } }, "ws": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz", - "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { "async-limiter": "~1.0.0" } }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -11071,33 +11901,74 @@ "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "requires": { "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "os-locale": "^2.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": "^11.1.1" + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } } }, "yorkie": { diff --git a/package.json b/package.json index 9dc3c1bb754c105053f9951e1cedd080857e0156..8ca72fb9076a86399903a027857a6f9e90df9006 100644 --- a/package.json +++ b/package.json @@ -9,20 +9,22 @@ }, "dependencies": { "axios": "^0.18.0", - "bootstrap-vue": "^2.0.0-rc.11", - "oidc-client": "^1.6.1", - "vue": "^2.5.22", - "vue-router": "^3.0.1" + "bootstrap-vue": "^2.0.0-rc.19", + "dompurify": "^1.0.10", + "filesize": "^4.1.2", + "oidc-client": "^1.7.1", + "vue": "^2.6.10", + "vue-router": "^3.0.6" }, "devDependencies": { - "@vue/cli-plugin-babel": "^3.4.0", - "@vue/cli-plugin-eslint": "^3.4.0", - "@vue/cli-service": "^3.4.0", + "@vue/cli-plugin-babel": "^3.7.0", + "@vue/cli-plugin-eslint": "^3.7.0", + "@vue/cli-service": "^3.7.0", "babel-eslint": "^10.0.1", "copy-webpack-plugin": "^4.6.0", - "eslint": "^5.8.0", - "eslint-plugin-vue": "^5.0.0", - "vue-template-compiler": "^2.5.21" + "eslint": "^5.16.0", + "eslint-plugin-vue": "^5.2.2", + "vue-template-compiler": "^2.6.10" }, "eslintConfig": { "root": true, @@ -30,10 +32,15 @@ "node": true }, "extends": [ - "plugin:vue/essential", + "plugin:vue/recommended", "eslint:recommended" ], - "rules": {}, + "rules": { + "no-console": "off", + "curly": "error", + "block-spacing": "error", + "keyword-spacing": "error" + }, "parserOptions": { "parser": "babel-eslint" } diff --git a/.env.development b/sample.env.development similarity index 61% rename from .env.development rename to sample.env.development index 7edf1aed286e4a208cbdd694fac1d305cd253977..c9c237792f121defce77ef3ce1531b4c5dbdb50d 100644 --- a/.env.development +++ b/sample.env.development @@ -1,18 +1,23 @@ +# For detailed comments take a look at the sample.env.production +# Here we filled in some common defaults for local development + +# API URLs for the other AuRa modules +# =================================== VUE_APP_API_STEERING = http://127.0.0.1:8000/api/v1/ VUE_APP_API_STEERING_SHOWS = http://127.0.0.1:8000/api/v1/shows/ -VUE_APP_OIDC_CLIENT_ID = 078036 +VUE_APP_API_TANK = http://127.0.0.1:8040/api/v1/ + +# OIDC settings +# ============= +# The client ID will most certainly differ for every local dev environment: +VUE_APP_OIDC_CLIENT_ID = 575513 VUE_APP_API_STEERING_OIDC_URI = http://localhost:8000/openid VUE_APP_API_STEERING_OIDC_EXPIRE_NOTIFICATION = 120 VUE_APP_API_STEERING_OIDC_REDIRECT_URI = http://localhost:8080/oidc_callback.html VUE_APP_API_STEERING_OIDC_REDIRECT_URI_SILENT = http://localhost:8080/oidc_callback_silentRenew.html VUE_APP_API_STEERING_OIDC_REDIRECT_URI_POSTLOGOUT = http://localhost:8080 - # Dashboard UI defaults # ===================== - -# How many timeslots should be shown by default? (has to be a string) VUE_APP_TIMESLOT_FILTER_DEFAULT_NUMSLOTS = 10 - -# For how many days from now should timeslots be fetched by default? (has to be an int) VUE_APP_TIMESLOT_FILTER_DEFAULT_DAYS = 60 diff --git a/.env.production b/sample.env.production similarity index 93% rename from .env.production rename to sample.env.production index 90d074bac684bd0f91c044c0c549bd2d11b794ba..8cf66c21f3fd6f4f80451eee412fd313dc5f782d 100644 --- a/.env.production +++ b/sample.env.production @@ -5,6 +5,10 @@ VUE_APP_API_STEERING = http://YOUR.STEERING.DOMAIN/api/v1/ VUE_APP_API_STEERING_SHOWS = http://YOUR.STEERING.DOMAIN/api/v1/shows/ +# aura/tank REST API settings +# =========================== +VUE_APP_API_TANK = http://YOUR.TANK.DOMAIN/api/v1/ + # Open ID Connect settings # ======================== diff --git a/src/App.vue b/src/App.vue index 77473293cf0421e0f83d563cdfbcd0288a2e8512..2be6e8e5191e881d60d7e3495148110347ff32d7 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,8 +1,11 @@ <template> <div id="app"> - <app-header v-bind:modules="modules" v-bind:user="user"></app-header> - <router-view/> - <app-footer></app-footer> + <app-header + :modules="modules" + :user="user" + /> + <router-view /> + <app-footer /> </div> </template> @@ -15,7 +18,7 @@ import footer from './components/Footer.vue' import axios from 'axios' export default { - name: 'app', + name: 'App', components: { 'app-header': header, 'app-footer': footer @@ -62,10 +65,31 @@ export default { }, computed: { modules: function () { - if (this.user.logged_in === true) return this.modules_logged_in - else return this.modules_logged_out + if (this.user.logged_in === true) { return this.modules_logged_in } + else { return this.modules_logged_out } } }, + mounted () { + // TODO: remove oidc logging after thorough testing + oidc.Log.logger = console + let self = this + this.oidcmgr.events.addAccessTokenExpiring(function () { + console.log('starting silent access_token renewal') + self.oidcmgr.signinSilent().then(function (user) { + self.user.access_token = user.access_token + console.log(self.user.access_token) + }).catch(function (err) { + console.log(err) + alert('Your OpenID access token could not be renewed automatically.\n' + + 'You will be logged out in ' + process.env.VUE_APP_API_STEERING_OIDC_EXPIRE_NOTIFICATION + ' seconds.') + }) + }) + this.oidcmgr.events.addAccessTokenExpired(function () { + console.log('expired!') + self.signOut() + }) + this.getOIDCUser() + }, methods: { signIn () { this.oidcmgr.signinRedirect().catch(function (err) { @@ -133,27 +157,6 @@ export default { console.log(new Date(user.expires_at * 1000).toUTCString()) console.log(user.access_token) } - }, - mounted () { - // TODO: remove oidc logging after thorough testing - oidc.Log.logger = console - let self = this - this.oidcmgr.events.addAccessTokenExpiring(function () { - console.log('starting silent access_token renewal') - self.oidcmgr.signinSilent().then(function (user) { - self.user.access_token = user.access_token - console.log(self.user.access_token) - }).catch(function (err) { - console.log(err) - alert('Your OpenID access token could not be renewed automatically.\n' + - 'You will be logged out in ' + process.env.VUE_APP_API_STEERING_OIDC_EXPIRE_NOTIFICATION + ' seconds.') - }) - }) - this.oidcmgr.events.addAccessTokenExpired(function () { - console.log('expired!') - self.signOut() - }) - this.getOIDCUser() } } </script> diff --git a/src/components/Credits.vue b/src/components/Credits.vue index ca01e0e7faab1166995a3e7878a628702f72c98a..6c5cf99bf1374b3e1480f208872a9918ade7566b 100644 --- a/src/components/Credits.vue +++ b/src/components/Credits.vue @@ -2,15 +2,15 @@ <b-container> <h1>Credits</h1> <p> - autoradio/<b>dashboard</b><br /> - ... developed under the GNU General Public License, by<br /> + autoradio/<b>dashboard</b><br> + ... developed under the GNU General Public License, by<br> <ul> <li>Andrea Ida Malkah Klaura <a href="mailto:jackie@o94.at">jackie@o94.at</a></li> <li>...</li> </ul> </p> <p> - <b>Graphics & Icons</b><br /> + <b>Graphics & Icons</b><br> <ul> <li>animated loading icon: <a href="https://loading.io/spinner">spinner by loading.io</a>, CC-BY License</li> <li>all other Icons: <a href="http://tango.freedesktop.org/">Tango Project</a>, Public Domain</li> diff --git a/src/components/Debug.vue b/src/components/Debug.vue index be407d41fc010a9a1437b3a7ee3550e72340b74e..cbcabb92c656c90f092d47c92d8ec642786f98c1 100644 --- a/src/components/Debug.vue +++ b/src/components/Debug.vue @@ -6,13 +6,19 @@ a productive version. </p> <p> - Here we go: <b-button size="lg" variant="warning" @click="debug()">Debug now!</b-button> + Here we go: <b-button + size="lg" + variant="warning" + @click="debug()" + > + Debug now! + </b-button> </p> - Response headers: <br /> + Response headers: <br> <div style="border: 1px dotted #aaa"> {{ response.headers }} </div> - Response data: <br /> + Response data: <br> <div style="border: 1px dotted #aaa"> {{ response.data }} </div> diff --git a/src/components/FileManager.vue b/src/components/FileManager.vue index 0e88f39db88c1b4e79c9d1924698c3e36e4ae0ce..a4b2b0d4928abdf6d142026f4600a7200e2ae630 100644 --- a/src/components/FileManager.vue +++ b/src/components/FileManager.vue @@ -1,20 +1,1256 @@ <template> - <b-container align="center"> - <h1>Dateien und Playlists verwalten</h1> - <br /><br /> - <div style="border: 5px dotted #5c3566;"> - <br /><br /> - <p><b>By the mighty witchcraftry of the mother of time!</b></p> - <p>This feature is not implemented yet.</p> - <br /><br /> + <b-container> + <!-- This first row is so far only used to provide a dropdown for + choosing one of the loaded shows (which the user has access to) --> + <b-row> + <b-col> + <h3>Dateien und Playlists</h3> + </b-col> + <b-col align="right"> + <b-dropdown + id="ddshows" + text="Sendereihe auswählen" + variant="info" + > + <b-dropdown-item + v-for="(show, index) in shows" + :key="show.id" + @click="switchShow(index)" + > + {{ show.name }} + </b-dropdown-item> + </b-dropdown> + </b-col> + </b-row> + <hr> + + <!-- The jumbotron is used to display the name and short description of the + currently selected show and let the user choose between editing files and + playlists --> + <b-jumbotron> + <template slot="header"> + <span v-if="loaded.shows"> + {{ shows[currentShow].name }} + </span> + <span v-else>Shows are being loaded</span> + </template> + <template slot="lead"> + <span v-if="loaded.shows">{{ shows[currentShow].short_description }}</span> + </template> + <hr> + <div align="center"> + <b-button-group> + <b-button + size="lg" + :variant="button.files" + @click="switchMode('files')" + > + Files + </b-button> + <b-button + size="lg" + :variant="button.playlists" + @click="switchMode('playlists')" + > + Playlists + </b-button> + </b-button-group> + </div> + </b-jumbotron> + + <!-- All the UI for uploading and editing files is only shown if the user + choose to edit files in the jumbotron above --> + <div v-if="mode === 'files'"> + <!-- Only display a spinner if the files are not loaded yet --> + <div v-if="!loaded.files"> + <b-row> + <b-col align="center"> + <img + src="../assets/radio.gif" + alt="loading data" + > + </b-col> + </b-row> + </div> + + <!-- If all file data is loaded we can present an upload button and + a table of files (if there are already any or if there are any already + being uploaded/imported )--> + <div v-else> + <!-- Modal: Add new file + This is the modal that is used when the user clicks on the + "Upload or add a file" button. When the user hits the OK button, + the addFile method will be called. --> + <b-modal + id="modal-add-file" + title="Add new file" + @ok="addFile" + > + <!-- If the checkbox below is checked we only need a simple input + for entering an URI, instead of a complete file upload dialogue --> + <div v-if="addNewFileURI"> + <b-row> + <b-col md="2"> + <b>Link:</b> + </b-col> + <b-col> + <b-form-input + v-model="uploadSourceURI" + type="url" + placeholder="Insert a HTTP(S) link here" + /> + </b-col> + </b-row> + </div> + <!-- If the checkbox is not checked, we provide a file selection + dialogue instead of a simple input for an URI --> + <div v-else> + <b-form-file + v-model="uploadSourceFile" + accept="audio/*" + placeholder="Choose a file..." + drop-placeholder="Drop file here..." + /> + </div> + + <hr> + + <!-- This checkbox determines whether there is just a simple input + or a file selection dialogue (see above) --> + <div align="center"> + <b-form-checkbox + v-model="addNewFileURI" + value="true" + unchecked_value="false" + > + Download from remote source instead of uploading a file + </b-form-checkbox> + </div> + </b-modal> + + <!-- Modal: Edit meta information + This modal lets the user change a file's meta information (artist, + album, title). When the user hits OK, the saveFile method is called. + --> + <b-modal + id="modal-edit-file" + title="Edit meta information" + size="lg" + @ok="saveFile" + > + <!-- Input element: Artist --> + <b-row> + <b-col md="2"> + Artist: + </b-col> + <b-col> + <b-form-input + v-model="temp.artist" + type="text" + /> + </b-col> + </b-row> + + <!-- Input element: Album --> + <b-row> + <b-col md="2"> + Album: + </b-col> + <b-col> + <b-form-input + v-model="temp.album" + type="text" + /> + </b-col> + </b-row> + + <!-- Input element: Title --> + <b-row> + <b-col md="2"> + Title: + </b-col> + <b-col> + <b-form-input + v-model="temp.title" + type="text" + /> + </b-col> + </b-row> + + <hr> + + <!-- As additional orientation we provide the source this file was + uploaded/imported from. This might help the user to manage all files + and set the meta information accordingly. + --> + <b-row> + <b-col md="2"> + Sourced from: + </b-col> + <b-col>{{ temp.uri }}</b-col> + </b-row> + </b-modal> + + <!-- Now for the files. If there are none yet, just show an alert and + a button for uploading/importing a new file --> + <div + v-if="files.length === 0" + align="center" + > + <b-alert + show + variant="warning" + > + There are no files for this show yet. + </b-alert> + <b-button + v-b-modal.modal-add-file + variant="success" + > + Upload or add a file + </b-button> + </div> + + <!-- If there already are files for this show we'll show the button + for uploading/importing a new file and then a table with all files --> + <div v-else> + <!-- This is the button --> + <div + align="center" + style="padding-bottom: 1.5em;" + > + <b-button + v-b-modal.modal-add-file + variant="success" + > + Upload or add a file + </b-button> + </div> + + <!-- And here comes the table --> + <b-table + ref="filesTable" + striped + :fields="filesTableFields" + :items="files" + > + <!-- The first two columns in the table (Index & Artist) are filled + in automatically, because we do not use these fields for displaying + upload/import progress information. + --> + + <!-- Column: Album + This column displays either the album meta information or, in case + the file is just being uploaded/imported, a spinner visualising an + ongoing import. + --> + <template + slot="metadata.album" + slot-scope="data" + > + <span v-if="data.item.source.import.state !== 'done'"><img + src="../assets/radio.gif" + width="24" + alt="loading data" + ></span> + <span v-else>{{ data.value }}</span> + </template> + + <!-- Column: Title + This column displays either the title meta information or, in case + the file is just being uploaded/imported, the current phase + of the ongoing import (fetching or normalizing). + --> + <template + slot="metadata.title" + slot-scope="data" + > + <span v-if="data.item.source.import.state === 'done'">{{ data.value }}</span> + <span v-else-if="data.item.source.import.progress !== undefined">{{ data.item.source.import.progress.step }} :</span> + </template> + + <!-- Column: Duration + This column displays either the duration of the audio file, or, if + the file is just being uploaded/imported, the current progress. + --> + <template + slot="duration" + slot-scope="data" + > + <!-- In case the import is already done just print a pretty duration --> + <div v-if="data.item.source.import.state === 'done'"> + {{ prettyNanoseconds(data.value) }} + </div> + <!-- Or print the progress for ongoing imports. We use the variant + prop of the b-progress to display the bar in different colours - + either the info variant for the fetching phase or the success + variant for the normalizing phase --> + <div v-else-if="data.item.source.import.progress !== undefined"> + <b-progress + :value="data.item.source.import.progress.progress" + :max="1" + show-progress + :variant="data.item.source.import.progress.step === 'fetching' ? 'info' : 'success'" + animated + /> + </div> + </template> + + <!-- Column: Size + This column displays the size of the audio file, if the file is + already fully imported. Otherwise we'll just leave it empty. + --> + <template + slot="size" + slot-scope="data" + > + <span v-if="data.item.source.import.state === 'done'">{{ prettyFileSize(data.value) }}</span> + </template> + + <!-- Column: Actions + This column displays the available button for actions the user can + take on this file (e.g. editing and deleting). + --> + <template + slot="actions" + slot-scope="data" + > + <b-button-group size="sm"> + <b-button @click="editFile(data.item.id)"> + Edit + </b-button> + <b-button + variant="danger" + @click="deleteFile(data.item.id)" + > + Delete + </b-button> + </b-button-group> + </template> + </b-table> + </div> + <!-- End of files table --> + </div> + </div> + + <!-- All the UI for creating and editing playlists is only shown if the user + choose to edit playlists in the jumbotron above --> + <div v-if="mode === 'playlists'"> + <!-- Modal: Add new file + This is the modal that is used when the user clicks on the + "Upload or add a file" button. When the user hits the OK button, + the addFile method will be called. --> + <b-modal + id="modal-edit-playlist" + size="lg" + :title="playlistEditor.mode === 'edit' ? 'Edit playlist' : 'Add new playlist'" + @ok="storePlaylist" + > + <b-row + v-if="playlistEditor.mode === 'edit'" + style="padding-bottom: 1em;" + > + <b-col + cols="3" + > + Playlist index: + </b-col> + <b-col>{{ playlistEditor.id }}</b-col> + </b-row> + + <b-row> + <b-col cols="3"> + Description: + </b-col> + <b-col> + <b-form-input + v-model="playlistEditor.description" + type="text" + /> + </b-col> + </b-row> + + <hr> + + <p>Playlist entries:</p> + + <!-- If no entries are here (i.e. we add a new playlist), only show + a hint that there's nothing here yet. --> + <div + v-if="playlistEditor.entries.length === 0" + align="center" + > + No entries yet. Add some. + </div> + <!-- As soon as we have at least one entry in our temporary playlist + we can display a table with all the info and action buttons --> + <div v-else> + <b-table + ref="playlistEditTable" + striped + :items="playlistEditor.entries" + :fields="playlistEditTableFields" + > + <!-- Column: Index + Here we just use the array index, because the playlist entries + are ordered as an array, without the need for an extra id field + --> + <template + slot="id" + slot-scope="data" + > + {{ data.index + 1 }}. + </template> + + <!-- Column: Type + Based on the entry content (either file or uri), we display + a small badge indicating which type of source this is + --> + <template + slot="type" + slot-scope="data" + > + <b-badge + v-if="data.item.file" + variant="success" + > + File + </b-badge> + <b-badge + v-else-if="data.item.uri.startsWith('line://')" + variant="info" + > + Line-in + </b-badge> + <b-badge + v-else-if="data.item.uri.startsWith('http://') || data.item.uri.startsWith('https://')" + variant="light" + > + Stream + </b-badge> + <b-badge + v-else + variant="dark" + > + Other + </b-badge> + </template> + + <!-- Column: Source + Here we display where this playlist entry is coming from + --> + <template + slot="source" + slot-scope="data" + > + <span v-if="data.item.file"> + {{ getFileTitleForPlaylist(data.item.file.show, data.item.file.id) }} + <small><i>( file://{{ data.item.file.show }}/{{ data.item.file.id }} )</i></small> + </span> + <span v-else> + {{ data.item.uri }} + </span> + </template> + + <!-- Column: Actions + Finally some buttons to reorder or delete playlist entries + --> + <template + slot="actions" + slot-scope="data" + > + <b-button-group size="sm"> + <b-button + :disabled="data.index === 0" + @click="movePlaylistItemUp(data.index)" + > + <b class="upDownArrows">↑</b> + </b-button> + <b-button + :disabled="data.index === playlistEditor.entries.length - 1" + @click="movePlaylistItemDown(data.index)" + > + <b class="upDownArrows">↓</b> + </b-button> + <b-button + variant="danger" + @click="deletePlaylistItem(data.index)" + > + Delete + </b-button> + </b-button-group> + </template> + </b-table> + </div> + + <hr> + + <!-- Below the table with the playlists entry we display buttons to + add new entries to the table - these can either be files from our + uploaded/imported files, or one of the preconfigured inputs, or a + stream. + TODO: should we disable choosing files that are still being imported? + TODO: make the inputs configurable + --> + <div> + <b-modal + id="modal-edit-playlist-add-stream" + title="Add stream to the playlist" + @ok="addPlaylistItemStream('save')" + > + <b-input + v-model="playlistEditor.newStreamURL" + type="url" + > + ... + </b-input> + </b-modal> + Add: + <b-button-group> + <b-dropdown text="File"> + <b-dropdown-item + v-for="(file, index) in files" + :key="index" + @click="addPlaylistItemFile(file.show, file.id)" + > + {{ file.id }}: {{ file.metadata.title ? file.metadata.title : "" }} ({{ prettyNanoseconds(file.duration) }}, {{ prettyFileSize(file.size) }}, {{ file.source.uri }}) + </b-dropdown-item> + </b-dropdown> + <b-dropdown text="Line-in"> + <b-dropdown-item @click="addPlaylistItemLine('0')"> + Studio 1 + </b-dropdown-item> + <b-dropdown-item @click="addPlaylistItemLine('1')"> + Preprod + </b-dropdown-item> + <b-dropdown-item @click="addPlaylistItemLine('2')"> + Line 2 + </b-dropdown-item> + </b-dropdown> + <b-button + @click="addPlaylistItemStream('openModal')" + > + Stream + </b-button> + </b-button-group> + </div> + </b-modal> + + <!-- Only display a spinner if the playlists are not loaded yet --> + <div v-if="!loaded.playlists"> + <b-row> + <b-col align="center"> + <img + src="../assets/radio.gif" + alt="loading data" + > + </b-col> + </b-row> + </div> + + <!-- If all playlist data is loaded we can present a create button and + a table of playlists (if there are already any)--> + <div v-else> + <!-- If no playlists are available, only show an alert and a create button --> + <div + v-if="playlists.length === 0" + align="center" + > + <b-alert + show + variant="warning" + > + There are no playlists for this show yet. + </b-alert> + <b-button + variant="success" + @click="addPlaylist" + > + Create a playlist + </b-button> + </div> + <!-- In case there are playlists, show the button and then the table --> + <div v-else> + <div + align="center" + style="padding-bottom: 1.5em;" + > + <b-button + variant="success" + @click="addPlaylist" + > + Create a playlist + </b-button> + </div> + <b-table + ref="playlistsTable" + striped + :fields="playlistsTableFields" + :items="playlists" + > + <!-- Column: Entries + This column displays the number of entries of the playlist. + --> + <template + slot="entries" + slot-scope="data" + > + {{ data.value.length }} items + <b-button + v-b-tooltip.html="playlistToolTip(data.value)" + variant="outline-success" + size="sm" + > + show entries + </b-button> + </template> + + <!-- Column: Last edit + This column lists the last date this playlist was changed. + --> + <template + slot="updated" + slot-scope="data" + > + {{ prettyDateTime(data.value) }} + </template> + + <!-- Column: Actions + This column displays the available buttons for actions the user can + take on this playlist (e.g. editing and deleting). + --> + <template + slot="actions" + slot-scope="data" + > + <b-button-group size="sm"> + <b-button @click="editPlaylist(data.item.id)"> + Edit + </b-button> + <b-button + variant="danger" + @click="deletePlaylist(data.item.id)" + > + Delete + </b-button> + </b-button-group> + </template> + </b-table> + </div> + <!-- End of playlists table --> + </div> </div> </b-container> </template> <script> -export default {} +import axios from 'axios' +import filesize from 'filesize' +import prettyDate from '../mixins/prettyDate' + +export default { + // generic functions that we want to use from our mixins folder + mixins: [ prettyDate ], + + // the data this component will be handling: mostly flags and local versions + // of the data fetched from the AuRa tank API + data () { + return { + shows: [], // an array of objects describing our shows (empty at load, will be populated on created()) + currentShow: 0, // index of the currently selected show in our shows array + currentShowID: 0, // actual id of the currently selected show + files: [], + playlists: [], + mode: 'files', + uploadInterval: null, + + // some flags to signal if API data is already fully loaded + loaded: { + shows: false, + files: false, + playlists: false + }, + + // variables used by file upload/import modal + addNewFileURI: false, + uploadSourceURI: '', + uploadSourceFile: null, + + // and for adding and editing the playlists we need some temporary stuff + playlistEditor: { + id: null, + mode: 'add', // should be either 'add' or 'edit' + description: '', + entries: [], + newStreamURL: null + }, + + // we need this for the modal to edit a file's meta information + temp: { + id: null, + artist: '', + album: '', + title: '' + }, + + // for formatting the buttons - this way we could customize it later + button: { + files: 'info', + playlists: 'outline-info' + }, + + // configuration of the files table, which will use the files array as data + filesTableFields: [ + { key: 'id', label: 'Index' }, + { key: 'metadata.artist', label: 'Artist' }, + { key: 'metadata.album', label: 'Album' }, + { key: 'metadata.title', label: 'Title' }, + { key: 'duration', label: 'Duration' }, + { key: 'size', label: 'Size' }, + { key: 'actions', label: 'Actions', class: 'text-right' }, + ], + + // configuration of the playlists table, which will use the playlists array as data + playlistsTableFields: [ + { key: 'id', label: 'Index' }, + { key: 'description', label: 'Description' }, + { key: 'entries', label: 'Entries' }, + { key: 'updated', label: 'Last edit' }, + { key: 'actions', label: 'Actions', class: 'text-right' }, + ], + + playlistEditTableFields: [ + { key: 'id', label: 'Index' }, + { key: 'type', label: 'Type' }, + { key: 'source', label: 'Source' }, + { key: 'actions', label: 'Actions', class: 'text-right' }, + ] + } + }, + + // Right after this component is set up, we want to fetch all available shows + // from the AuRa tank module. This works quite similar to the ShowManager. + // We also want to load the files and playlists as soon as the shows are + // loaded. + created () { + // when we enter this module, we want to load all shows of the current user + // before we search for corresponding shows in the tank + var uri = process.env.VUE_APP_API_STEERING_SHOWS + // only the superuser should see all shows and therefore files and playlists + // normal users should only see their own shows + if (!this.$parent.user.steeringUser.is_superuser) { + uri += '?owner=' + this.$parent.user.steeringUser.id + } + // now make the API call to fetch the shows + axios.get(uri, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + if (response.data.length === 0) { + alert('There are no shows associated with your account!') + return + } + this.shows = response.data + this.currentShowID = this.shows[0].id + this.currentShow = 0 + this.loaded.shows = true + this.switchShow(this.currentShow) + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not fetch shows from steering. See console for details.') + }) + }, + + // Now for our hotchpotch of methods, mostly for fetching data from and + // posting/updating data to the AuRa tank API + methods: { + + // Just a placeholder function we can use in the UI, to signal if something + // is not yet implemented + notYetImplemented: function () { + alert('By the mighty witchcraftry of the mother of time!\n\nThis feature is not implemented yet.') + }, + + // We want to have a nice format for the file size, given a size in Bytes. + // For that we're useing the filesize npm module. + prettyFileSize: function (s) { + return filesize(s) + }, + + // Returns a file object from the files array, given a file ID + getFileById: function (id) { + for (var i in this.files) { + if (this.files[i].id === id) { + return this.files[i] + } + } + return null + }, + + // Returns a playlist object from the playlists array, given a playlist ID. + // If the mode parameter is used and set to 'index', then the playlists + // index in the playlist array is returned instead of the object + getPlaylistById: function (id, mode) { + for (var i in this.playlists) { + if (this.playlists[i].id === id) { + if (mode === 'index') { return i } + else { return this.playlists[i] } + } + } + return null + }, + + // return a string representing a file entry for the playlist editor + getFileTitleForPlaylist: function (show, id) { + // TODO: change structure of files array, so we can access all shows + // the user has access to. + var file = this.getFileById(id) + if (file && file.metadata.title) { + return show + ": " + file.metadata.title + } else { + return "" + } + }, + + playlistToolTip: function (entries) { + var text = '<div style="white-space: nowrap;" align="left">' + for (var i in entries) { + text += i + ': ' + entries[i].uri + '<br>' + } + text += '</div>' + return text + }, + + movePlaylistItemUp: function (index) { + if (index > 0 && index < this.playlistEditor.entries.length) { + var temp = this.playlistEditor.entries[index - 1] + this.playlistEditor.entries[index - 1] = this.playlistEditor.entries[index] + this.playlistEditor.entries[index] = temp + this.$refs.playlistEditTable.refresh() + } + }, + + movePlaylistItemDown: function (index) { + if (index < this.playlistEditor.entries.length - 1 && index >= 0) { + var temp = this.playlistEditor.entries[index + 1] + this.playlistEditor.entries[index + 1] = this.playlistEditor.entries[index] + this.playlistEditor.entries[index] = temp + this.$refs.playlistEditTable.refresh() + } + }, + + deletePlaylistItem: function (index) { + if (index >= 0 && index < this.playlistEditor.entries.length) { + this.playlistEditor.entries.splice(index, 1) + this.$refs.playlistEditTable.refresh() + } + }, + + // add a file from the file manager to the playlist that is being edited + addPlaylistItemFile: function (show, id) { + var item = {} + item.file = {show: show, id: id} + this.playlistEditor.entries.push(item) + }, + + // add a line input to the playlist that is being edited + addPlaylistItemLine: function (line) { + this.playlistEditor.entries.push({uri: 'line://' + line}) + }, + + // controls sub-modal to add a new URI to the playlist editor + addPlaylistItemStream: function (action) { + if (action === 'openModal') { + // the function gets called with the action 'openModal' when the users + // clicks on the add new stream button. then we clear all temp data and + // open the modal + this.playlistEditor.newStreamURL = '' + this.$bvModal.show('modal-edit-playlist-add-stream') + } else { + // when the user hits ok to add the new uri, this function gets called + // with the action 'save' and the modal closes automagically. so we + // just have to push a new entry to the playlist in the editor + if (this.playlistEditor.newStreamURL.trim().length > 0) { + this.playlistEditor.entries.push({uri: this.playlistEditor.newStreamURL}) + } + // if an empty string was provided, we just do nothing + } + }, + + deletePlaylist: function (id) { + var uri = process.env.VUE_APP_API_TANK + 'shows/' + this.shows[this.currentShow].slug + '/playlists/' + id + // TODO: add mechanism to indicate the running delete request in the files table + axios.delete(uri, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token }, + }).then( + this.fetchPlaylists(this.shows[this.currentShow].slug) + ).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not delete playlist. See console for details.') + }) + }, + + addPlaylist: function () { + this.playlistEditor.mode = 'add' + this.playlistEditor.id = null + this.playlistEditor.description = '' + this.playlistEditor.entries = [] + this.$bvModal.show('modal-edit-playlist') + }, + + editPlaylist: function (id) { + this.playlistEditor.mode = 'edit' + this.playlistEditor.entries = [] + this.playlistEditor.id = id + var playlist = this.getPlaylistById(id) + this.playlistEditor.description = playlist.description + for (var i in playlist.entries) { + var entry = {} + if (playlist.entries[i].file) { + entry.file = {} + entry.file.show = playlist.entries[i].file.show + entry.file.id = playlist.entries[i].file.id + } else { + entry.uri = playlist.entries[i].uri + } + this.playlistEditor.entries.push(entry) + } + this.$bvModal.show('modal-edit-playlist') + }, + + // Adds a new or updates an existing playlist by sending a POST/PUT + // request to the AURA tank API + storePlaylist: function () { + var data = { + description: this.playlistEditor.description, + entries: this.playlistEditor.entries + } + var uri = process.env.VUE_APP_API_TANK + 'shows/' + this.shows[this.currentShow].slug + '/playlists' + + // TODO: add some spinner or other visualisation while the playlist is added/updated + + if (this.playlistEditor.mode === 'add') { + axios.post(uri, data, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + this.playlists.push(response.data) + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not add new playlist. See console for details.') + }) + + // when updating an existing playlist we use a PUT request and add the id + // of the playlist to the uri + } else if (this.playlistEditor.mode === 'edit') { + var id = this.playlistEditor.id + uri += '/' + id + axios.put(uri, data, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + this.playlists[this.getPlaylistById(id, 'index')] = response.data + this.$refs.playlistsTable.refresh() + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not update playlist. See console for details.') + }) + } + }, + + // To start modifying the meta information for a file we have to set our + // temporary data (which will be used to check if anything changed) and + // then open the editing modal + editFile: function (id) { + var file = this.getFileById(id) + this.temp.id = file.id + this.temp.artist = file.metadata.artist + this.temp.album = file.metadata.album + this.temp.title = file.metadata.title + this.temp.uri = file.source.uri + this.$bvModal.show('modal-edit-file') + }, + + // Once the OK button is hit in the file editing modal, we have to check + // if anything changed and then send an appropriate metadata obecjt to + // the AuRa tank API to update it + saveFile: function (){ + var file = this.getFileById(this.temp.id) + // we only want to send a PATCH request if some metadata actually changed + if (this.temp.artist !== file.metadata.artist || this.temp.album !== file.metadata.album || this.temp.title !== file.metadata.title ) { + // if a metadata property was in use before and now shall be emptied + // we cannot just omit the property, but have to explicitly send null + var metadata = { + artist: this.temp.artist ? this.temp.artist : null, + album: this.temp.album ? this.temp.album : null, + title: this.temp.title ? this.temp.title : null + } + var uri = process.env.VUE_APP_API_TANK + 'shows/' + this.shows[this.currentShow].slug + '/files/' + file.id + // TODO: add mechanism to indicate the running patch request in the files table + axios.patch(uri, metadata, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + this.getFileById(this.temp.id).metadata = response.data.metadata + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not save metadata info to file. See console for details.') + }) + } + }, + + // Deletes a file with a specific, calling the AuRa tank API and afterwards + // fetching a fresh list of files from it. + deleteFile: function (id) { + var uri = process.env.VUE_APP_API_TANK + 'shows/' + this.shows[this.currentShow].slug + '/files/' + id + // TODO: add mechanism to indicate the running delete request in the files table + axios.delete(uri, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token }, + }).then( + this.fetchFiles(this.shows[this.currentShow].slug) + ).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not delete file. See console for details.') + }) + }, + + // With this function we add a new file in the AuRa tank by calling its API. + // Depending on wheter we add a remote file which tank then imports by itself, + // or if we want to upload a local file, we source-uri has to look different. + // And for uploading a local file this is just the first step. Afterwards the + // actual upload has to be started with the startUpload function. + addFile: function () { + var uri = process.env.VUE_APP_API_TANK + 'shows/' + this.shows[this.currentShow].slug + '/files' + if (this.addNewFileURI) { + // TODO: add mechanism to indicate the running post request in the files table + axios.post(uri, { 'source-uri': this.uploadSourceURI }, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(() => { + this.fetchFiles(this.shows[this.currentShow].slug) + if (this.uploadInterval === null) { + this.uploadInterval = setInterval(() => { this.fetchImports(this.shows[this.currentShow].slug) }, 250) + } + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not add the new remote import. See console for details.') + }) + } else if (this.uploadSourceFile) { + // TODO: add mechanism to indicate the running post request in the files table + axios.post(uri, { 'source-uri': encodeURI('upload://' + this.uploadSourceFile.name) }, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + this.startUpload(response.data.id) + this.fetchFiles(this.shows[this.currentShow].slug) + if (this.uploadInterval === null) { + this.uploadInterval = setInterval(() => { this.fetchImports(this.shows[this.currentShow].slug) }, 250) + } + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not add the new file upload. See console for details.') + }) + } else { + alert('Something is wrong. You have choosen to upload a file, but the corresponding file object does not exist.') + } + }, + + // When a new file was added with the addFile function we can start an upload + // fetching the import endpoint of this file and then call the upload + // function, which atually puts the file onto the server. + startUpload: function (id) { + var uri = process.env.VUE_APP_API_TANK + 'shows/' + this.shows[this.currentShow].slug + '/files/' + id + '/import' + axios.get(uri, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token }, + params: {'wait-for': 'running'} + }).then( + this.upload(id) + ).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not start the file upload. See console for details.') + }) + }, + + // Upload a file to the AuRa tank API - given it was created with the addFile + // and started with the startUpload methods. + upload: function (id) { + /* + * NOTE: there is no npm package for flow.js and importing it manually did not + * work so far. therefore this is commented out and we are using the simple + * upload method, until there is a nice npm package for flow.js or somone + * resolves this issue otherwise + var flow = new Flow({ + target: process.env.VUE_APP_API_TANK + 'shows/' + this.shows[this.currentShow].slug + '/files/' + id + '/upload', + chunkSize: 100 * 1024, + prioritizeFirstAndLastChunk: true + }) + flow.on('fileSuccess', function(file, message) { + console.log(file, message) + }) + flow.on('fileError', function(file, message) { + console.log(file, message) + alert('Error: could not upload your file. See console for details.') + }) + flow.addFile(this.uploadSourceFile) + flow.upload() + */ + var uri = process.env.VUE_APP_API_TANK + 'shows/' + this.shows[this.currentShow].slug + '/files/' + id + '/upload' + axios.put(uri, this.uploadSourceFile, { + withCredentials: true, + headers: { + 'Authorization': 'Bearer ' + this.$parent.user.access_token, + 'Content-Type': 'application/octet-stream' + } + }).then(() => { + console.log('Sucessfully uploaded file.') + // now we start polling for the import progress + // the fetchImports function has to make sure to deactivate the interval + // again, when all running imports are done (in this first raw version; + // ideally we should refine this so that every single file gets updated independently) + //this.uploadInterval = setInterval(() => { this.fetchImports(this.shows[this.currentShow].slug) }, 100) + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not start the file upload. See console for details.') + }) + }, + + // This switches the UI elements to reflect another show and fetches all + // relevent data from the tank API. + switchShow: function (index) { + // set the current show and its ID to whatever we want to switch to now + this.currentShow = index + this.currentShowID = this.shows[this.currentShow].id + this.fetchShow(this.shows[this.currentShow].slug) + }, + + // This function is used to visually switch between the files and playlists + // editing mode. + switchMode: function (mode) { + if (this.mode !== mode) { + this.mode = mode + for (var b in this.button) { + if (b === mode) { this.button[b] = 'info' } + else { this.button[b] = 'outline-info' } + } + } + }, + + // This function fetches all running imports for a given show. It should + // be called periodically to reflect the upload/import progress. When no + // more active imports are available the corresponding updateInterval + // should be cleared again. + fetchImports: function (slug){ + var uri = process.env.VUE_APP_API_TANK + 'shows/' + slug + '/imports' + axios.get(uri, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + // if all imports are done, we will receive an empty result set and stop + // polling the server again. now we can also refetch all file statuses. + if (response.data.results === null) { + clearInterval(this.uploadInterval) + this.uploadInterval = null + this.fetchShow(slug) + } else { + for (var i in response.data.results) { + var f = this.getFileById(response.data.results[i].id) + if (f) { + f.source.import.progress = { + progress: response.data.results[i].progress.progress, + step: response.data.results[i].progress.step + } + } + this.$refs.filesTable.refresh() + } + } + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not fetch current imports. See console for details.') + }) + }, + + // Just a wrapper to fetch both, files and playlists information. + fetchShow: function (slug) { + this.fetchFiles(slug) + this.fetchPlaylists(slug) + }, + + // Fetch all files for a given show from the AuRa tank API + fetchFiles: function (slug) { + this.loaded.files = false + var uri = process.env.VUE_APP_API_TANK + 'shows/' + slug + '/files' + axios.get(uri, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + // we don't have to check separately, if there are files, because tank + // always provides an empty array if there are no files (or even if there is no corresponding show) + this.files = response.data.results + this.loaded.files = true + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not fetch files from tank. See console for details.') + }) + }, + + // Fetch all playlists for a given show from the AuRa tank API + fetchPlaylists: function (slug) { + this.loaded.playlists = false + var uri = process.env.VUE_APP_API_TANK + 'shows/' + slug + '/playlists' + axios.get(uri, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + // we don't have to check separately, if there are playlists, because tank + // always provides an empty array if there are no playlists (or even if there is no corresponding show) + this.playlists = response.data.results + this.loaded.playlists = true + }).catch(error => { + console.log('Error: ' + error.response.status + ' ' + error.response.statusText) + console.log(error.response) + alert('Error: could not fetch playlists from tank. See console for details.') + }) + } + } +} </script> <style> - +div.filelistbox { + border: 1px solid #e9ecef; + border-radius: 0.3rem; + padding: 1rem 2rem; +} +.stateNew { + color: red; + font-weight: bold; +} +.stateRunning { + color: darkgreen; +} +.stateUndefined { + color: orange; + font-weight: bold; +} +.upDownArrows { + font-size: 1.15rem; +} +.modalPlaylistRows { + padding: 0.2rem 0; +} </style> diff --git a/src/components/Footer.vue b/src/components/Footer.vue index 81f04d4886731d9e9a11f61ab319ad0e6221f6f9..67738ee2fcc547d3aec96e85530d621764fcf29f 100644 --- a/src/components/Footer.vue +++ b/src/components/Footer.vue @@ -5,7 +5,10 @@ <b-col sm="8"> autoradio/<b>dashboard v0.0.23</b> </b-col> - <b-col sm="4" align="right"> + <b-col + sm="4" + align="right" + > ... bla ... bla ... hear the music? </b-col> </b-row> diff --git a/src/components/Header.vue b/src/components/Header.vue index 6e74885b2a3fc996a9d6f4b512b56963e3fbacb8..eaa59aa801aa4b60e042077e6e4ce50e6a3d5f64 100644 --- a/src/components/Header.vue +++ b/src/components/Header.vue @@ -6,40 +6,95 @@ <b-col md="10"> <span class="header-title"><router-link to="home"><span class="d-none d-sm-inline">autoradio/</span><b>dashboard</b></router-link></span> </b-col> - <b-col md="2" class="d-none d-sm-none d-md-block" align="right"> - <a href="http://o94.at" target="new"><img class="header-logo" src="../assets/logo.jpg" /></a> + <b-col + md="2" + class="d-none d-sm-none d-md-block" + align="right" + > + <a + href="http://o94.at" + target="new" + ><img + class="header-logo" + src="../assets/logo.jpg" + ></a> </b-col> </b-row> </b-container> </div> <div> <b-container> - <b-navbar toggleable="lg" type="dark" variant="dark"> + <b-navbar + toggleable="lg" + type="dark" + variant="dark" + > <span class="d-none d-sm-inline d-lg-none menu-context-info">For more options tap the menu button on the right:</span> <span class="d-sm-none menu-context-info">Hit menu button for more:</span> - <b-navbar-toggle target="nav_collapse"></b-navbar-toggle> - <b-collapse is-nav id="nav_collapse"> + <b-navbar-toggle target="nav_collapse" /> + <b-collapse + id="nav_collapse" + is-nav + > <b-navbar-nav> - <b-nav-item v-for="mod in modules" :key="mod.slug" :to="mod.slug">{{ mod.title }}</b-nav-item> + <b-nav-item + v-for="mod in modules" + :key="mod.slug" + :to="mod.slug" + > + {{ mod.title }} + </b-nav-item> </b-navbar-nav> <b-navbar-nav class="ml-auto"> - <b-nav-item-dropdown text="EN" right> - <b-dropdown-item href="#">EN</b-dropdown-item> - <b-dropdown-item href="#">DE</b-dropdown-item> + <b-nav-item-dropdown + text="EN" + right + > + <b-dropdown-item href="#"> + EN + </b-dropdown-item> + <b-dropdown-item href="#"> + DE + </b-dropdown-item> </b-nav-item-dropdown> - <b-nav-item-dropdown v-if="user.logged_in" right> + <b-nav-item-dropdown + v-if="user.logged_in" + right + > <!-- Using button-content slot --> <template slot="button-content"> <em>{{ user.name }}</em> </template> - <b-dropdown-item href="#">Settings</b-dropdown-item> - <b-dropdown-item href="#">Profile</b-dropdown-item> - <b-dropdown-item @click='$parent.signOut'>Signout</b-dropdown-item> + <b-dropdown-item href="#"> + Settings + </b-dropdown-item> + <b-dropdown-item href="#"> + Profile + </b-dropdown-item> + <b-dropdown-item @click="$parent.signOut"> + Signout + </b-dropdown-item> </b-nav-item-dropdown> - <b-nav-item v-if="! user.logged_in" to="home"><img src="../assets/16x16/system-users.png" alt="log-in symbol" title="Log in"></b-nav-item> + <b-nav-item + v-if="! user.logged_in" + to="home" + > + <img + src="../assets/16x16/system-users.png" + alt="log-in symbol" + title="Log in" + > + </b-nav-item> <div class="help-image-container"> <b-nav-item> - <router-link to="help"><img class="help-image" src="../assets/help-browser-32x32.png" alt="Help symbol" title="Go to help pages"></router-link> + <router-link to="help"> + <img + class="help-image" + src="../assets/help-browser-32x32.png" + alt="Help symbol" + title="Go to help pages" + > + </router-link> </b-nav-item> </div> </b-navbar-nav> diff --git a/src/components/Help.vue b/src/components/Help.vue index 8a148d41a0e82d71acc8b4ccf81d8e4c1028b440..f6ca0fd764efd3c0e14a08a946fe540c0a204e77 100644 --- a/src/components/Help.vue +++ b/src/components/Help.vue @@ -1,12 +1,12 @@ <template> <b-container> <h1>Help pages</h1> - <br /><br /> + <br><br> <div style="border: 5px dotted #5c3566;"> - <br /><br /> + <br><br> <p><b>By the mighty witchcraftry of the mother of time!</b></p> <p>This feature is not implemented yet.</p> - <br /><br /> + <br><br> </div> </b-container> </template> diff --git a/src/components/Home.vue b/src/components/Home.vue index a06480984496d5dfc2608449ec69816cf4151a44..e9aa0838b91a9767ea842c56b80a52e32a650418 100644 --- a/src/components/Home.vue +++ b/src/components/Home.vue @@ -4,7 +4,7 @@ <div align="center"> <h1>Welcome to the Dashboard!</h1> <p>Here are some infos for you on how to use this interface...</p> - <br /> + <br> </div> <b-row align="center"> <b-col sm="3"> @@ -33,9 +33,18 @@ </b-col> </b-row> </div> - <div v-else align="center"> + <div + v-else + align="center" + > <p>You are not logged in yet.</p> - <b-button size="lg" variant="outline-secondary" @click="$parent.signIn">Log in</b-button> + <b-button + size="lg" + variant="outline-secondary" + @click="$parent.signIn" + > + Log in + </b-button> </div> </b-container> <!-- diff --git a/src/components/Settings.vue b/src/components/Settings.vue index 6c13f2720eb5a39bbba57986589ee3124ed87140..caa32f101c49950530da7b70d1537cdfca355e7c 100644 --- a/src/components/Settings.vue +++ b/src/components/Settings.vue @@ -1,12 +1,12 @@ <template> <b-container align="center"> <h1>Dashboard Settings</h1> - <br /><br /> + <br><br> <div style="border: 5px dotted #5c3566;"> - <br /><br /> + <br><br> <p><b>By the mighty witchcraftry of the mother of time!</b></p> <p>This feature is not implemented yet.</p> - <br /><br /> + <br><br> </div> </b-container> </template> diff --git a/src/components/ShowManager.vue b/src/components/ShowManager.vue index 645d817a8353b3395536fcc17b7d84efadb11e15..28e436450238802b548da0ceafcc1a1bc2d9b06f 100644 --- a/src/components/ShowManager.vue +++ b/src/components/ShowManager.vue @@ -1,130 +1,332 @@ <template> <b-container> + <!-- This first row is so far only used to provide a dropdown for + choosing one of the loaded shows (which the user has access to) --> <b-row> + <b-col> + <h3>Sendungen verwalten</h3> + </b-col> <b-col align="right"> - <b-dropdown id="ddshows" text="Sendereihe auswählen" variant="info"> - <b-dropdown-item v-for="(show, index) in this.shows" :key="show.id" v-on:click="switchShow(index)">{{ show.name }}</b-dropdown-item> + <b-dropdown + id="ddshows" + text="Sendereihe auswählen" + variant="info" + > + <b-dropdown-item + v-for="(show, index) in shows" + :key="show.id" + @click="switchShow(index)" + > + {{ show.name }} + </b-dropdown-item> </b-dropdown> </b-col> </b-row> - <hr /> + <hr> + <!-- The jumbotron is used to display the name and description of the + currently selected show --> <b-jumbotron> + <!-- The show title goes into the jumbotron header --> <template slot="header"> <span v-if="loaded.shows"> {{ shows[currentShow].name }} - <img src="../assets/16x16/emblem-system.png" alt="edit name of show" v-on:click="$refs.appModalShow.showName()" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit name of show" + @click="$refs.appModalShow.showName()" + > </span> <span v-else>Shows are being loaded</span> </template> + <!-- The short description of the show goes into the jumbotron lead --> <template slot="lead"> <span v-if="loaded.shows">{{ shows[currentShow].short_description }}</span> - <img src="../assets/16x16/emblem-system.png" alt="edit short description" v-on:click="$refs.appModalShow.showShortDescription()" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit short description" + @click="$refs.appModalShow.showShortDescription()" + > </template> - <p v-if="loaded.shows"> - <b>Description:</b> <img src="../assets/16x16/emblem-system.png" alt="edit description" v-on:click="$refs.appModalShow.showDescription()" /> + <!-- The rest of the jumbotron is filled with the show description --> + <div v-if="loaded.shows"> + <b>Description:</b> <img + src="../assets/16x16/emblem-system.png" + alt="edit description" + @click="$refs.appModalShow.showDescription()" + > <div v-if="loaded.shows"> - <!-- TODO: see if we can make a nice but secure html rendering of the description - This should be already secure, as long as you do not write directly to the DOM. - Only if you do this and render HTML, take care to have it save (no script tags etc.). - This current regex replace is only to have it looking nicely, in case there are html tags. --> - {{ shows[currentShow].description.replace(/<[^>]*>/g, '') }} + <!-- + we are disabling the linter warning for the next line, because, while it + generally is not advisible to use v-html, in this case we took thorough + steps to sanitize the date before inserting it into the DOM + --> + <!-- eslint-disable-next-line vue/no-v-html --> + <p v-html="sanitizedShowDescription" /> <!-- TODO: add image and logo here? --> </div> - </p> + </div> </b-jumbotron> + <!-- If the shows are not fully loaded yet, we just put the loading sign --> <div v-if="!loaded.shows"> <b-row> <b-col align="center"> - <img src="../assets/radio.gif" alt="loading data" /> + <img + src="../assets/radio.gif" + alt="loading data" + > </b-col> </b-row> </div> + + <!-- When all show data is loaded, here we display all the rest --> <div v-else> <!-- include the modals to edit show and timeslot entries from the modal compontents --> - <app-modalShow ref="appModalShow" :show="shows[currentShow]"></app-modalShow> - <app-modalNotes ref="appModalNotes" :show="shows[currentShow]" :showAggregate="current"></app-modalNotes> + <app-modalShow + ref="appModalShow" + :show="shows[currentShow]" + /> + <app-modalNotes + ref="appModalNotes" + :show="shows[currentShow]" + :show-aggregate="current" + /> - <!-- here we show our table of timeslots --> + <!-- here are the filter settings for our timeslots table --> <b-card> - <b-btn v-b-toggle.timeslotFilterCollapse>Toggle timeslot filters</b-btn> + <b-btn v-b-toggle.timeslotFilterCollapse> + Toggle timeslot filters + </b-btn> <b-collapse id="timeslotFilterCollapse"> - <br /> + <br> + <!-- How many slots to show per table page --> <b-row> - <b-col sm="3"><label for="inputNumSlots">Number of slots to show:</label></b-col> - <b-col sm="9"><b-form-input id="inputNumSlots" v-model="numSlots" type="number"></b-form-input></b-col> + <b-col sm="3"> + <label for="inputNumSlots">Number of slots to show:</label> + </b-col> + <b-col sm="9"> + <b-form-input + id="inputNumSlots" + v-model="numSlots" + type="number" + /> + </b-col> </b-row> + <!-- The start date to display timeslots from (defaults to today) --> <b-row> - <b-col sm="3"><label for="inputDateStart">From:</label></b-col> - <b-col sm="9"><b-form-input id="inputDateStart" v-model="dateStart" type="date"></b-form-input></b-col> + <b-col sm="3"> + <label for="inputDateStart">From:</label> + </b-col> + <b-col sm="9"> + <b-form-input + id="inputDateStart" + v-model="dateStart" + type="date" + /> + </b-col> </b-row> + <!-- The end date until to wich to display timeslots --> <b-row> - <b-col sm="3"><label for="inputNumSlots">Until (exclusive):</label></b-col> - <b-col sm="9"><b-form-input id="inputDateEnd" v-model="dateEnd" type="date"></b-form-input></b-col> + <b-col sm="3"> + <label for="inputNumSlots">Until (exclusive):</label> + </b-col> + <b-col sm="9"> + <b-form-input + id="inputDateEnd" + v-model="dateEnd" + type="date" + /> + </b-col> </b-row> - <br /> - <b-container fluid class="text-right"> - <b-btn variant="outline-danger" @click="resetFilter()">Reset filter</b-btn> - <b-btn variant="info" @click="applyFilter()">Apply filter</b-btn> + <br> + <!-- And finally two buttons, one to reset and one to apply the filter --> + <b-container + fluid + class="text-right" + > + <b-btn + variant="outline-danger" + @click="resetFilter()" + > + Reset filter + </b-btn> + <b-btn + variant="info" + @click="applyFilter()" + > + Apply filter + </b-btn> </b-container> </b-collapse> </b-card> - <br /> + <br> + <!-- here we show our table of timeslots, if the timeslots are already + loaded (otherwise we just show the loading symbol) --> <div v-if="loaded.timeslots"> - <b-table striped hover outlined :items="notesTableArray"></b-table> - <b-pagination align="center" :total-rows="current.timeslotmeta.count" :per-page="current.timeslotmeta.perpage" v-model="current.timeslotmeta.page" @change="timeslotsPage"></b-pagination> + <b-table + striped + hover + outlined + :fields="notesTableArrayFields" + :items="notesTableArray" + > + <!-- Title of the timeslot (if already set) --> + <template + slot="title" + slot-scope="data" + > + <span v-if="data.value">{{ data.value }}</span> + <span v-else><small><i>(none set)</i></small></span> + </template> + <!-- Date and time when this timeslot starts --> + <template + slot="starts" + slot-scope="data" + > + {{ data.value }} + </template> + <!-- The duration of this timeslot --> + <template + slot="duration" + slot-scope="data" + > + {{ data.value }} + </template> + <!-- And here all the buttons for editing and doing other things + with the displayed timeslot --> + <template + slot="options" + slot-scope="data" + > + <span + class="timeslotEditLink" + @click="editTimeslotNote(data.item.options.id, data.item.options.schedule)" + ><img + src="../assets/16x16/emblem-system.png" + alt="Edit description" + title="Edit description" + ></span> + <span + class="timeslotEditLink" + @click="notYetImplemented()" + ><img + src="../assets/16x16/media-eject.png" + alt="Upload audio file / Create playlist" + title="Upload audio file / Create playlist" + ></span> + <span + class="timeslotEditLink" + @click="notYetImplemented()" + ><img + src="../assets/16x16/media-playback-start.png" + alt="Play audio file / playlist" + title="Play audio file / playlist" + ></span> + <span + class="timeslotEditLink" + @click="notYetImplemented()" + >...</span> + </template> + </b-table> + <b-pagination + v-model="current.timeslotmeta.page" + align="center" + :total-rows="current.timeslotmeta.count" + :per-page="current.timeslotmeta.perpage" + @change="timeslotsPage" + /> + </div> + <!-- If the timeslot data is not loaded, we just show the spinner instead + of the table itself --> + <div v-else> + <div style="text-align: center;"> + <img + src="../assets/radio.gif" + alt="loading data" + ><br> + </div> </div> - <div v-else style="text-align: center;"><img src="../assets/radio.gif" alt="loading data" /><br /></div> - <hr /> + <hr> <h2>Allgemeine Einstellungen zur Sendereihe:</h2> <b-row> - <b-col lg="6"> <p> - <b-badge variant="light">E-Mail:</b-badge> + <b-badge variant="light"> + E-Mail: + </b-badge> <span v-if="shows[currentShow].email === null"><small><i>(none set)</i></small></span> <span v-else>{{ shows[currentShow].email }}</span> - <img src="../assets/16x16/emblem-system.png" alt="edit contact e-mail" v-on:click="$refs.appModalShow.showEmail()" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit contact e-mail" + @click="$refs.appModalShow.showEmail()" + > </p> </b-col> <b-col lg="6"> <p> - <b-badge variant="light">Website:</b-badge> + <b-badge variant="light"> + Website: + </b-badge> <span v-if="shows[currentShow].website === null"><small><i>(none set)</i></small></span> <span v-else><a :href="shows[currentShow].website">{{ shows[currentShow].website }}</a></span> - <img src="../assets/16x16/emblem-system.png" alt="edit website" v-on:click="$refs.appModalShow.showWebsite()" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit website" + @click="$refs.appModalShow.showWebsite()" + > </p> </b-col> <b-col lg="6"> <p> - <b-badge variant="light">Show type:</b-badge> + <b-badge variant="light"> + Show type: + </b-badge> <!-- TODO: discuss: should this be visible to show owners or only to administrators? --> <span v-if="loaded.type"> <span v-if="current.type.length === 0"><small><i>(none set)</i></small></span> <span v-else>{{ current.type[0].type }}</span> - <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="$refs.appModalShow.showType()" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showType()" + > </span> - <span v-else><img src="../assets/radio.gif" height="24px" alt="loading data" /></span> + <span v-else><img + src="../assets/radio.gif" + height="24px" + alt="loading data" + ></span> </p> </b-col> <b-col lg="6"> <p> - <b-badge variant="light">Funding category (eg. for RTR):</b-badge> + <b-badge variant="light"> + Funding category (eg. for RTR): + </b-badge> <!-- TODO: discuss: should this be visible to show owners or only to administrators? --> <span v-if="loaded.fundingcategory"> <span v-if="current.fundingcategory.length === 0"><small><i>(none set)</i></small></span> <span v-else>{{ current.fundingcategory[0].fundingcategory }}</span> - <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="$refs.appModalShow.showFundingCategory()" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showFundingCategory()" + > </span> - <span v-else><img src="../assets/radio.gif" height="24px" alt="loading data" /></span> + <span v-else><img + src="../assets/radio.gif" + height="24px" + alt="loading data" + ></span> </p> </b-col> @@ -132,37 +334,59 @@ <p> <!-- TODO: discuss: should this be visible to show owners or only to administrators? --> <!-- TODO: fetch name for predecessor from steering api --> - <b-badge variant="light">Predecessor:</b-badge> + <b-badge variant="light"> + Predecessor: + </b-badge> <span v-if="shows[currentShow].predecessor === null"><small><i>This show has no predecessor show.</i></small></span> <span v-else>{{ predecessorName }}</span> - <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="$refs.appModalShow.showPredecessor()" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showPredecessor()" + > </p> </b-col> <b-col lg="6"> <p> - <b-badge variant="light">CBA Series ID:</b-badge> + <b-badge variant="light"> + CBA Series ID: + </b-badge> <span v-if="shows[currentShow].cba_series_id === null"><small><i>(none set)</i></small></span> <span v-else>{{ shows[currentShow].cba_series_id }}</span> - <img src="../assets/16x16/emblem-system.png" alt="edit CBA series ID" v-on:click="$refs.appModalShow.showCBAid()" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit CBA series ID" + @click="$refs.appModalShow.showCBAid()" + > </p> </b-col> <b-col lg="6"> <p> - <b-badge variant="light">Fallback List/Pool:</b-badge> + <b-badge variant="light"> + Fallback List/Pool: + </b-badge> <span v-if="shows[currentShow].fallback_id === ''"><small><i>(none set)</i></small></span> <span v-else>ID: {{ shows[currentShow].fallback_id }}</span> - <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="notYetImplemented" /> + <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="notYetImplemented" + > </p> </b-col> - </b-row> <b-row> - <b-col lg="2"> - <b-badge style="width:80%;">Categories:</b-badge> <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="$refs.appModalShow.showCategories()" /> + <b-badge style="width:80%;"> + Categories: + </b-badge> <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showCategories()" + > </b-col> <b-col lg="4"> <div v-if="loaded.categories"> @@ -171,15 +395,32 @@ </p> <p v-else> <ul> - <li v-for="cat in current.categories">{{ cat.category }}</li> + <li + v-for="cat in current.categories" + :key="cat.id" + > + {{ cat.category }} + </li> </ul> </p> </div> - <div v-else><img src="../assets/radio.gif" height="24px" alt="loading data" /><br /></div> + <div v-else> + <img + src="../assets/radio.gif" + height="24px" + alt="loading data" + ><br> + </div> </b-col> <b-col lg="2"> - <b-badge style="width:80%;">Topics:</b-badge> <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="$refs.appModalShow.showTopics()" /> + <b-badge style="width:80%;"> + Topics: + </b-badge> <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showTopics()" + > </b-col> <b-col lg="4"> <div v-if="loaded.topics"> @@ -188,15 +429,32 @@ </p> <p v-else> <ul> - <li v-for="topic in current.topics">{{ topic.topic }}</li> + <li + v-for="topic in current.topics" + :key="topic.id" + > + {{ topic.topic }} + </li> </ul> </p> </div> - <div v-else><img src="../assets/radio.gif" height="24px" alt="loading data" /><br /></div> + <div v-else> + <img + src="../assets/radio.gif" + height="24px" + alt="loading data" + ><br> + </div> </b-col> <b-col lg="2"> - <b-badge style="width:80%;">Musicfocus:</b-badge> <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="$refs.appModalShow.showMusicFocus()" /> + <b-badge style="width:80%;"> + Musicfocus: + </b-badge> <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showMusicFocus()" + > </b-col> <b-col lg="4"> <div v-if="loaded.musicfocus"> @@ -205,15 +463,32 @@ </p> <p v-else> <ul> - <li v-for="focus in current.musicfocus">{{ focus.focus }}</li> + <li + v-for="focus in current.musicfocus" + :key="focus.id" + > + {{ focus.focus }} + </li> </ul> </p> </div> - <div v-else><img src="../assets/radio.gif" height="24px" alt="loading data" /><br /></div> + <div v-else> + <img + src="../assets/radio.gif" + height="24px" + alt="loading data" + ><br> + </div> </b-col> <b-col lg="2"> - <b-badge style="width:80%;">Languages:</b-badge> <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="$refs.appModalShow.showLanguages()" /> + <b-badge style="width:80%;"> + Languages: + </b-badge> <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showLanguages()" + > </b-col> <b-col lg="4"> <div v-if="loaded.languages"> @@ -222,15 +497,32 @@ </p> <p v-else> <ul> - <li v-for="lang in current.languages">{{ lang.name }}</li> + <li + v-for="lang in current.languages" + :key="lang.id" + > + {{ lang.name }} + </li> </ul> </p> </div> - <div v-else><img src="../assets/radio.gif" height="24px" alt="loading data" /><br /></div> + <div v-else> + <img + src="../assets/radio.gif" + height="24px" + alt="loading data" + ><br> + </div> </b-col> <b-col lg="2"> - <b-badge style="width:80%;">Hosts:</b-badge> <img src="../assets/16x16/emblem-system.png" alt="edit" v-on:click="$refs.appModalShow.showHosts()" /> + <b-badge style="width:80%;"> + Hosts: + </b-badge> <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showHosts()" + > </b-col> <b-col lg="4"> <div v-if="loaded.hosts"> @@ -240,14 +532,76 @@ <p v-else> <!-- TODO: make link on name; when user clicks, open modal to edit host --> <ul> - <li v-for="host in current.hosts">{{ host.name }}</li> + <li + v-for="host in current.hosts" + :key="host.id" + > + {{ host.name }} + </li> </ul> </p> </div> - <div v-else><img src="../assets/radio.gif" height="24px" alt="loading data" /><br /></div> + <div v-else> + <img + src="../assets/radio.gif" + height="24px" + alt="loading data" + ><br> + </div> </b-col> + </b-row> + <b-row> + <b-col lg="2"> + <b-badge style="width:80%;"> + Logo: + </b-badge> <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showLogo()" + > + </b-col> + <b-col lg="4"> + <div v-if="current.logo.length === 0"> + <small><i>(none set)</i></small> + </div> + <div v-else> + <br> + <b-img + thumbnail + :src="current.logo" + fluid + @click="$refs.appModalShow.showLogo()" + /> + </div> + </b-col> + + <b-col lg="2"> + <b-badge style="width:80%;"> + Image: + </b-badge> <img + src="../assets/16x16/emblem-system.png" + alt="edit" + @click="$refs.appModalShow.showImage()" + > + </b-col> + <b-col lg="4"> + <div v-if="current.image.length === 0"> + <small><i>(none set)</i></small> + </div> + <div v-else> + <br> + <b-img + thumbnail + :src="current.image" + fluid + @click="$refs.appModalShow.showImage()" + /> + </div> + </b-col> </b-row> + + <hr> </div> </b-container> </template> @@ -258,12 +612,21 @@ import modalShow from './ShowManagerModalShow.vue' import timeslotSort from '../mixins/timeslotSort' import prettyDate from '../mixins/prettyDate' import axios from 'axios' +import DOMPurify from 'dompurify' export default { + // all modals to edit a show and its timeslots/notes, are importet as separate + // components, to make it a tiny lickle bit less messy here components: { 'app-modalNotes': modalNotes, 'app-modalShow': modalShow }, + + // generic functions that we want to use from our mixins folder + mixins: [ timeslotSort, prettyDate ], + + // this component will be handling a lot of data - probably the component can + // be refactored to get rid of some redundancy here data () { return { shows: [], // an array of objects describing our shows (empty at load, will be populated on created()) @@ -272,6 +635,9 @@ export default { numSlots: process.env.VUE_APP_TIMESLOT_FILTER_DEFAULT_NUMSLOTS, // all form input values are provided as strings dateStart: this.apiDate(new Date()), dateEnd: this.apiDate(new Date(new Date().getTime() + process.env.VUE_APP_TIMESLOT_FILTER_DEFAULT_DAYS * 86400000)), + + // the loaded object holds flags for the different things we will fetch + // from the AuRa steering module loaded: { shows: false, timeslots: false, @@ -284,6 +650,9 @@ export default { fundingcategory: false, type: false }, + + // the current object is used to hold all the necessary data to describe + // the show which is currently selected by the user in the frontend current: { categories: [], hosts: [], @@ -301,12 +670,40 @@ export default { perpage: 10 }, note: {}, - notes: [] - } + notes: [], + image: '', + logo: '' + }, + + // this is used to configure the table with all the filtered timeslots + notesTableArrayFields: [ + { key: 'title', label: 'Title of emission' }, + { key: 'starts', label: 'Emission start' }, + { key: 'duration', label: 'Duration' }, + { key: 'options', label: 'Edit' } + ] } }, - mixins: [ timeslotSort, prettyDate ], + + // Some of the info we need in the template are not easily and directly + // retrievable, so we are computing them on the fly, when they are needed computed: { + + // As the show description should allow to be html-formatted, we have to + // make sure no malicous code can be inserted into the DOM. For that the + // DOMPurify library (https://github.com/cure53/DOMPurify) does us a much + // better service than trying to sanitize it with some RegExp. + sanitizedShowDescription: function () { + return DOMPurify.sanitize(this.shows[this.currentShow].description) + }, + + // In order to not only just show the predecessor of a show as an ID. we + // have to find it in our shows array to then output the predecessors name. + // This currently assumes that a user has access to all the predecessors + // of the shows as well. + // TODO/discuss: if all predecessor names should be accessible, independent + // of access rights, then we would need to load all predecessors show after + // loading our initial shows as well. predecessorName: function () { for (var i in this.shows) { if (this.shows[i].id === this.shows[this.currentShow].predecessor) { @@ -315,32 +712,64 @@ export default { } return 'Name of predecessor show not available' }, + + // As we do not have a single object which holds all info we need to display + // in the table with our timeslots, we use this computed array to do that notesTableArray: function () { var arr = [] for (var i in this.current.timeslots) { var note = this.getNoteByTimeslotID(this.current.timeslots[i].id) - if (note !== null) note = note.title + if (note !== null) { note = note.title } arr.push({ title: note, starts: this.prettyDateTime(this.current.timeslots[i].start), duration: this.prettyDuration(this.current.timeslots[i].start, this.current.timeslots[i].end), - // TODO: find out how to insert images or iconffont icons into b-table rows - // options: '<img src="../assets/16x16/emblem-system.png" alt="edit note" v-on:click="' + this.editTimeslotNote(this.current.timeslots[i].id) + '" />' - options: '<span class="timeslotEditLink" onclick="' + - 'document.getElementById(\'app\').children[1].__vue__.' + - 'editTimeslotNote(' + this.current.timeslots[i].id + ', ' + this.current.timeslots[i].schedule + ')">edit</span> ' + - '<span class="timeslotEditLink" onclick="alert(\'notYetImplemented\')">upload</span>' + - '<span class="timeslotEditLink" onclick="alert(\'notYetImplemented\')">...</span>' + options: { + id: this.current.timeslots[i].id, + schedule: this.current.timeslots[i].schedule + } }) } return arr } }, + + // Right after this component is set up, we want to fetch all available shows + // from the AuRa steering module. + created () { + var uri = process.env.VUE_APP_API_STEERING_SHOWS + if (!this.$parent.user.steeringUser.is_superuser) { + uri += '?owner=' + this.$parent.user.steeringUser.id + } + axios.get(uri, { + withCredentials: true, + headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } + }).then(response => { + if (response.data.length === 0) { + alert('There are now shows associated with your account!') + return + } + this.shows = response.data + this.currentShowID = this.shows[0].id + this.currentShow = 0 + this.loaded.shows = true + this.switchShow(this.currentShow) + }).catch(error => { + alert('There was an error fetching shows from the server: ' + error) + }) + }, + + // Now for our hotchpotch of methods, mostly used for fetching data from the + // AuRa steering API (updateing will be done in the imported modal components) methods: { + + // Apply the newly set filter parameters for our timeslot table applyFilter: function () { this.current.timeslotmeta.page = 1 this.getTimeslots(this.dateStart, this.dateEnd, this.numSlots) }, + + // Reset the filter parameters for our timeslot table to config defaults resetFilter: function () { this.numSlots = process.env.VUE_APP_TIMESLOT_FILTER_DEFAULT_NUMSLOTS this.dateStart = this.apiDate(new Date()) @@ -348,12 +777,22 @@ export default { this.current.timeslotmeta.page = 1 this.getTimeslots(this.dateStart, this.dateEnd, this.numSlots) }, + + // Load a different page of timeslots for the timeslots table timeslotsPage: function (page) { if (this.current.timeslotmeta.page !== page) { this.current.timeslotmeta.page = page this.getTimeslots(this.dateStart, this.dateEnd, this.numSlots, (page - 1) * this.numSlots) } }, + + // Every time the user switches to another show, we will load all related + // data (as e.g. categories, hosts, etc.) from the AuRa steering API, in case + // something changed. + // TODO/discuss: maybe this is too inefficient and we could only load this + // data just in the beginning after shows are loaded and assume they do not + // change throughout a session or put it into the user's responsibility to + // reload the show manager page after relevant changes. switchShow: function (index) { // if we already had some show loaded with timeslots and notes, set these to // not loaded, so we don't display old timeslots and notes while already @@ -370,6 +809,12 @@ export default { // set the current show and its ID to whatever we want to switch to now this.currentShow = index this.currentShowID = this.shows[this.currentShow].id + // and check if images are available and set image strings, because we + // cannot use them directly inside the b-img if they are null + if (this.shows[this.currentShow].logo === null) { this.current.logo = '' } + else { this.current.logo = this.shows[this.currentShow].logo } + if (this.shows[this.currentShow].image === null) { this.current.image = '' } + else { this.current.image = this.shows[this.currentShow].image } // before we load timeslots and notes, we want to fetch the general settings first this.getCategories() this.getHosts() @@ -381,13 +826,15 @@ export default { // now fetch the timeslots (including notes) for a given show from PV backend this.getTimeslots(this.dateStart, this.dateEnd, this.numSlots) }, + + // Fetch timeslots for the current show and use filter variables if provided getTimeslots: function (start, end, limit, offset) { var dateRegex = new RegExp('^\\d{4}-\\d{2}-\\d{2}$') var uri = process.env.VUE_APP_API_STEERING_SHOWS + this.currentShowID + '/timeslots/?' - if (dateRegex.test(start)) uri += 'start=' + start + '&' - if (dateRegex.test(end)) uri += 'end=' + end + '&' - if (!isNaN(parseInt(limit))) uri += 'limit=' + parseInt(limit) + '&' - if (!isNaN(parseInt(offset))) uri += 'offset=' + parseInt(offset) + if (dateRegex.test(start)) { uri += 'start=' + start + '&' } + if (dateRegex.test(end)) { uri += 'end=' + end + '&' } + if (!isNaN(parseInt(limit))) { uri += 'limit=' + parseInt(limit) + '&' } + if (!isNaN(parseInt(offset))) { uri += 'offset=' + parseInt(offset) } this.loaded.timeslots = false this.loaded.notes = false axios.get(uri, { @@ -445,6 +892,8 @@ export default { }) // done fetching timeslots }, + + // Open the modal to edit a timeslot's note, given its ID and schedule ID editTimeslotNote: function (timeslotID, scheduleID) { this.current.note = null for (var i in this.current.notes) { @@ -455,6 +904,8 @@ export default { } this.$refs.appModalNotes.showModal(this.current.note, timeslotID, scheduleID) }, + + // For a given timeslot ID return the corresponding note, if there is one getNoteByTimeslotID: function (timeslotID) { for (var i in this.current.notes) { if (this.current.notes[i].timeslot === timeslotID && this.current.notes[i].title !== undefined) { @@ -463,6 +914,8 @@ export default { } return null }, + + // For a given timeslot ID, check if there is a note and return it prettyTimeslotNote: function (timeslotID) { var note = this.getTimeslotNoteTitle(timeslotID) if (note !== null) { @@ -471,14 +924,17 @@ export default { return '' } }, + + // Limiting display of strings up to 25 characters plus "..." prettyTitle: function (title) { - if (title === '') return '...' - else if (title.length > 25) return title.slice(0, 25) + '...' - else return title + if (title === '') { return '...' } + else if (title.length > 25) { return title.slice(0, 25) + '...' } + else { return title } }, - // TODO: all thos getSomething functions could be probably merged into one - // generic getItem function. Maybe this.current should be an associative array - // instead of an object then? + + // TODO: all those getSomething functions could be probably merged into one + // generic getItem function. Maybe this.current should be implemented + // in a dictionary kind of way then? getCategories: function () { this.current.categories = [] var loadingError = false @@ -496,9 +952,10 @@ export default { alert('There was an error fetching categories from the server: ' + error) }) } - if (!loadingError) this.loaded.categories = true + if (!loadingError) { this.loaded.categories = true } } }, + getHosts: function () { this.current.hosts = [] var loadingError = false @@ -516,9 +973,10 @@ export default { alert('There was an error fetching hosts from the server: ' + error) }) } - if (!loadingError) this.loaded.hosts = true + if (!loadingError) { this.loaded.hosts = true } } }, + getLanguages: function () { this.current.languages = [] var loadingError = false @@ -536,9 +994,10 @@ export default { alert('There was an error fetching languages from the server: ' + error) }) } - if (!loadingError) this.loaded.languages = true + if (!loadingError) { this.loaded.languages = true } } }, + getTopics: function () { this.current.topics = [] var loadingError = false @@ -556,9 +1015,10 @@ export default { alert('There was an error fetching topics from the server: ' + error) }) } - if (!loadingError) this.loaded.topics = true + if (!loadingError) { this.loaded.topics = true } } }, + getMusicfocus: function () { this.current.musicfocus = [] var loadingError = false @@ -577,8 +1037,9 @@ export default { }) } } - if (!loadingError) this.loaded.musicfocus = true + if (!loadingError) { this.loaded.musicfocus = true } }, + getFundingCategory: function () { this.current.fundingcategory = [] var loadingError = false @@ -595,8 +1056,9 @@ export default { alert('There was an error fetching funding category from the server: ' + error) }) } - if (!loadingError) this.loaded.fundingcategory = true + if (!loadingError) { this.loaded.fundingcategory = true } }, + getType: function () { this.current.type = [] var loadingError = false @@ -613,33 +1075,14 @@ export default { alert('There was an error fetching show type from the server: ' + error) }) } - if (!loadingError) this.loaded.type = true + if (!loadingError) { this.loaded.type = true } }, + + // Just a placeholder function we can use in the UI, to signal if something + // is not yet implemented notYetImplemented: function () { alert('By the mighty witchcraftry of the mother of time!\n\nThis feature is not implemented yet.') } - }, - created () { - var uri = process.env.VUE_APP_API_STEERING_SHOWS - if (!this.$parent.user.steeringUser.is_superuser) { - uri += '?owner=' + this.$parent.user.steeringUser.id - } - axios.get(uri, { - withCredentials: true, - headers: { 'Authorization': 'Bearer ' + this.$parent.user.access_token } - }).then(response => { - if (response.data.length === 0) { - alert('There are now shows associated with your account!') - return - } - this.shows = response.data - this.currentShowID = this.shows[0].id - this.currentShow = 0 - this.loaded.shows = true - this.switchShow(this.currentShow) - }).catch(error => { - alert('There was an error fetching shows from the server: ' + error) - }) } } </script> diff --git a/src/components/ShowManagerModalNotes.vue b/src/components/ShowManagerModalNotes.vue index 3891b579fd878c1020f2e35f22ea42c0eb611f16..920e41fa81d24313a5a16198b3e1b4042cbd761c 100644 --- a/src/components/ShowManagerModalNotes.vue +++ b/src/components/ShowManagerModalNotes.vue @@ -1,29 +1,72 @@ <template> <div> - <b-modal ref="modalNote" title="Editing a note" size="lg" @ok="saveNote"> + <b-modal + ref="modalNote" + title="Editing a note" + size="lg" + @ok="saveNote" + > <b-container fluid> - <p v-if="typeof note.start !== 'undefined'">This is the note for the timeslot on {{prettyDateTime(note.start) }}.</p> - <p v-else>You are creating a new note.</p> + <p v-if="typeof note.start !== 'undefined'"> + This is the note for the timeslot on {{ prettyDateTime(note.start) }}. + </p> + <p v-else> + You are creating a new note. + </p> <b-row> - <b-col cols="2">Title:</b-col> - <b-col cols="10"><b-form-input v-model="title" type="text" placeholder="Enter a title"></b-form-input></b-col> - <b-col cols="2"></b-col> - <b-col cols="10"><small class="slug">Slug: {{ slug }}</small></b-col> + <b-col cols="2"> + Title: + </b-col> + <b-col cols="10"> + <b-form-input + v-model="title" + type="text" + placeholder="Enter a title" + /> + </b-col> + <b-col cols="2" /> + <b-col cols="10"> + <small class="slug">Slug: {{ slug }}</small> + </b-col> </b-row> - <br /> + <br> <b-row> - <b-col cols="2">Summary:</b-col> - <b-col cols="10"><b-form-textarea v-model="summary" :rows="4" placeholder="Enter a summary"></b-form-textarea></b-col> + <b-col cols="2"> + Summary: + </b-col> + <b-col cols="10"> + <b-form-textarea + v-model="summary" + :rows="4" + placeholder="Enter a summary" + /> + </b-col> </b-row> - <br /> + <br> <b-row> - <b-col cols="2">Content:</b-col> - <b-col cols="10"><b-form-textarea v-model="content" :rows="8" placeholder="Enter a text describing this timeslot"></b-form-textarea></b-col> + <b-col cols="2"> + Content: + </b-col> + <b-col cols="10"> + <b-form-textarea + v-model="content" + :rows="8" + placeholder="Enter a text describing this timeslot" + /> + </b-col> </b-row> - <br /> + <br> <b-row> - <b-col cols="2">Host:</b-col> - <b-col cols="10"><b-form-select v-model="host_selected" :options="hosts" class="mb-3" /></b-col> + <b-col cols="2"> + Host: + </b-col> + <b-col cols="10"> + <b-form-select + v-model="host_selected" + :options="hosts" + class="mb-3" + /> + </b-col> </b-row> </b-container> </b-modal> @@ -44,6 +87,7 @@ function debugErrorResponse (data) { */ export default { + mixins: [ prettyDate ], props: { show: { type: Object, required: true }, showAggregate: { type: Object, required: true } @@ -86,7 +130,6 @@ export default { return hosts } }, - mixins: [ prettyDate ], methods: { update (event) { // only try to save if anything has changed @@ -113,7 +156,7 @@ export default { axios.put(uri, this.note, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { // everything was fine, we can close the modal now this.$refs.modalNote.hide() }).catch(error => { diff --git a/src/components/ShowManagerModalShow.vue b/src/components/ShowManagerModalShow.vue index 0e4eeaa7c97eae528644a284100a2c80c79e97c5..e2301d8552a7a36b25e0362ac411a2cdd9a3028a 100644 --- a/src/components/ShowManagerModalShow.vue +++ b/src/components/ShowManagerModalShow.vue @@ -1,147 +1,397 @@ <template> <div> - <b-modal ref="modalShowName" title="Name of the show" size="lg" @ok="saveName"> - <b-form-input v-model="string" type="text" placeholder="Enter name of the show"></b-form-input> + <b-modal + ref="modalShowName" + title="Name of the show" + size="lg" + @ok="saveName" + > + <b-form-input + v-model="string" + type="text" + placeholder="Enter name of the show" + /> </b-modal> - <b-modal ref="modalShowShortDescription" title="Short description" size="lg" @ok="saveShortDescription"> - <b-form-textarea v-model="string" :rows="2" placeholder="Enter a short description"></b-form-textarea> + <b-modal + ref="modalShowShortDescription" + title="Short description" + size="lg" + @ok="saveShortDescription" + > + <b-form-textarea + v-model="string" + :rows="2" + placeholder="Enter a short description" + /> </b-modal> - <b-modal ref="modalShowDescription" title="Full description" size="lg" @ok="saveDescription"> - <b-form-textarea v-model="string" :rows="2" placeholder="Enter the full description of this show"></b-form-textarea> + <b-modal + ref="modalShowDescription" + title="Full description" + size="lg" + @ok="saveDescription" + > + <b-form-textarea + v-model="string" + :rows="2" + placeholder="Enter the full description of this show" + /> </b-modal> <!-- TODO: use b-form outside the b-form-input, so that simple input validation works automagically --> - <b-modal ref="modalShowEmail" title="E-Mail" size="lg" @ok="saveEmail"> - <b-form-input v-model="string" type="email" placeholder="Put a contact address of your show here"></b-form-input> + <b-modal + ref="modalShowEmail" + title="E-Mail" + size="lg" + @ok="saveEmail" + > + <b-form-input + v-model="string" + type="email" + placeholder="Put a contact address of your show here" + /> </b-modal> <!-- TODO: use b-form outside the b-form-input, so that simple input validation works automagically --> - <b-modal ref="modalShowWebsite" title="Website" size="lg" @ok="saveWebsite"> - <b-form-input v-model="string" type="url" placeholder="Put the website of your show here"></b-form-input> + <b-modal + ref="modalShowWebsite" + title="Website" + size="lg" + @ok="saveWebsite" + > + <b-form-input + v-model="string" + type="url" + placeholder="Put the website of your show here" + /> </b-modal> <!-- TODO: use b-form outside the b-form-input, so that simple input validation works automagically --> - <b-modal ref="modalShowCBAid" title="CBA Series ID" size="lg" @ok="saveCBAid"> - <b-form-input v-model="id" type="number" placeholder="Put the CBA Series ID of your show here"></b-form-input> + <b-modal + ref="modalShowCBAid" + title="CBA Series ID" + size="lg" + @ok="saveCBAid" + > + <b-form-input + v-model="id" + type="number" + placeholder="Put the CBA Series ID of your show here" + /> </b-modal> <!-- TODO: use b-form outside the b-form-input, so that simple input validation works automagically --> - <b-modal ref="modalShowPredecessor" title="Predecessor of this show" size="lg" @ok="savePredecessor"> - <b-form-select v-model="id" :options="showPredecessorSelector" /> + <b-modal + ref="modalShowPredecessor" + title="Predecessor of this show" + size="lg" + @ok="savePredecessor" + > + <b-form-select + v-model="id" + :options="showPredecessorSelector" + /> </b-modal> - <b-modal ref="modalShowType" title="Show type" size="lg" @ok="saveShowType"> + <b-modal + ref="modalShowType" + title="Show type" + size="lg" + @ok="saveShowType" + > <b-row> <b-col align="center"> <div v-if="!loaded"> - <img src="../assets/radio.gif" alt="loading data" /> + <img + src="../assets/radio.gif" + alt="loading data" + > </div> <div v-else> - <b-form-select v-model="id" :options="showTypeSelector" /> + <b-form-select + v-model="id" + :options="showTypeSelector" + /> </div> </b-col> </b-row> </b-modal> - <b-modal ref="modalShowFundingCategory" title="Funding category of this show" size="lg" @ok="saveFundingCategory"> + <b-modal + ref="modalShowFundingCategory" + title="Funding category of this show" + size="lg" + @ok="saveFundingCategory" + > <b-row> <b-col align="center"> <div v-if="!loaded"> - <img src="../assets/radio.gif" alt="loading data" /> + <img + src="../assets/radio.gif" + alt="loading data" + > </div> <div v-else> - <b-form-select v-model="id" :options="showFundingCategorySelector" /> + <b-form-select + v-model="id" + :options="showFundingCategorySelector" + /> </div> </b-col> </b-row> </b-modal> - <b-modal ref="modalShowCategories" title="Categories of this show" size="lg" @ok="saveCategories"> + <b-modal + ref="modalShowCategories" + title="Categories of this show" + size="lg" + @ok="saveCategories" + > <b-row> <b-col align="center"> <div v-if="!loaded"> - <img src="../assets/radio.gif" alt="loading data" /> + <img + src="../assets/radio.gif" + alt="loading data" + > </div> <div v-else> <p>Choose one or more categoires for this show:</p> - <b-form-select multiple v-model="array" :options="showCategorySelector" :select-size="5" /> - <br /><br /> - <b-alert show dismissible variant="info"><b>Hint:</b> use <code>CTRL+click</code> for multiple selection</b-alert> + <b-form-select + v-model="array" + multiple + :options="showCategorySelector" + :select-size="5" + /> + <br><br> + <b-alert + show + dismissible + variant="info" + > + <b>Hint:</b> use <code>CTRL+click</code> for multiple selection + </b-alert> </div> </b-col> </b-row> </b-modal> - <b-modal ref="modalShowTopics" title="Topics of this show" size="lg" @ok="saveTopics"> + <b-modal + ref="modalShowTopics" + title="Topics of this show" + size="lg" + @ok="saveTopics" + > <b-row> <b-col align="center"> <div v-if="!loaded"> - <img src="../assets/radio.gif" alt="loading data" /> + <img + src="../assets/radio.gif" + alt="loading data" + > </div> <div v-else> <p>Choose one or more topics for this show:</p> - <b-form-select multiple v-model="array" :options="showTopicsSelector" :select-size="5" /> - <br /><br /> - <b-alert show dismissible variant="info"><b>Hint:</b> use <code>CTRL+click</code> for multiple selection</b-alert> + <b-form-select + v-model="array" + multiple + :options="showTopicsSelector" + :select-size="5" + /> + <br><br> + <b-alert + show + dismissible + variant="info" + > + <b>Hint:</b> use <code>CTRL+click</code> for multiple selection + </b-alert> </div> </b-col> </b-row> </b-modal> - <b-modal ref="modalShowMusicFocus" title="Music focus of this show" size="lg" @ok="saveMusicFocus"> + <b-modal + ref="modalShowMusicFocus" + title="Music focus of this show" + size="lg" + @ok="saveMusicFocus" + > <b-row> <b-col align="center"> <div v-if="!loaded"> - <img src="../assets/radio.gif" alt="loading data" /> + <img + src="../assets/radio.gif" + alt="loading data" + > </div> <div v-else> <p>Choose none, one or more music foci for this show:</p> - <b-form-select multiple v-model="array" :options="showMusicFocusSelector" :select-size="5" /> - <br /><br /> - <b-alert show dismissible variant="info"><b>Hint:</b> use <code>CTRL+click</code> for multiple selection</b-alert> + <b-form-select + v-model="array" + multiple + :options="showMusicFocusSelector" + :select-size="5" + /> + <br><br> + <b-alert + show + dismissible + variant="info" + > + <b>Hint:</b> use <code>CTRL+click</code> for multiple selection + </b-alert> </div> </b-col> </b-row> </b-modal> - <b-modal ref="modalShowLanguages" title="Languages of this show" size="lg" @ok="saveLanguages"> + <b-modal + ref="modalShowLanguages" + title="Languages of this show" + size="lg" + @ok="saveLanguages" + > <b-row> <b-col align="center"> <div v-if="!loaded"> - <img src="../assets/radio.gif" alt="loading data" /> + <img + src="../assets/radio.gif" + alt="loading data" + > </div> <div v-else> <p>Choose one or more languages for this show:</p> - <b-form-select multiple v-model="array" :options="showLanguagesSelector" :select-size="5" /> - <br /><br /> - <b-alert show dismissible variant="info"><b>Hint:</b> use <code>CTRL+click</code> for multiple selection</b-alert> + <b-form-select + v-model="array" + multiple + :options="showLanguagesSelector" + :select-size="5" + /> + <br><br> + <b-alert + show + dismissible + variant="info" + > + <b>Hint:</b> use <code>CTRL+click</code> for multiple selection + </b-alert> </div> </b-col> </b-row> </b-modal> - <b-modal ref="modalShowHosts" title="Hosts of this show" size="lg" @ok="saveHosts"> + <b-modal + ref="modalShowHosts" + title="Hosts of this show" + size="lg" + @ok="saveHosts" + > <b-row> <b-col align="center"> <div v-if="!loaded"> - <img src="../assets/radio.gif" alt="loading data" /> + <img + src="../assets/radio.gif" + alt="loading data" + > </div> <div v-else> <p>Choose one or more hosts for this show:</p> - <b-form-select multiple v-model="array" :options="showHostsSelector" :select-size="5" /> - <br /><br /> - <b-alert show dismissible variant="info"><b>Hint:</b> use <code>CTRL+click</code> for multiple selection</b-alert> + <b-form-select + v-model="array" + multiple + :options="showHostsSelector" + :select-size="5" + /> + <br><br> + <b-alert + show + dismissible + variant="info" + > + <b>Hint:</b> use <code>CTRL+click</code> for multiple selection + </b-alert> </div> </b-col> </b-row> </b-modal> + <b-modal + ref="modalLogo" + title="Logo of this show" + size="lg" + @ok="saveLogo" + > + <b-row> + <b-col lg="4"> + <p>Current logo:</p> + </b-col> + <b-col lg="8"> + <p v-if="string.length === 0"> + <small><i>(none set)</i></small> + </p> + <p v-else> + <b-img + thumbnail + fluid + :src="string" + /> + </p> + </b-col> + </b-row> + <b-row> + <b-col> + <b-form-file + ref="fileinputLogo" + v-model="file" + accept="image/jpeg, image/png" + :state="Boolean(file)" + placeholder="Choose a new logo..." + /> + </b-col> + </b-row> + </b-modal> + + <b-modal + ref="modalImage" + title="Image of this show" + size="lg" + @ok="saveImage" + > + <b-row> + <b-col lg="4"> + <p>Current image:</p> + </b-col> + <b-col lg="8"> + <p v-if="string.length === 0"> + <small><i>(none set)</i></small> + </p> + <p v-else> + <b-img + thumbnail + fluid + :src="string" + /> + </p> + </b-col> + </b-row> + <b-row> + <b-col> + <b-form-file + ref="fileinputImage" + v-model="file" + accept="image/jpeg, image/png" + :state="Boolean(file)" + placeholder="Choose a new image..." + /> + </b-col> + </b-row> + </b-modal> </div> </template> @@ -173,6 +423,7 @@ export default { backupid: 0, array: [], backuparray: [], + file: null, // we use this when opening modals, that have to fetch options through the API first. loaded: false, /* @@ -276,7 +527,7 @@ export default { axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$refs.modalShowName.hide() }).catch(error => { this.show.name = this.backupstring @@ -294,7 +545,7 @@ export default { axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$refs.modalShowShortDescription.hide() }).catch(error => { this.show.short_description = this.backupstring @@ -312,7 +563,7 @@ export default { axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$refs.modalShowDescription.hide() }).catch(error => { this.show.description = this.backupstring @@ -330,7 +581,7 @@ export default { axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$refs.modalShowEmail.hide() }).catch(error => { this.show.email = this.backupstring @@ -348,7 +599,7 @@ export default { axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$refs.modalShowWebsite.hide() }).catch(error => { this.show.website = this.backupstring @@ -366,7 +617,7 @@ export default { axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$refs.modalShowCBAid.hide() }).catch(error => { this.show.cba_series_id = this.backupid @@ -384,7 +635,7 @@ export default { axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$parent.getType() this.$refs.modalShowType.hide() }).catch(error => { @@ -398,20 +649,13 @@ export default { savePredecessor (event) { if (this.id !== this.show.predecessor) { event.preventDefault() -<<<<<<< HEAD this.backupid = this.show.predecessor_id this.show.predecessor_id = this.id console.log(this.show.predecessor_id) axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { -======= - this.backupid = this.show.predecessor - this.show.predecessor = this.id - console.log(this.show.predecessor) - axios.put(process.env.API_STEERING_SHOWS + this.show.id + '/', this.show, { ->>>>>>> 3888ff92fbc548600ff336cd605a9e1087a603d9 withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$refs.modalShowPredecessor.hide() }).catch(error => { this.show.predecessor = this.backupid @@ -429,7 +673,7 @@ export default { axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$parent.getFundingCategory() this.$refs.modalShowType.hide() }).catch(error => { @@ -442,12 +686,13 @@ export default { }, saveCategories (event) { if (this.array.length !== this.show.category.length || !this.array.every((value, index) => value === this.show.category[index])) { + event.preventDefault() this.backuparray = this.show.category this.show.category = this.array axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$parent.getCategories() this.$refs.modalShowCategories.hide() }).catch(error => { @@ -460,12 +705,13 @@ export default { }, saveTopics (event) { if (this.array.length !== this.show.topic.length || !this.array.every((value, index) => value === this.show.topic[index])) { + event.preventDefault() this.backuparray = this.show.topic this.show.topic = this.array axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$parent.getTopics() this.$refs.modalShowTopics.hide() }).catch(error => { @@ -478,12 +724,13 @@ export default { }, saveMusicFocus (event) { if (this.array.length !== this.show.musicfocus.length || !this.array.every((value, index) => value === this.show.musicfocus[index])) { + event.preventDefault() this.backuparray = this.show.musicfocus this.show.musicfocus = this.array axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$parent.getMusicfocus() this.$refs.modalShowMusicFocus.hide() }).catch(error => { @@ -496,12 +743,13 @@ export default { }, saveLanguages (event) { if (this.array.length !== this.show.language.length || !this.array.every((value, index) => value === this.show.language[index])) { + event.preventDefault() this.backuparray = this.show.language this.show.language = this.array axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$parent.getLanguages() this.$refs.modalShowLanguages.hide() }).catch(error => { @@ -514,12 +762,13 @@ export default { }, saveHosts (event) { if (this.array.length !== this.show.hosts.length || !this.array.every((value, index) => value === this.show.hosts[index])) { + event.preventDefault() this.backuparray = this.show.hosts this.show.hosts = this.array axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', this.show, { withCredentials: true, headers: { 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token } - }).then(response => { + }).then(() => { this.$parent.getHosts() this.$refs.modalShowHosts.hide() }).catch(error => { @@ -530,6 +779,57 @@ export default { }) } }, + saveLogo (event) { + event.preventDefault() + if (this.file === null) { alert('Please provide a file to upload') } + else if (this.file.type !== 'image/jpeg' && this.file.type !== 'image/png') { alert('Please provide a valid image file (JPEG or PNG)') } + else { + let formData = new FormData() + this.backupstring = this.string + // work in progress: + // as it seems we have to use multipart webform data and add all items in order + // but this is still not working + // have to find out what exact format and encoding is needed to upload a show with files included + formData.append('name', this.show.name) + formData.append('slug', this.show.slug) + formData.append('image', this.show.image) + formData.append('logo', this.file, this.file.name); + formData.append('short_description', this.show.short_description) + formData.append('description', this.show.description) + formData.append('email', this.show.email) + formData.append('website', this.show.website) + formData.append('type', this.show.type) + formData.append('fundingcategory', this.show.fundingcategory) + formData.append('predecessor', this.show.predecessor) + formData.append('cba_series_id', this.show.cba_series_id) + formData.append('fallback_id', this.show.fallback_id) + formData.append('category', this.show.category) + formData.append('host', this.show.host) + formData.append('language', this.show.language) + formData.append('topic', this.show.topic) + formData.append('musicfocus', this.show.musicfocus) + axios.put(process.env.VUE_APP_API_STEERING_SHOWS + this.show.id + '/', formData, { + withCredentials: true, + headers: { + 'Authorization': 'Bearer ' + this.$parent.$parent.user.access_token, + 'Content-Type': 'multipart/form-data' + } + }).then(() => { + //this.$parent.getHosts() + this.$refs.modalLogo.hide() + }).catch(error => { + this.file = null + this.string = this.backupstring + console.log('Error:') + console.log(error) + alert('Error: could not save the new logo') + }) + } + }, + saveImage (event) { + alert('Not yet implemented') + console.log(event) + }, /* Functions to activate modals They are called from the parent component @@ -673,6 +973,20 @@ export default { alert('Error: could not load available hosts') }) this.$refs.modalShowHosts.show() + }, + showLogo () { + if (this.show.logo === null) { this.string = '' } + else { this.string = this.show.logo } + this.file = null + this.$refs.fileinputLogo.reset() + this.$refs.modalLogo.show() + }, + showImage () { + if (this.show.image === null) { this.string = '' } + else { this.string = this.show.image } + this.file = null + this.$refs.fileinputImage.reset() + this.$refs.modalImage.show() } } } diff --git a/src/mixins/prettyDate.js b/src/mixins/prettyDate.js index 01de337f72983c03c1348aebf4c36829653b2b41..2fe0bcef0c9e2636035a2f85a876e4cd6e908348 100644 --- a/src/mixins/prettyDate.js +++ b/src/mixins/prettyDate.js @@ -1,6 +1,6 @@ function leadingZero (num) { - if (num < 10) return '0' + num - else return num.toString() + if (num < 10) { return '0' + num } + else { return num.toString() } } var day = [ @@ -68,6 +68,13 @@ export default { duration += 'sec' } return duration + }, + prettyNanoseconds: function(ns) { + var sec_total = ns / 1000 / 1000 / 1000 + var hours = Math.floor(sec_total / 3600) + var minutes = Math.floor((sec_total - (hours * 3600)) / 60) + var seconds = Math.floor((sec_total - (hours * 3600) - (minutes * 60)) * 10) / 10 + return hours + ':' + leadingZero(minutes) + ':' + leadingZero(seconds) } } } diff --git a/src/mixins/timeslotSort.js b/src/mixins/timeslotSort.js index c1a58523a7f6e0c9e7f3c4278a9b1b570cce0522..55a4ceba449ac8e9993d552c296530e2569032a1 100644 --- a/src/mixins/timeslotSort.js +++ b/src/mixins/timeslotSort.js @@ -1,9 +1,9 @@ function compareEpisodesByDate (a, b) { var dateA = new Date(a.start) var dateB = new Date(b.start) - if (dateA < dateB) return -1 - else if (dateA > dateB) return 1 - else return 0 + if (dateA < dateB) { return -1 } + else if (dateA > dateB) { return 1 } + else { return 0 } } export default {