From 7bca6340871cc138877db913b048a23058fe685c Mon Sep 17 00:00:00 2001 From: John Cowen Date: Mon, 10 Feb 2020 09:48:53 +0000 Subject: [PATCH 01/83] ui: Slight refactor 'name deciding' for `request` > `rpc` (#6850) During the refactor of the data layer we had a method that you can use to do a request/response call i.e. adapter.request > serializer.respond We weren't sure what to name this but eventually wanted it to live on the HTTPAdapter itself (see removed comments in the changeset) We've decided `rpc` is a good name and we've moved this to where we want it. We've deprecated the old `request` method name but not removed it as yet. There's also opportunity now to reduce the 'read/write' functions further as they essentially do the same thing. Again we've left this for the moment, but we are hoping to get the code for our custom Adapter down to less than 100 LoC. --- ui-v2/app/adapters/application.js | 42 +---------- ui-v2/app/adapters/http.js | 112 +++++++++++++++++++----------- 2 files changed, 74 insertions(+), 80 deletions(-) diff --git a/ui-v2/app/adapters/application.js b/ui-v2/app/adapters/application.js index 5dede706f4..93079afed1 100644 --- a/ui-v2/app/adapters/application.js +++ b/ui-v2/app/adapters/application.js @@ -17,45 +17,9 @@ export default Adapter.extend({ [DATACENTER_QUERY_PARAM]: dc, }; }, - // TODO: kinda protected for the moment - // decide where this should go either read/write from http - // should somehow use this or vice versa + // TODO: Deprecated, remove `request` usage from everywhere and replace with + // `HTTPAdapter.rpc` request: function(req, resp, obj, modelName) { - const client = this.client; - const store = this.store; - const adapter = this; - - let unserialized, serialized; - const serializer = store.serializerFor(modelName); - // workable way to decide whether this is a snapshot - // essentially 'is attributable'. - // Snapshot is private so we can't do instanceof here - // and using obj.constructor.name gets changed/minified - // during compilation so you can't rely on it - // checking for `attributes` being a function is more - // reliable as that is the thing we need to call - if (typeof obj.attributes === 'function') { - unserialized = obj.attributes(); - serialized = serializer.serialize(obj, {}); - } else { - unserialized = obj; - serialized = unserialized; - } - - return client - .request(function(request) { - return req(adapter, request, serialized, unserialized); - }) - .catch(function(e) { - return adapter.error(e); - }) - .then(function(respond) { - // TODO: When HTTPAdapter:responder changes, this will also need to change - return resp(serializer, respond, serialized, unserialized); - }); - // TODO: Potentially add specific serializer errors here - // .catch(function(e) { - // return Promise.reject(e); - // }); + return this.rpc(...arguments); }, }); diff --git a/ui-v2/app/adapters/http.js b/ui-v2/app/adapters/http.js index 294b7c83a5..4a90fdc450 100644 --- a/ui-v2/app/adapters/http.js +++ b/ui-v2/app/adapters/http.js @@ -1,3 +1,4 @@ +import { inject as service } from '@ember/service'; import Adapter from 'ember-data/adapter'; import AdapterError from '@ember-data/adapter/error'; import { @@ -10,46 +11,75 @@ import { ConflictError, InvalidError, } from 'ember-data/adapters/errors'; -// TODO: This is a little skeleton cb function -// is to be replaced soon with something slightly more involved -const responder = function(response) { - return response; -}; -const read = function(adapter, serializer, client, type, query) { - return client - .request(function(request) { + +// TODO These are now exactly the same, apart from the fact that one uses +// `serialized, unserialized` and the other just `query` +// they could actually be one function now, but would be nice to think about +// the naming of things (serialized vs query etc) +const read = function(adapter, modelName, type, query = {}) { + return adapter.rpc( + function(adapter, request, query) { return adapter[`requestFor${type}`](request, query); - }) - .catch(function(e) { - return adapter.error(e); - }) - .then(function(response) { - return serializer[`respondFor${type}`](responder(response), query); - }); - // TODO: Potentially add specific serializer errors here - // .catch(function(e) { - // return Promise.reject(e); - // }); + }, + function(serializer, respond, query) { + return serializer[`respondFor${type}`](respond, query); + }, + query, + modelName + ); }; -const write = function(adapter, serializer, client, type, snapshot) { - const unserialized = snapshot.attributes(); - const serialized = serializer.serialize(snapshot, {}); - return client - .request(function(request) { +const write = function(adapter, modelName, type, snapshot) { + return adapter.rpc( + function(adapter, request, serialized, unserialized) { return adapter[`requestFor${type}`](request, serialized, unserialized); - }) - .catch(function(e) { - return adapter.error(e); - }) - .then(function(response) { - return serializer[`respondFor${type}`](responder(response), serialized, unserialized); - }); - // TODO: Potentially add specific serializer errors here - // .catch(function(e) { - // return Promise.reject(e); - // }); + }, + function(serializer, respond, serialized, unserialized) { + return serializer[`respondFor${type}`](respond, serialized, unserialized); + }, + snapshot, + modelName + ); }; export default Adapter.extend({ + client: service('client/http'), + rpc: function(req, resp, obj, modelName) { + const client = this.client; + const store = this.store; + const adapter = this; + + let unserialized, serialized; + const serializer = store.serializerFor(modelName); + // workable way to decide whether this is a snapshot + // essentially 'is attributable'. + // Snapshot is private so we can't do instanceof here + // and using obj.constructor.name gets changed/minified + // during compilation so you can't rely on it + // checking for `attributes` being a function is more + // reliable as that is the thing we need to call + if (typeof obj.attributes === 'function') { + unserialized = obj.attributes(); + serialized = serializer.serialize(obj, {}); + } else { + unserialized = obj; + serialized = unserialized; + } + + return client + .request(function(request) { + return req(adapter, request, serialized, unserialized); + }) + .catch(function(e) { + return adapter.error(e); + }) + .then(function(respond) { + // TODO: When HTTPAdapter:responder changes, this will also need to change + return resp(serializer, respond, serialized, unserialized); + }); + // TODO: Potentially add specific serializer errors here + // .catch(function(e) { + // return Promise.reject(e); + // }); + }, error: function(err) { const errors = [ { @@ -97,21 +127,21 @@ export default Adapter.extend({ throw error; }, query: function(store, type, query) { - return read(this, store.serializerFor(type.modelName), this.client, 'Query', query); + return read(this, type.modelName, 'Query', query); }, queryRecord: function(store, type, query) { - return read(this, store.serializerFor(type.modelName), this.client, 'QueryRecord', query); + return read(this, type.modelName, 'QueryRecord', query); }, findAll: function(store, type) { - return read(this, store.serializerFor(type.modelName), this.client, 'FindAll'); + return read(this, type.modelName, 'FindAll'); }, createRecord: function(store, type, snapshot) { - return write(this, store.serializerFor(type.modelName), this.client, 'CreateRecord', snapshot); + return write(this, type.modelName, 'CreateRecord', snapshot); }, updateRecord: function(store, type, snapshot) { - return write(this, store.serializerFor(type.modelName), this.client, 'UpdateRecord', snapshot); + return write(this, type.modelName, 'UpdateRecord', snapshot); }, deleteRecord: function(store, type, snapshot) { - return write(this, store.serializerFor(type.modelName), this.client, 'DeleteRecord', snapshot); + return write(this, type.modelName, 'DeleteRecord', snapshot); }, }); From 79156324bff0d06fe17400fa247609ad6cd180f6 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Mon, 10 Feb 2020 10:04:55 +0000 Subject: [PATCH 02/83] ui: Test Coverage Reporting (#7027) * Serve up the /coverage folder whilst developing * Upgrade ember-cli-api-double now it supports passthrough per url --- .circleci/config.yml | 20 ++++++++ codecov.yml | 6 ++- ui-v2/GNUmakefile | 11 +++++ ui-v2/config/environment.js | 8 +++- ui-v2/lib/startup/index.js | 5 ++ ui-v2/package.json | 7 +-- ui-v2/tests/helpers/api.js | 5 +- ui-v2/yarn.lock | 91 +++++++++++++++++++++++++++---------- 8 files changed, 120 insertions(+), 33 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0d1ed3f2d6..03dda53d28 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -489,6 +489,23 @@ jobs: command: make test-ci - store_test_results: path: ui-v2/test-results + # run ember frontend unit tests to produce coverage report + ember-coverage: + docker: + - image: *EMBER_IMAGE + steps: + - checkout + - restore_cache: + key: *YARN_CACHE_KEY + - attach_workspace: + at: ui-v2 + - run: + working_directory: ui-v2 + command: make test-coverage + - run: + name: codecov ui upload + working_directory: ui-v2 + command: bash <(curl -s https://codecov.io/bash) -v -c -C $CIRCLE_SHA1 -F ui envoy-integration-test-1.11.2: docker: @@ -682,6 +699,9 @@ workflows: - ember-test-ent: requires: - ember-build + - ember-coverage: + requires: + - ember-build cherry-pick: jobs: - cherry-picker: diff --git a/codecov.yml b/codecov.yml index 9bb643f3ae..1839b76dca 100644 --- a/codecov.yml +++ b/codecov.yml @@ -10,6 +10,8 @@ coverage: # https://docs.codecov.io/docs/commit-status#section-excluding-tests-example- # TODO: should any paths be excluded from coverage metrics? # paths: + ui: + informational: true # https://docs.codecov.io/docs/commit-status#section-changes-status # TODO: enable after eliminating current unexpected coverage changes? changes: off @@ -29,7 +31,9 @@ comment: false # https://docs.codecov.io/docs/flags # TODO: split out test coverage for API, SDK, UI, website? -# flags: +flags: + ui: + paths: /ui-v2/ ignore: - "agent/bindata_assetfs.go" diff --git a/ui-v2/GNUmakefile b/ui-v2/GNUmakefile index cfed057e4e..6236ecf99e 100644 --- a/ui-v2/GNUmakefile +++ b/ui-v2/GNUmakefile @@ -65,6 +65,17 @@ test-oss-ci: deps test-node test-node: yarn run test:node +# This seems to be the only way to only include a subset of files for coverage +# Right now we only want the /app/utils/ folder to be included for coverage +specify-coverage: + sed -i "s/exclude, include/include: ['consul-ui\/utils\/**\/*','consul-ui\/search\/**\/*']/g" ./node_modules/ember-cli-code-coverage/index.js + +test-coverage: deps specify-coverage + yarn run test:coverage + +test-view-coverage: deps specify-coverage + yarn run test:view:coverage + test-parallel: deps yarn run test:parallel diff --git a/ui-v2/config/environment.js b/ui-v2/config/environment.js index 6a11c7de65..bb8b92b768 100644 --- a/ui-v2/config/environment.js +++ b/ui-v2/config/environment.js @@ -90,7 +90,9 @@ module.exports = function(environment, $ = process.env) { '@hashicorp/ember-cli-api-double': { 'auto-import': false, enabled: true, - endpoints: ['/node_modules/@hashicorp/consul-api-double/v1'], + endpoints: { + '/v1': '/node_modules/@hashicorp/consul-api-double/v1', + }, }, APP: Object.assign({}, ENV.APP, { LOG_ACTIVE_GENERATION: false, @@ -106,7 +108,9 @@ module.exports = function(environment, $ = process.env) { CONSUL_NSPACES_ENABLED: true, '@hashicorp/ember-cli-api-double': { enabled: true, - endpoints: ['/node_modules/@hashicorp/consul-api-double/v1'], + endpoints: { + '/v1': '/node_modules/@hashicorp/consul-api-double/v1', + }, }, }); break; diff --git a/ui-v2/lib/startup/index.js b/ui-v2/lib/startup/index.js index 7b7487112d..2247f1f06b 100644 --- a/ui-v2/lib/startup/index.js +++ b/ui-v2/lib/startup/index.js @@ -11,10 +11,15 @@ const apiDouble = require('@hashicorp/api-double'); const apiDoubleHeaders = require('@hashicorp/api-double/lib/headers'); const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); + +const express = require('express'); // module.exports = { name: 'startup', serverMiddleware: function(server) { + // Serve the coverage folder for easy viewing during development + server.app.use('/coverage', express.static('coverage')); + // TODO: This should all be moved out into ember-cli-api-double // and we should figure out a way to get to the settings here for // so we can set this path name centrally in config diff --git a/ui-v2/package.json b/ui-v2/package.json index e396be2565..eb96e54d62 100644 --- a/ui-v2/package.json +++ b/ui-v2/package.json @@ -29,8 +29,8 @@ "test:view": "ember test --server --test-port=${EMBER_TEST_PORT:-7357}", "test:oss:view": "CONSUL_NSPACES_ENABLED=0 ember test --server --test-port=${EMBER_TEST_PORT:-7357}", "test:node": "tape ./node-tests/**/*.js", - "test:coverage": "COVERAGE=true ember test --test-port=${EMBER_TEST_PORT:-7357}", - "test:view:coverage": "COVERAGE=true ember test --server --test-port=${EMBER_TEST_PORT:-7357}", + "test:coverage": "COVERAGE=true ember test --environment test --filter=Unit --test-port=${EMBER_TEST_PORT:-7357}", + "test:view:coverage": "COVERAGE=true ember test --server --environment test --filter=Unit --test-port=${EMBER_TEST_PORT:-7357}", "steps:list": "node ./lib/commands/bin/list.js" }, "husky": { @@ -54,7 +54,7 @@ "@ember/jquery": "^0.6.0", "@ember/optional-features": "^0.7.0", "@hashicorp/consul-api-double": "^2.6.2", - "@hashicorp/ember-cli-api-double": "^2.0.0", + "@hashicorp/ember-cli-api-double": "^3.0.0", "base64-js": "^1.3.0", "broccoli-asset-rev": "^3.0.0", "chalk": "^2.4.2", @@ -111,6 +111,7 @@ "loader.js": "^4.7.0", "ngraph.graph": "^18.0.3", "node-sass": "^4.9.3", + "pretender": "^3.2.0", "prettier": "^1.10.2", "qunit-dom": "^0.9.0", "tape": "^4.13.0", diff --git a/ui-v2/tests/helpers/api.js b/ui-v2/tests/helpers/api.js index 00f33190b8..ff6bde5c47 100644 --- a/ui-v2/tests/helpers/api.js +++ b/ui-v2/tests/helpers/api.js @@ -5,10 +5,7 @@ import setCookies from 'consul-ui/tests/helpers/set-cookies'; import typeToURL from 'consul-ui/tests/helpers/type-to-url'; const addon = config['@hashicorp/ember-cli-api-double']; -const temp = addon.endpoints[0].split('/'); -temp.pop(); -const path = temp.join('/'); -const api = apiDouble(path, setCookies, typeToURL); +const api = apiDouble(addon, setCookies, typeToURL); export const get = function(_url, options = { headers: { cookie: {} } }) { const url = new URL(_url, 'http://localhost'); return new Promise(function(resolve) { diff --git a/ui-v2/yarn.lock b/ui-v2/yarn.lock index 2fd156a57c..99af72ba16 100644 --- a/ui-v2/yarn.lock +++ b/ui-v2/yarn.lock @@ -978,7 +978,7 @@ "@glimmer/interfaces" "^0.42.0" "@glimmer/util" "^0.42.0" -"@hashicorp/api-double@^1.3.0": +"@hashicorp/api-double@^1.6.1": version "1.6.1" resolved "https://registry.yarnpkg.com/@hashicorp/api-double/-/api-double-1.6.1.tgz#67c4c4c5cbf9f51f3b8bc992ab2df21acf63b318" integrity sha512-JkQZIsH/2B9T2oK5SQNDakvqlHjxQHu0I9ftmmrxqkxYvYoLN+Whp7dzQ8HswOp1vIJyqbvUhSw06XfH/eimZA== @@ -996,19 +996,19 @@ resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-2.12.0.tgz#725078f770bbd0ef75a5f2498968c5c8891f90a2" integrity sha512-8OcgesUjWQ8AjaXzbz3tGJQn1kM0sN6pLidGM7isNPUyYmIjIEXQzaeUQYzsfv0N2Ko9ZuOXYUsaBl8IK1KGow== -"@hashicorp/ember-cli-api-double@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-2.0.0.tgz#259b13c89150b852f2ebe3b7c182dd16d3ee4c42" - integrity sha512-ZQ+0exG43jnuxEg5dkPkdsaRPX3je5AU+0KQUOmIug6KQ21nSw3KXmMj9+z6dGymdYBaiXaMY2WNTtj+r1Ajuw== +"@hashicorp/ember-cli-api-double@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-3.0.0.tgz#2a9e8e475c8ac9780221f46584297640870f9f1c" + integrity sha512-3jpkkB0jsVWbpI3ySsBJ5jmSb1bPkJu8nZTh9YvIiQDhH76zqHY7AXi35oSV4M83f5qYtBLJjDSdwrf0zJ9Dlg== dependencies: - "@hashicorp/api-double" "^1.3.0" + "@hashicorp/api-double" "^1.6.1" array-range "^1.0.1" broccoli-file-creator "^2.1.1" broccoli-merge-trees "^3.0.2" - ember-auto-import "^1.4.0" + ember-auto-import "^1.5.3" ember-cli-babel "^6.6.0" merge-options "^1.0.1" - pretender "^2.0.0" + pretender "^3.2.0" recursive-readdir-sync "^1.0.6" "@mrmlnc/readdir-enhanced@^2.2.1": @@ -1273,11 +1273,6 @@ "@webassemblyjs/wast-parser" "1.7.11" "@xtuc/long" "4.2.1" -"@xg-wang/whatwg-fetch@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@xg-wang/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#f7b222c012a238e7d6e89ed3d72a1e0edb58453d" - integrity sha512-ULtqA6L75RLzTNW68IiOja0XYv4Ebc3OGMzfia1xxSEMpD0mk/pMvkQX0vbCFyQmKc5xGp80Ms2WiSlXLh8hbA== - "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -4390,6 +4385,40 @@ ember-auto-import@^1.2.13, ember-auto-import@^1.4.0: walk-sync "^0.3.3" webpack "~4.28" +ember-auto-import@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.5.3.tgz#b32936f874d1ed7057ad2ed3f6116357820be44b" + integrity sha512-7JfdunM1BmLy/lyUXu7uEoi0Gi4+dxkGM23FgIEyW5g7z4MidhP53Fc61t49oPSnq7+J4lLpbH1f6C+mDMgb4A== + dependencies: + "@babel/core" "^7.1.6" + "@babel/preset-env" "^7.0.0" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.1.6" + "@embroider/core" "^0.4.3" + babel-core "^6.26.3" + babel-loader "^8.0.6" + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-template "^6.26.0" + babylon "^6.18.0" + broccoli-debug "^0.6.4" + broccoli-plugin "^1.3.0" + debug "^3.1.0" + ember-cli-babel "^6.6.0" + enhanced-resolve "^4.0.0" + fs-extra "^6.0.1" + fs-tree-diff "^1.0.0" + handlebars "^4.3.1" + js-string-escape "^1.0.1" + lodash "^4.17.10" + mkdirp "^0.5.1" + pkg-up "^2.0.0" + resolve "^1.7.1" + rimraf "^2.6.2" + symlink-or-copy "^1.2.0" + typescript-memoize "^1.0.0-alpha.3" + walk-sync "^0.3.3" + webpack "~4.28" + ember-basic-dropdown@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-1.1.3.tgz#0506045ccc60db4972fc78b963c1324f6415818a" @@ -5781,10 +5810,10 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fake-xml-http-request@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fake-xml-http-request/-/fake-xml-http-request-2.0.1.tgz#e4a7f256af055d8059deb23c9d7ae721d28cf078" - integrity sha512-KzT+G4aLM1Btg25QRGxB6yGLGOVZXXzrH8I4OG3KHwsdoqFclyW3alieqh5NaYGcmbQvNOn/ldGO1rGKf7CNdA== +fake-xml-http-request@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fake-xml-http-request/-/fake-xml-http-request-2.1.1.tgz#279fdac235840d7a4dff77d98ec44bce9fc690a6" + integrity sha512-Kn2WYYS6cDBS5jq/voOfSGCA0TafOYAUPbEp8mUVpD/DVV5bQIDjlq+MLLvNUokkbTpjBVlLDaM5PnX+PwZMlw== faker@^4.1.0: version "4.1.0" @@ -6529,6 +6558,17 @@ handlebars@^4.0.11, handlebars@^4.0.13, handlebars@^4.0.4, handlebars@^4.1.2: optionalDependencies: uglify-js "^3.1.4" +handlebars@^4.3.1: + version "4.7.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.2.tgz#01127b3840156a0927058779482031afe0e730d7" + integrity sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + handlebars@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" @@ -9447,14 +9487,14 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= -pretender@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretender/-/pretender-2.1.2.tgz#02d7c0a3f18cb0ce376dfc4fb0043ca288f50316" - integrity sha512-5Jx7kBalWDn8oEKfw6nAcx2KK4GkDSQXG3WhgaPsDtak6Rv6nTeQjOdvOM9PEvauS+9Ur+DLfZTDWBtqK6lFVA== +pretender@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/pretender/-/pretender-3.2.0.tgz#3e653009462f737c1184ca8b7b8d2f03cf47421b" + integrity sha512-YnqYFZ9JKcpseQnYE5iR1y1gBATtJTXzI/SXtTFt4mvXabg6U4AIzvNzJok9IhxP5lIyQ9OeWCsg2DkjhQJSKg== dependencies: - "@xg-wang/whatwg-fetch" "^3.0.0" - fake-xml-http-request "~2.0.0" + fake-xml-http-request "^2.1.1" route-recognizer "^0.3.3" + whatwg-fetch "^3.0.0" prettier@^1.10.2: version "1.18.2" @@ -11805,6 +11845,11 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" +whatwg-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" From ab8d3181816ea5c1db57cf6bee3dfe2b806b21c2 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Mon, 10 Feb 2020 10:23:31 +0000 Subject: [PATCH 03/83] ui: Use the dart-sass implementation of sass (#7175) --- ui-v2/ember-cli-build.js | 2 +- ui-v2/package.json | 1 + ui-v2/yarn.lock | 102 ++++++++++++++++++++++++++++++++------- 3 files changed, 86 insertions(+), 19 deletions(-) diff --git a/ui-v2/ember-cli-build.js b/ui-v2/ember-cli-build.js index 05f076649e..6e68927d62 100644 --- a/ui-v2/ember-cli-build.js +++ b/ui-v2/ember-cli-build.js @@ -48,7 +48,7 @@ module.exports = function(defaults) { }, }, 'sassOptions': { - implementation: require('node-sass'), + implementation: require('dart-sass'), sourceMapEmbed: sourcemaps, }, 'autoprefixer': { diff --git a/ui-v2/package.json b/ui-v2/package.json index eb96e54d62..214e0f4ba0 100644 --- a/ui-v2/package.json +++ b/ui-v2/package.json @@ -60,6 +60,7 @@ "chalk": "^2.4.2", "clipboard": "^2.0.4", "css.escape": "^1.5.1", + "dart-sass": "^1.25.0", "ember-auto-import": "^1.4.0", "ember-changeset-validations": "^2.1.0", "ember-cli": "~3.12.0", diff --git a/ui-v2/yarn.lock b/ui-v2/yarn.lock index 99af72ba16..8eb4227eaa 100644 --- a/ui-v2/yarn.lock +++ b/ui-v2/yarn.lock @@ -1466,6 +1466,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aot-test-generators@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/aot-test-generators/-/aot-test-generators-0.1.0.tgz#43f0f615f97cb298d7919c1b0b4e6b7310b03cd0" @@ -2413,6 +2421,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + "binaryextensions@1 || 2": version "2.2.0" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.2.0.tgz#e7c6ba82d4f5f5758c26078fe8eea28881233311" @@ -2511,7 +2524,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3415,6 +3428,21 @@ charm@^1.0.0: dependencies: inherits "^2.0.1" +"chokidar@>=2.0.0 <4.0.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" + optionalDependencies: + fsevents "~2.1.2" + chokidar@^2.0.2: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -4001,6 +4029,13 @@ dag-map@^2.0.2: resolved "https://registry.yarnpkg.com/dag-map/-/dag-map-2.0.2.tgz#9714b472de82a1843de2fba9b6876938cab44c68" integrity sha1-lxS0ct6CoYQ94vuptodpOMq0TGg= +dart-sass@^1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/dart-sass/-/dart-sass-1.25.0.tgz#e00c0348118916e9d81cb485297184c131af1dad" + integrity sha512-syNOAstJXAmvD3RifcDk3fiPMyYE2fY8so6w9gf2/wNlKpG0zyH+oiXubEYVOy1WAWkzOc72pbAxwx+3OU4JJA== + dependencies: + chokidar ">=2.0.0 <4.0.0" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -6266,6 +6301,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +fsevents@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + fstream@^1.0.0, fstream@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" @@ -6395,6 +6435,13 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" +glob-parent@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -6411,10 +6458,10 @@ glob@^5.0.10: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.1.2, glob@^7.1.4, glob@~7.1.1: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== +glob@^7.0.0, glob@^7.1.3, glob@~7.1.1, glob@~7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -6423,10 +6470,10 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.1.2, glob@^7.1.4, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3, glob@~7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^7.0.3, glob@^7.0.4, glob@^7.1.2, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -6494,9 +6541,9 @@ globby@^9.0.0: slash "^2.0.0" globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.0.tgz#41d0e9fb44afd4b80d93a23263714f90b3dec904" + integrity sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg== dependencies: glob "~7.1.1" lodash "~4.17.10" @@ -7106,6 +7153,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -7223,7 +7277,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -8746,9 +8800,9 @@ node-releases@^1.1.29: semver "^5.3.0" node-sass@^4.9.3: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== + version "4.13.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" + integrity sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -8757,7 +8811,7 @@ node-sass@^4.9.3: get-stdin "^4.0.1" glob "^7.0.3" in-publish "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.15" meow "^3.7.0" mkdirp "^0.5.1" nan "^2.13.2" @@ -8813,7 +8867,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -9384,6 +9438,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" + integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== + picomatch@^2.0.5: version "2.0.7" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" @@ -9824,6 +9883,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== + dependencies: + picomatch "^2.0.7" + recast@^0.11.3: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" From 48a52e07da7e94daf1ab61eb6c2aff99faea443e Mon Sep 17 00:00:00 2001 From: Alvin Huang <17609145+alvin-huang@users.noreply.github.com> Date: Mon, 10 Feb 2020 08:41:02 -0500 Subject: [PATCH 04/83] fix ember parallelization (#7221) --- .circleci/config.yml | 9 +++++++-- ui-v2/tests/test-helper.js | 4 +--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 03dda53d28..ddb106030e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -461,6 +461,9 @@ jobs: - image: *EMBER_IMAGE environment: EMBER_TEST_REPORT: test-results/report-oss.xml #outputs test report for CircleCI test summary + EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam + CONSUL_NSPACES_ENABLED: 0 + parallelism: 2 steps: - checkout - restore_cache: @@ -469,7 +472,7 @@ jobs: at: ui-v2 - run: working_directory: ui-v2 - command: make test-oss-ci + command: node_modules/ember-cli/bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit - store_test_results: path: ui-v2/test-results # run ember frontend tests @@ -478,6 +481,8 @@ jobs: - image: *EMBER_IMAGE environment: EMBER_TEST_REPORT: test-results/report-ent.xml #outputs test report for CircleCI test summary + EMBER_TEST_PARALLEL: true #enables test parallelization with ember-exam + parallelism: 2 steps: - checkout - restore_cache: @@ -486,7 +491,7 @@ jobs: at: ui-v2 - run: working_directory: ui-v2 - command: make test-ci + command: node_modules/ember-cli/bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit - store_test_results: path: ui-v2/test-results # run ember frontend unit tests to produce coverage report diff --git a/ui-v2/tests/test-helper.js b/ui-v2/tests/test-helper.js index c4f73d51a9..d80cf99f3d 100644 --- a/ui-v2/tests/test-helper.js +++ b/ui-v2/tests/test-helper.js @@ -1,11 +1,9 @@ import Application from '../app'; import config from '../config/environment'; import { setApplication } from '@ember/test-helpers'; -import { start } from 'ember-qunit'; import './helpers/flash-message'; -import loadEmberExam from 'ember-exam/test-support/load'; +import start from 'ember-exam/test-support/start'; -loadEmberExam(); const application = Application.create(config.APP); application.inject('component:copy-button', 'clipboard', 'service:clipboard/local-storage'); setApplication(application); From 662c28307cb23df45db70d5b4b6d323d8959ec1e Mon Sep 17 00:00:00 2001 From: John Cowen Date: Mon, 10 Feb 2020 14:29:13 +0000 Subject: [PATCH 05/83] ui: Upgrade to node 12 LTS (#7248) Upgrading our build tooling to use the latest node LTS and the lastest/current Alpine version in our container --- build-support/docker/Build-UI.dockerfile | 4 ++-- ui-v2/.nvmrc | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build-support/docker/Build-UI.dockerfile b/build-support/docker/Build-UI.dockerfile index 642ad13ca8..dc0532e4e2 100644 --- a/build-support/docker/Build-UI.dockerfile +++ b/build-support/docker/Build-UI.dockerfile @@ -1,7 +1,7 @@ -ARG ALPINE_VERSION=3.9 +ARG ALPINE_VERSION=3.11 FROM alpine:${ALPINE_VERSION} -ARG NODEJS_VERSION=10.14.2-r0 +ARG NODEJS_VERSION=12.15.0-r1 ARG MAKE_VERSION=4.2.1-r2 ARG YARN_VERSION=1.19.1 diff --git a/ui-v2/.nvmrc b/ui-v2/.nvmrc index f599e28b8a..48082f72f0 100644 --- a/ui-v2/.nvmrc +++ b/ui-v2/.nvmrc @@ -1 +1 @@ -10 +12 From b6915793d0c8ca31cecf6dbc6f9d6411558b94ae Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 11 Feb 2020 10:04:49 +0000 Subject: [PATCH 06/83] ui: Remove custom css-vars 'polyfill' and use native CSS props (#7249) * ui: Remove custom css-vars 'polyfill' and use native CSS props Previously we used a sort of polyfill for certain places where we needed CSS property-like behavior. This meant duplicating code between JS and CSS, specifically some of our SVG icons. We moved to CSS props only in the places where they are beneficial and populated the variables with our already existing SASS variables. This means we no longer have to duplicate CSS and we can remove our custom css-var helper/polyfill. --- ui-v2/app/helpers/css-var.js | 19 --------------- ui-v2/app/helpers/service/external-source.js | 2 +- .../app/styles/base/icons/base-variables.scss | 1 + .../app/styles/components/app-view/skin.scss | 6 +++++ ui-v2/app/styles/variables/index.scss | 11 +++++++++ .../templates/components/discovery-chain.hbs | 8 +++---- ui-v2/app/templates/dc/nodes/-services.hbs | 8 ++++++- .../app/templates/dc/services/-instances.hbs | 14 +++++++---- ui-v2/app/templates/dc/services/index.hbs | 8 ++++++- ui-v2/app/templates/dc/services/instance.hbs | 10 ++++---- ui-v2/app/templates/dc/services/show.hbs | 12 ++++------ .../tests/integration/helpers/css-var-test.js | 24 ------------------- 12 files changed, 56 insertions(+), 67 deletions(-) delete mode 100644 ui-v2/app/helpers/css-var.js delete mode 100644 ui-v2/tests/integration/helpers/css-var-test.js diff --git a/ui-v2/app/helpers/css-var.js b/ui-v2/app/helpers/css-var.js deleted file mode 100644 index 480abba38f..0000000000 --- a/ui-v2/app/helpers/css-var.js +++ /dev/null @@ -1,19 +0,0 @@ -import { helper } from '@ember/component/helper'; -// TODO: Look at ember-inline-svg -const cssVars = { - '--decor-border-100': '1px solid', - '--decor-border-200': '2px solid', - '--decor-radius-300': '3px', - '--white': '#FFF', - '--gray-500': '#6f7682', - '--kubernetes-color-svg': `url('data:image/svg+xml;charset=UTF-8,')`, - '--terraform-color-svg': `url('data:image/svg+xml;charset=UTF-8,')`, - '--nomad-color-svg': `url('data:image/svg+xml;charset=UTF-8,')`, - '--consul-color-svg': `url('data:image/svg+xml;charset=UTF-8,')`, - '--aws-color-svg': `url('data:image/svg+xml;charset=UTF-8,')`, -}; -export function cssVar(params, hash) { - return typeof cssVars[params[0]] !== 'undefined' ? cssVars[params[0]] : params[1]; -} - -export default helper(cssVar); diff --git a/ui-v2/app/helpers/service/external-source.js b/ui-v2/app/helpers/service/external-source.js index 32cc4f3dd0..44d8107c88 100644 --- a/ui-v2/app/helpers/service/external-source.js +++ b/ui-v2/app/helpers/service/external-source.js @@ -7,7 +7,7 @@ export function serviceExternalSource(params, hash) { source = get(params[0], 'Meta.external-source'); } const prefix = typeof hash.prefix === 'undefined' ? '' : hash.prefix; - if (source) { + if (source && ['kubernetes', 'terraform', 'nomad', 'consul', 'aws'].includes(source)) { return `${prefix}${source}`; } return; diff --git a/ui-v2/app/styles/base/icons/base-variables.scss b/ui-v2/app/styles/base/icons/base-variables.scss index 400fefb7e9..f4666044f7 100644 --- a/ui-v2/app/styles/base/icons/base-variables.scss +++ b/ui-v2/app/styles/base/icons/base-variables.scss @@ -7,6 +7,7 @@ $arrow-left-svg: url('data:image/svg+xml;charset=UTF-8,'); $arrow-right-svg: url('data:image/svg+xml;charset=UTF-8,'); $arrow-up-svg: url('data:image/svg+xml;charset=UTF-8,'); +$aws-logo-color-svg: url('data:image/svg+xml;charset=UTF-8,'); $calendar-svg: url('data:image/svg+xml;charset=UTF-8,'); $cancel-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); $cancel-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); diff --git a/ui-v2/app/styles/components/app-view/skin.scss b/ui-v2/app/styles/components/app-view/skin.scss index 511d08cf13..e8ba60393a 100644 --- a/ui-v2/app/styles/components/app-view/skin.scss +++ b/ui-v2/app/styles/components/app-view/skin.scss @@ -4,6 +4,12 @@ background-size: contain; width: 18px; height: 18px; + + --kubernetes-icon: #{$kubernetes-logo-color-svg}; + --terraform-icon: #{$terraform-logo-color-svg}; + --nomad-icon: #{$nomad-logo-color-svg}; + --consul-icon: #{$consul-logo-color-svg}; + --aws-icon: #{$aws-logo-color-svg}; } %app-view h2, %app-view fieldset { diff --git a/ui-v2/app/styles/variables/index.scss b/ui-v2/app/styles/variables/index.scss index a06fe64e82..eb90ae130c 100644 --- a/ui-v2/app/styles/variables/index.scss +++ b/ui-v2/app/styles/variables/index.scss @@ -1,4 +1,15 @@ @import './custom-query'; + +// TODO: Setup only the CSS props we actually need here +// potentially see if our compiled can automatically remove +// unused CSS props +:root { + --white: #{$white}; + --decor-border-100: #{$decor-border-100}; + --decor-radius-300: #{$decor-radius-300}; + --gray-500: #{$gray-500}; +} + $gray: $gray-200; $gray-025: #fafbfc; diff --git a/ui-v2/app/templates/components/discovery-chain.hbs b/ui-v2/app/templates/components/discovery-chain.hbs index 9a8f4f3597..4d4682b46b 100644 --- a/ui-v2/app/templates/components/discovery-chain.hbs +++ b/ui-v2/app/templates/components/discovery-chain.hbs @@ -4,10 +4,10 @@ {{selected.nodes}} { opacity: 1 !important; - background-color: {{css-var '--white'}}; - border: {{css-var '--decor-border-100'}}; - border-radius: {{css-var '--decor-radius-300'}}; - border-color: {{css-var '--gray-500'}}; + background-color: var(--white); + border: var(--decor-border-100); + border-radius: var(--decor-radius-300); + border-color: var(--gray-500); box-shadow: 0 8px 10px 0 rgba(0, 0, 0, 0.1); } {{/if}} diff --git a/ui-v2/app/templates/dc/nodes/-services.hbs b/ui-v2/app/templates/dc/nodes/-services.hbs index f53bb7fc97..11d67c765a 100644 --- a/ui-v2/app/templates/dc/nodes/-services.hbs +++ b/ui-v2/app/templates/dc/nodes/-services.hbs @@ -18,7 +18,13 @@ {{#block-slot name='row'}} - + {{#let (service/external-source item) as |externalSource| }} + {{#if externalSource }} + + {{else}} + + {{/if}} + {{/let}} {{item.Service}}{{#if (not-eq item.ID item.Service) }} ({{item.ID}}){{/if}} diff --git a/ui-v2/app/templates/dc/services/-instances.hbs b/ui-v2/app/templates/dc/services/-instances.hbs index d0ca30a9a3..83faba5570 100644 --- a/ui-v2/app/templates/dc/services/-instances.hbs +++ b/ui-v2/app/templates/dc/services/-instances.hbs @@ -18,10 +18,16 @@ Service Checks {{/block-slot}} {{#block-slot name='row'}} - - - - {{ or item.Service.ID item.Service.Service }} + + + {{#let (service/external-source item.Service) as |externalSource| }} + {{#if externalSource }} + + {{else}} + + {{/if}} + {{/let}} + {{or item.Service.ID item.Service.Service}} diff --git a/ui-v2/app/templates/dc/services/index.hbs b/ui-v2/app/templates/dc/services/index.hbs index 1484086167..348b6cd00d 100644 --- a/ui-v2/app/templates/dc/services/index.hbs +++ b/ui-v2/app/templates/dc/services/index.hbs @@ -35,7 +35,13 @@ {{#block-slot name='row'}} - + {{#let (service/external-source item) as |externalSource| }} + {{#if externalSource }} + + {{else}} + + {{/if}} + {{/let}} {{item.Name}} diff --git a/ui-v2/app/templates/dc/services/instance.hbs b/ui-v2/app/templates/dc/services/instance.hbs index aad4f7b2cd..f80daa8391 100644 --- a/ui-v2/app/templates/dc/services/instance.hbs +++ b/ui-v2/app/templates/dc/services/instance.hbs @@ -13,13 +13,11 @@ {{#block-slot name='header'}}

{{ item.ID }} -{{#with (service/external-source item) as |externalSource| }} - {{#with (css-var (concat '--' externalSource '-color-svg') 'none') as |bg| }} - {{#if (not-eq bg 'none') }} - Registered via {{externalSource}} +{{#let (service/external-source item) as |externalSource| }} + {{#if externalSource }} + Registered via {{externalSource}} {{/if}} - {{/with}} -{{/with}} +{{/let}} {{#if (eq item.Kind 'connect-proxy')}} Proxy {{else if (eq item.Kind 'mesh-gateway')}} diff --git a/ui-v2/app/templates/dc/services/show.hbs b/ui-v2/app/templates/dc/services/show.hbs index 846c56f783..f1b1324e40 100644 --- a/ui-v2/app/templates/dc/services/show.hbs +++ b/ui-v2/app/templates/dc/services/show.hbs @@ -11,13 +11,11 @@ {{#block-slot name='header'}}

{{item.Service.Service}} -{{#with (service/external-source item.Service) as |externalSource|}} -{{#with (css-var (concat '--' externalSource '-color-svg') 'none') as |bg|}} - {{#if (not-eq bg 'none')}} - Registered via {{externalSource}} - {{/if}} -{{/with}} -{{/with}} +{{#let (service/external-source item.Service) as |externalSource| }} + {{#if externalSource }} + Registered via {{externalSource}} + {{/if}} +{{/let}} {{#if (eq item.Service.Kind 'connect-proxy')}} Proxy {{else if (eq item.Service.Kind 'mesh-gateway')}} diff --git a/ui-v2/tests/integration/helpers/css-var-test.js b/ui-v2/tests/integration/helpers/css-var-test.js deleted file mode 100644 index 12b4f1f91e..0000000000 --- a/ui-v2/tests/integration/helpers/css-var-test.js +++ /dev/null @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('helper:css-var', function(hooks) { - setupRenderingTest(hooks); - - // Replace this with your real tests. - test("it renders nothing if the variable doesn't exist", async function(assert) { - this.set('inputValue', '1234'); - - await render(hbs`{{css-var inputValue}}`); - - assert.dom('*').hasText(''); - }); - test("it renders a default if the variable doesn't exist", async function(assert) { - this.set('inputValue', '1234'); - - await render(hbs`{{css-var inputValue 'none'}}`); - - assert.dom('*').hasText('none'); - }); -}); From 7dc5201676b87ca7f8f849ff1fe1bdd0094549f8 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Wed, 12 Feb 2020 13:49:47 +0000 Subject: [PATCH 07/83] ui: Remove `next` from usage from discovery-chain component (#7273) In a previous iteration of discovery-chain wrapping some event listeners in a call to `next` (i.e. do this on next tick) was necessary. We added a comment in here to see if we could get rid of it at a later date. We've taken another look at this and it looks like this `next` is no longer required in this later iteration. Further more there is the tiniest chance that possibly, as we are adding listeners on next tick, that the listeners could be added after component destruction, which means when you click on the page we try to set a property of a destroyed object and boom. Removing this `next` removes this tiny possibility. --- ui-v2/app/components/discovery-chain.js | 34 +++++++++++-------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/ui-v2/app/components/discovery-chain.js b/ui-v2/app/components/discovery-chain.js index c708ffa27f..5d3110dd71 100644 --- a/ui-v2/app/components/discovery-chain.js +++ b/ui-v2/app/components/discovery-chain.js @@ -1,7 +1,6 @@ import Component from '@ember/component'; import { inject as service } from '@ember/service'; import { set, get, computed } from '@ember/object'; -import { next } from '@ember/runloop'; import { createRoute, @@ -147,24 +146,21 @@ export default Component.extend({ // the developer access to the mouse event therefore we just use JS to add our events // revisit this post Octane addPathListeners: function() { - // TODO: Figure out if we can remove this next - next(() => { - this._listeners.remove(); - this._listeners.add(this.dom.document(), { - click: e => { - // all route/splitter/resolver components currently - // have classes that end in '-card' - if (!this.dom.closest('[class$="-card"]', e.target)) { - set(this, 'active', false); - set(this, 'selectedId', ''); - } - }, - }); - [...this.dom.elements('path.split', this.element)].forEach(item => { - this._listeners.add(item, { - mouseover: e => this.actions.showSplit.apply(this, [e]), - mouseout: e => this.actions.hideSplit.apply(this, [e]), - }); + this._listeners.remove(); + this._listeners.add(this.dom.document(), { + click: e => { + // all route/splitter/resolver components currently + // have classes that end in '-card' + if (!this.dom.closest('[class$="-card"]', e.target)) { + set(this, 'active', false); + set(this, 'selectedId', ''); + } + }, + }); + [...this.dom.elements('path.split', this.element)].forEach(item => { + this._listeners.add(item, { + mouseover: e => this.actions.showSplit.apply(this, [e]), + mouseout: e => this.actions.hideSplit.apply(this, [e]), }); }); // TODO: currently don't think there is a way to listen From 771973a7133791cd6bc35cd47fbc4b7d38b625a0 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Wed, 12 Feb 2020 17:46:29 +0000 Subject: [PATCH 08/83] ui: Add consul-service-list presentational component (#7279) This commit moves our service list into a new presentational component, and is therefore mainly just moving things around. The main thing moved here is the logic required to resizing columns correctly is now moved to a component instead of the controller --- ui-v2/app/components/consul-service-list.js | 65 +++++++++++++++++++ ui-v2/app/controllers/dc/services/index.js | 58 ----------------- .../components/consul-service-list.hbs | 37 +++++++++++ ui-v2/app/templates/dc/services/index.hbs | 35 +--------- .../components/consul-service-list-test.js | 24 +++++++ 5 files changed, 127 insertions(+), 92 deletions(-) create mode 100644 ui-v2/app/components/consul-service-list.js create mode 100644 ui-v2/app/templates/components/consul-service-list.hbs create mode 100644 ui-v2/tests/integration/components/consul-service-list-test.js diff --git a/ui-v2/app/components/consul-service-list.js b/ui-v2/app/components/consul-service-list.js new file mode 100644 index 0000000000..98d3278c4d --- /dev/null +++ b/ui-v2/app/components/consul-service-list.js @@ -0,0 +1,65 @@ +import Component from '@ember/component'; +import { get, computed } from '@ember/object'; +import { htmlSafe } from '@ember/string'; + +const max = function(arr, prop) { + return arr.reduce(function(prev, item) { + return Math.max(prev, get(item, prop)); + }, 0); +}; +const chunk = function(str, size) { + const num = Math.ceil(str.length / size); + const chunks = new Array(num); + for (let i = 0, o = 0; i < num; ++i, o += size) { + chunks[i] = str.substr(o, size); + } + return chunks; +}; +const width = function(num) { + const str = num.toString(); + const len = str.length; + const commas = chunk(str, 3).length - 1; + return commas * 4 + len * 10; +}; +const widthDeclaration = function(num) { + return htmlSafe(`width: ${num}px`); +}; +export default Component.extend({ + tagName: '', + onchange: function() {}, + maxWidth: computed('{maxPassing,maxWarning,maxCritical}', function() { + const PADDING = 32 * 3 + 13; + return ['maxPassing', 'maxWarning', 'maxCritical'].reduce((prev, item) => { + return prev + width(get(this, item)); + }, PADDING); + }), + totalWidth: computed('maxWidth', function() { + return widthDeclaration(get(this, 'maxWidth')); + }), + remainingWidth: computed('maxWidth', function() { + // maxWidth is the maximum width of the healthchecks column + // there are currently 2 other columns so divide it by 2 and + // take that off 50% (100% / number of fluid columns) + // also we added a Type column which we've currently fixed to 100px + // so again divide that by 2 and take it off each fluid column + return htmlSafe(`width: calc(50% - 50px - ${Math.round(get(this, 'maxWidth') / 2)}px)`); + }), + maxPassing: computed('items.[]', function() { + return max(get(this, 'items'), 'ChecksPassing'); + }), + maxWarning: computed('items.[]', function() { + return max(get(this, 'items'), 'ChecksWarning'); + }), + maxCritical: computed('items.[]', function() { + return max(get(this, 'items'), 'ChecksCritical'); + }), + passingWidth: computed('maxPassing', function() { + return widthDeclaration(width(get(this, 'maxPassing'))); + }), + warningWidth: computed('maxWarning', function() { + return widthDeclaration(width(get(this, 'maxWarning'))); + }), + criticalWidth: computed('maxCritical', function() { + return widthDeclaration(width(get(this, 'maxCritical'))); + }), +}); diff --git a/ui-v2/app/controllers/dc/services/index.js b/ui-v2/app/controllers/dc/services/index.js index 58c92d465c..aa8eeafb76 100644 --- a/ui-v2/app/controllers/dc/services/index.js +++ b/ui-v2/app/controllers/dc/services/index.js @@ -1,30 +1,7 @@ import Controller from '@ember/controller'; import { get, computed } from '@ember/object'; -import { htmlSafe } from '@ember/string'; import WithEventSource from 'consul-ui/mixins/with-event-source'; import WithSearching from 'consul-ui/mixins/with-searching'; -const max = function(arr, prop) { - return arr.reduce(function(prev, item) { - return Math.max(prev, get(item, prop)); - }, 0); -}; -const chunk = function(str, size) { - const num = Math.ceil(str.length / size); - const chunks = new Array(num); - for (let i = 0, o = 0; i < num; ++i, o += size) { - chunks[i] = str.substr(o, size); - } - return chunks; -}; -const width = function(num) { - const str = num.toString(); - const len = str.length; - const commas = chunk(str, 3).length - 1; - return commas * 4 + len * 10; -}; -const widthDeclaration = function(num) { - return htmlSafe(`width: ${num}px`); -}; export default Controller.extend(WithEventSource, WithSearching, { queryParams: { s: { @@ -42,39 +19,4 @@ export default Controller.extend(WithEventSource, WithSearching, { .add(this.items) .search(this.terms); }), - maxWidth: computed('{maxPassing,maxWarning,maxCritical}', function() { - const PADDING = 32 * 3 + 13; - return ['maxPassing', 'maxWarning', 'maxCritical'].reduce((prev, item) => { - return prev + width(get(this, item)); - }, PADDING); - }), - totalWidth: computed('maxWidth', function() { - return widthDeclaration(this.maxWidth); - }), - remainingWidth: computed('maxWidth', function() { - // maxWidth is the maximum width of the healthchecks column - // there are currently 2 other columns so divide it by 2 and - // take that off 50% (100% / number of fluid columns) - // also we added a Type column which we've currently fixed to 100px - // so again divide that by 2 and take it off each fluid column - return htmlSafe(`width: calc(50% - ${Math.round(this.maxWidth / 2)}px)`); - }), - maxPassing: computed('items.[]', function() { - return max(this.items, 'ChecksPassing'); - }), - maxWarning: computed('items.[]', function() { - return max(this.items, 'ChecksWarning'); - }), - maxCritical: computed('items.[]', function() { - return max(this.items, 'ChecksCritical'); - }), - passingWidth: computed('maxPassing', function() { - return widthDeclaration(width(this.maxPassing)); - }), - warningWidth: computed('maxWarning', function() { - return widthDeclaration(width(this.maxWarning)); - }), - criticalWidth: computed('maxCritical', function() { - return widthDeclaration(width(this.maxCritical)); - }), }); diff --git a/ui-v2/app/templates/components/consul-service-list.hbs b/ui-v2/app/templates/components/consul-service-list.hbs new file mode 100644 index 0000000000..2e1ef136de --- /dev/null +++ b/ui-v2/app/templates/components/consul-service-list.hbs @@ -0,0 +1,37 @@ +{{#if (gt items.length 0)}} + {{#tabular-collection items=items as |item index|}} + {{#block-slot name='header'}} + Service + + Health Checks + + The number of health checks for the service on all nodes + + + Tags + {{/block-slot}} + {{#block-slot name='row'}} + + + {{#let (service/external-source item) as |externalSource| }} + {{#if externalSource }} + + {{else}} + + {{/if}} + {{/let}} + {{item.Name}} + + + + {{healthcheck-info + passing=item.ChecksPassing warning=item.ChecksWarning critical=item.ChecksCritical + passingWidth=passingWidth warningWidth=warningWidth criticalWidth=criticalWidth + }} + + + {{tag-list items=item.Tags}} + + {{/block-slot}} + {{/tabular-collection}} +{{/if}} \ No newline at end of file diff --git a/ui-v2/app/templates/dc/services/index.hbs b/ui-v2/app/templates/dc/services/index.hbs index 348b6cd00d..cbc8ac365b 100644 --- a/ui-v2/app/templates/dc/services/index.hbs +++ b/ui-v2/app/templates/dc/services/index.hbs @@ -22,40 +22,7 @@ {{#block-slot name='content'}} {{#changeable-set dispatcher=searchable}} {{#block-slot name='set' as |filtered|}} - {{#tabular-collection - route='dc.services.show' - key='Name' - items=filtered as |item index| - }} - {{#block-slot name='header'}} - Service - Health ChecksThe number of health checks for the service on all nodes - Tags - {{/block-slot}} - {{#block-slot name='row'}} - - - {{#let (service/external-source item) as |externalSource| }} - {{#if externalSource }} - - {{else}} - - {{/if}} - {{/let}} - {{item.Name}} - - - - {{healthcheck-info - passing=item.ChecksPassing warning=item.ChecksWarning critical=item.ChecksCritical - passingWidth=passingWidth warningWidth=warningWidth criticalWidth=criticalWidth - }} - - - {{tag-list items=item.Tags}} - - {{/block-slot}} - {{/tabular-collection}} + {{consul-service-list routeName="dc.services.show" items=filtered}} {{/block-slot}} {{#block-slot name='empty'}}

diff --git a/ui-v2/tests/integration/components/consul-service-list-test.js b/ui-v2/tests/integration/components/consul-service-list-test.js new file mode 100644 index 0000000000..dec98c3929 --- /dev/null +++ b/ui-v2/tests/integration/components/consul-service-list-test.js @@ -0,0 +1,24 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; + +module('Integration | Component | consul-service-list', function(hooks) { + setupRenderingTest(hooks); + + test('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs`{{consul-service-list}}`); + + assert.equal(this.element.textContent.trim(), ''); + + // Template block usage: + await render(hbs` + {{#consul-service-list}}{{/consul-service-list}} + `); + + assert.equal(this.element.textContent.trim(), ''); + }); +}); From e9ed49d9aaf09308355aca97fc79cbf1053ef4fd Mon Sep 17 00:00:00 2001 From: John Cowen Date: Wed, 12 Feb 2020 17:47:52 +0000 Subject: [PATCH 09/83] ui: Test coverage developer experience (#7275) * ui: Add getSplitters unit test and additional getResolvers test * Make ordering of makefile target consistent --- ui-v2/GNUmakefile | 4 +- .../utils/components/discovery-chain/index.js | 2 +- ui-v2/package.json | 2 +- .../discovery-chain/get-resolvers-test.js | 60 ++++++++++++++++++- .../discovery-chain/get-splitters-test.js | 54 +++++++++++++++++ 5 files changed, 116 insertions(+), 6 deletions(-) create mode 100644 ui-v2/tests/unit/utils/components/discovery-chain/get-splitters-test.js diff --git a/ui-v2/GNUmakefile b/ui-v2/GNUmakefile index 6236ecf99e..1789a9cd4e 100644 --- a/ui-v2/GNUmakefile +++ b/ui-v2/GNUmakefile @@ -73,8 +73,8 @@ specify-coverage: test-coverage: deps specify-coverage yarn run test:coverage -test-view-coverage: deps specify-coverage - yarn run test:view:coverage +test-coverage-view: deps specify-coverage + yarn run test:coverage:view test-parallel: deps yarn run test:parallel diff --git a/ui-v2/app/utils/components/discovery-chain/index.js b/ui-v2/app/utils/components/discovery-chain/index.js index cf55773150..0263ced36f 100644 --- a/ui-v2/app/utils/components/discovery-chain/index.js +++ b/ui-v2/app/utils/components/discovery-chain/index.js @@ -39,7 +39,7 @@ export const getSplitters = function(nodes) { // Splitters need IDs adding so we can find them in the DOM later // splitters have a service.nspace as a name // do the reverse dance to ensure we don't mess up any - // serivice names with dots in them + // service names with dots in them const temp = item.Name.split('.'); temp.reverse(); temp.shift(); diff --git a/ui-v2/package.json b/ui-v2/package.json index 214e0f4ba0..53a2cf712f 100644 --- a/ui-v2/package.json +++ b/ui-v2/package.json @@ -30,7 +30,7 @@ "test:oss:view": "CONSUL_NSPACES_ENABLED=0 ember test --server --test-port=${EMBER_TEST_PORT:-7357}", "test:node": "tape ./node-tests/**/*.js", "test:coverage": "COVERAGE=true ember test --environment test --filter=Unit --test-port=${EMBER_TEST_PORT:-7357}", - "test:view:coverage": "COVERAGE=true ember test --server --environment test --filter=Unit --test-port=${EMBER_TEST_PORT:-7357}", + "test:coverage:view": "COVERAGE=true ember test --server --environment test --filter=Unit --test-port=${EMBER_TEST_PORT:-7357}", "steps:list": "node ./lib/commands/bin/list.js" }, "husky": { diff --git a/ui-v2/tests/unit/utils/components/discovery-chain/get-resolvers-test.js b/ui-v2/tests/unit/utils/components/discovery-chain/get-resolvers-test.js index 7463bcc123..8223d60c37 100644 --- a/ui-v2/tests/unit/utils/components/discovery-chain/get-resolvers-test.js +++ b/ui-v2/tests/unit/utils/components/discovery-chain/get-resolvers-test.js @@ -105,7 +105,7 @@ module('Unit | Utility | components/discovery-chain/get-resolvers', function() { Type: 'resolver', Name: 'v2.dc-failover.default.dc-1', Resolver: { - Target: 'v2.dc-failover.defauilt.dc-1', + Target: 'v2.dc-failover.default.dc-1', Failover: { Targets: ['v2.dc-failover.default.dc-5', 'v2.dc-failover.default.dc-6'], }, @@ -166,7 +166,7 @@ module('Unit | Utility | components/discovery-chain/get-resolvers', function() { Type: 'resolver', Name: 'dc-failover.default.dc-1', Resolver: { - Target: 'dc-failover.defauilt.dc-1', + Target: 'dc-failover.default.dc-1', Failover: { Targets: ['dc-failover.default.dc-5', 'dc-failover.default.dc-6'], }, @@ -196,4 +196,60 @@ module('Unit | Utility | components/discovery-chain/get-resolvers', function() { assert.deepEqual(actual[0], expected); }); }); + test('it finds services with redirects with failovers correctly', function(assert) { + return Promise.resolve({ + Chain: { + ServiceName: 'service-name', + Namespace: 'default', + Datacenter: 'dc-1', + Protocol: 'http', + StartNode: '', + Nodes: { + 'resolver:dc-failover.default.redirect-dc-1': { + Type: 'resolver', + Name: 'dc-failover.default.redirect-dc-1', + Resolver: { + Target: 'dc-failover.default.redirect-dc-1', + Failover: { + Targets: ['dc-failover.default.redirect-dc-5', 'dc-failover.default.redirect-dc-6'], + }, + }, + }, + }, + Targets: { + 'dc-failover.default.redirect-dc-1': { + ID: 'dc-failover.default.redirect-dc-1', + Service: 'dc-failover', + Namespace: 'default', + Datacenter: 'redirect-dc-1', + }, + }, + }, + }).then(function({ Chain }) { + const actual = getResolvers(dc, nspace, Chain.Targets, Chain.Nodes); + // Both the parent and the child should have a Failover property + // as in order for a redirect to have failovers it must redirect to a + // service that already has failovers + const expected = { + ID: 'dc-failover.default.dc-1', + Name: 'dc-failover', + Failover: { + Targets: ['redirect-dc-5', 'redirect-dc-6'], + Type: 'Datacenter', + }, + Children: [ + { + Failover: { + Targets: ['redirect-dc-5', 'redirect-dc-6'], + Type: 'Datacenter', + }, + ID: 'dc-failover.default.redirect-dc-1', + Name: 'redirect-dc-1', + Redirect: true, + }, + ], + }; + assert.deepEqual(actual[0], expected); + }); + }); }); diff --git a/ui-v2/tests/unit/utils/components/discovery-chain/get-splitters-test.js b/ui-v2/tests/unit/utils/components/discovery-chain/get-splitters-test.js new file mode 100644 index 0000000000..ca1dc500d6 --- /dev/null +++ b/ui-v2/tests/unit/utils/components/discovery-chain/get-splitters-test.js @@ -0,0 +1,54 @@ +import { getSplitters } from 'consul-ui/utils/components/discovery-chain/index'; +import { module, test } from 'qunit'; + +module('Unit | Utility | components/discovery-chain/get-splitters', function() { + test('it collects and correctly parses splitter Names', function(assert) { + const actual = getSplitters({ + 'splitter:splitter-name.default': { + Type: 'splitter', + Name: 'splitter-name.default', + Splits: [ + { + Weight: 50, + NextNode: '', + }, + { + Weight: 50, + NextNode: '', + }, + ], + }, + 'splitter:not-splitter-name.default': { + Type: 'not-splitter', + Name: 'splitter-name.default', + Splits: [ + { + Weight: 50, + NextNode: '', + }, + { + Weight: 50, + NextNode: '', + }, + ], + }, + }); + const expected = { + Type: 'splitter', + Name: 'splitter-name', + ID: 'splitter:splitter-name.default', + Splits: [ + { + Weight: 50, + NextNode: '', + }, + { + Weight: 50, + NextNode: '', + }, + ], + }; + assert.equal(actual.length, 1); + assert.deepEqual(actual[0], expected); + }); +}); From 1a7a1fb4f1c92620c1fbab0dd2b4982c45ed8275 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Thu, 13 Feb 2020 14:18:34 +0000 Subject: [PATCH 10/83] Upgrade to use structure-icons 1.8 (plus additional mask placeholders) (#7287) --- .../app/styles/base/icons/base-variables.scss | 233 ++-- .../styles/base/icons/icon-placeholders.scss | 1124 ++++++++++++++++- 2 files changed, 1247 insertions(+), 110 deletions(-) diff --git a/ui-v2/app/styles/base/icons/base-variables.scss b/ui-v2/app/styles/base/icons/base-variables.scss index f4666044f7..2bbf7b7c86 100644 --- a/ui-v2/app/styles/base/icons/base-variables.scss +++ b/ui-v2/app/styles/base/icons/base-variables.scss @@ -1,113 +1,170 @@ -$alert-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$alert-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$alert-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$alert-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); $alert-triangle-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$alert-triangle-svg: url('data:image/svg+xml;charset=UTF-8,'); -$arrow-down-svg: url('data:image/svg+xml;charset=UTF-8,'); -$arrow-left-svg: url('data:image/svg+xml;charset=UTF-8,'); +$alert-triangle-svg: url('data:image/svg+xml;charset=UTF-8,'); +$arrow-down-svg: url('data:image/svg+xml;charset=UTF-8,'); +$arrow-left-svg: url('data:image/svg+xml;charset=UTF-8,'); $arrow-right-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$arrow-right-svg: url('data:image/svg+xml;charset=UTF-8,'); -$arrow-up-svg: url('data:image/svg+xml;charset=UTF-8,'); +$arrow-right-svg: url('data:image/svg+xml;charset=UTF-8,'); +$arrow-up-svg: url('data:image/svg+xml;charset=UTF-8,'); $aws-logo-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$calendar-svg: url('data:image/svg+xml;charset=UTF-8,'); -$cancel-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$cancel-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$cancel-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); +$bolt-svg: url('data:image/svg+xml;charset=UTF-8,'); +$box-check-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$box-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$bug-svg: url('data:image/svg+xml;charset=UTF-8,'); +$calendar-svg: url('data:image/svg+xml;charset=UTF-8,'); +$cancel-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$cancel-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$cancel-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); $cancel-square-fill-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$cancel-square-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$cancel-square-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$caret-down-svg: url('data:image/svg+xml;charset=UTF-8,'); -$caret-up-svg: url('data:image/svg+xml;charset=UTF-8,'); +$cancel-square-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$cancel-square-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$caret-down-svg: url('data:image/svg+xml;charset=UTF-8,'); +$caret-up-svg: url('data:image/svg+xml;charset=UTF-8,'); $check-circle-fill-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$check-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$check-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$check-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); +$check-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$check-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$check-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); $chevron-down-2-svg: url('data:image/svg+xml;charset=UTF-8,'); -$chevron-down-svg: url('data:image/svg+xml;charset=UTF-8,'); -$chevron-left-svg: url('data:image/svg+xml;charset=UTF-8,'); -$chevron-right-svg: url('data:image/svg+xml;charset=UTF-8,'); -$chevron-up-svg: url('data:image/svg+xml;charset=UTF-8,'); +$chevron-down-svg: url('data:image/svg+xml;charset=UTF-8,'); +$chevron-left-svg: url('data:image/svg+xml;charset=UTF-8,'); +$chevron-right-svg: url('data:image/svg+xml;charset=UTF-8,'); +$chevron-up-svg: url('data:image/svg+xml;charset=UTF-8,'); $chevron-svg: url('data:image/svg+xml;charset=UTF-8,'); -$clock-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$clock-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$clock-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$clock-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); $cloud-cross-svg: url('data:image/svg+xml;charset=UTF-8,'); -$code-svg: url('data:image/svg+xml;charset=UTF-8,'); +$code-svg: url('data:image/svg+xml;charset=UTF-8,'); $consul-logo-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$copy-action-svg: url('data:image/svg+xml;charset=UTF-8,'); -$copy-success-svg: url('data:image/svg+xml;charset=UTF-8,'); +$copy-action-svg: url('data:image/svg+xml;charset=UTF-8,'); +$copy-success-svg: url('data:image/svg+xml;charset=UTF-8,'); +$database-svg: url('data:image/svg+xml;charset=UTF-8,'); +$deny-alt-svg: url('data:image/svg+xml;charset=UTF-8,'); $deny-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$deny-default-svg: url('data:image/svg+xml;charset=UTF-8,'); $deny-svg: url('data:image/svg+xml;charset=UTF-8,'); -$disabled-svg: url('data:image/svg+xml;charset=UTF-8,'); -$docs-svg: url('data:image/svg+xml;charset=UTF-8,'); -$download-svg: url('data:image/svg+xml;charset=UTF-8,'); -$edit-svg: url('data:image/svg+xml;charset=UTF-8,'); -$exit-svg: url('data:image/svg+xml;charset=UTF-8,'); -$expand-less-svg: url('data:image/svg+xml;charset=UTF-8,'); -$expand-more-svg: url('data:image/svg+xml;charset=UTF-8,'); -$file-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$file-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$filter-svg: url('data:image/svg+xml;charset=UTF-8,'); -$flag-svg: url('data:image/svg+xml;charset=UTF-8,'); -$folder-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$disabled-svg: url('data:image/svg+xml;charset=UTF-8,'); +$docs-svg: url('data:image/svg+xml;charset=UTF-8,'); +$download-svg: url('data:image/svg+xml;charset=UTF-8,'); +$edit-svg: url('data:image/svg+xml;charset=UTF-8,'); +$envelope-sealed-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$envelope-sealed-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$envelope-unsealed--outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$envelope-unsealed-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$exit-svg: url('data:image/svg+xml;charset=UTF-8,'); +$expand-less-svg: url('data:image/svg+xml;charset=UTF-8,'); +$expand-more-svg: url('data:image/svg+xml;charset=UTF-8,'); +$file-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$file-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$filter-svg: url('data:image/svg+xml;charset=UTF-8,'); +$flag-svg: url('data:image/svg+xml;charset=UTF-8,'); +$folder-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); $folder-outline-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$folder-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$git-branch-svg: url('data:image/svg+xml;charset=UTF-8,'); -$git-commit-svg: url('data:image/svg+xml;charset=UTF-8,'); -$git-pull-request-svg: url('data:image/svg+xml;charset=UTF-8,'); +$folder-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$gift-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$gift-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$git-branch-svg: url('data:image/svg+xml;charset=UTF-8,'); +$git-commit-svg: url('data:image/svg+xml;charset=UTF-8,'); +$git-pull-request-svg: url('data:image/svg+xml;charset=UTF-8,'); +$git-repository-svg: url('data:image/svg+xml;charset=UTF-8,'); $hashicorp-logo-svg: url('data:image/svg+xml;charset=UTF-8,'); -$help-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$help-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$history-svg: url('data:image/svg+xml;charset=UTF-8,'); +$health-svg: url('data:image/svg+xml;charset=UTF-8,'); +$help-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$help-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$history-svg: url('data:image/svg+xml;charset=UTF-8,'); $info-circle-fill-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$info-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$info-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$info-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$info-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$key-svg: url('data:image/svg+xml;charset=UTF-8,'); $kubernetes-logo-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$learn-svg: url('data:image/svg+xml;charset=UTF-8,'); -$link-svg: url('data:image/svg+xml;charset=UTF-8,'); +$learn-svg: url('data:image/svg+xml;charset=UTF-8,'); +$link-svg: url('data:image/svg+xml;charset=UTF-8,'); $loading-svg: url('data:image/svg+xml;charset=UTF-8,'); -$lock-closed-svg: url('data:image/svg+xml;charset=UTF-8,'); -$lock-disabled-svg: url('data:image/svg+xml;charset=UTF-8,'); -$lock-open-svg: url('data:image/svg+xml;charset=UTF-8,'); -$menu-svg: url('data:image/svg+xml;charset=UTF-8,'); -$minus-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$minus-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$minus-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); +$lock-closed-svg: url('data:image/svg+xml;charset=UTF-8,'); +$lock-disabled-svg: url('data:image/svg+xml;charset=UTF-8,'); +$lock-open-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-alicloud-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-alicloud-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-aws-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-aws-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-azure-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-azure-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-bitbucket-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-bitbucket-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-gcp-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-gcp-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-github-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-github-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-gitlab-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-gitlab-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-kubernetes-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-kubernetes-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-oracle-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-oracle-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-slack-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-slack-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-vmware-color-svg: url('data:image/svg+xml;charset=UTF-8,'); +$logo-vmware-monochrome-svg: url('data:image/svg+xml;charset=UTF-8,'); +$menu-svg: url('data:image/svg+xml;charset=UTF-8,'); +$message-svg: url('data:image/svg+xml;charset=UTF-8,'); +$minus-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$minus-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$minus-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); $minus-square-fill-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$minus-square-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$minus-square-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); $minus-svg: url('data:image/svg+xml;charset=UTF-8,'); -$more-horizontal-svg: url('data:image/svg+xml;charset=UTF-8,'); -$more-vertical-svg: url('data:image/svg+xml;charset=UTF-8,'); +$module-svg: url('data:image/svg+xml;charset=UTF-8,'); +$more-horizontal-svg: url('data:image/svg+xml;charset=UTF-8,'); +$more-vertical-svg: url('data:image/svg+xml;charset=UTF-8,'); $nomad-logo-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$plus-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$plus-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$plus-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); -$plus-square-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$queue-svg: url('data:image/svg+xml;charset=UTF-8,'); +$notification-disabled-svg: url('data:image/svg+xml;charset=UTF-8,'); +$notification-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$notification-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$page-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$partner-svg: url('data:image/svg+xml;charset=UTF-8,'); +$plus-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$plus-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$plus-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); +$plus-square-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$provider-svg: url('data:image/svg+xml;charset=UTF-8,'); +$public-default-svg: url('data:image/svg+xml;charset=UTF-8,'); +$public-locked-svg: url('data:image/svg+xml;charset=UTF-8,'); +$queue-svg: url('data:image/svg+xml;charset=UTF-8,'); +$radio-button-checked-svg: url('data:image/svg+xml;charset=UTF-8,'); +$radio-button-unchecked-svg: url('data:image/svg+xml;charset=UTF-8,'); +$random-svg: url('data:image/svg+xml;charset=UTF-8,'); $redirect-svg: url('data:image/svg+xml;charset=UTF-8,'); -$refresh-svg: url('data:image/svg+xml;charset=UTF-8,'); +$refresh-alert-svg: url('data:image/svg+xml;charset=UTF-8,'); +$refresh-default-svg: url('data:image/svg+xml;charset=UTF-8,'); +$remix-svg: url('data:image/svg+xml;charset=UTF-8,'); +$ribbon-svg: url('data:image/svg+xml;charset=UTF-8,'); $run-svg: url('data:image/svg+xml;charset=UTF-8,'); $search-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$search-svg: url('data:image/svg+xml;charset=UTF-8,'); +$search-svg: url('data:image/svg+xml;charset=UTF-8,'); $service-identity-svg: url('data:image/svg+xml;charset=UTF-8,'); -$settings-svg: url('data:image/svg+xml;charset=UTF-8,'); -$star-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$star-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$settings-svg: url('data:image/svg+xml;charset=UTF-8,'); +$source-file-svg: url('data:image/svg+xml;charset=UTF-8,'); +$star-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$star-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); $star-svg: url('data:image/svg+xml;charset=UTF-8,'); -$sub-arrow-left-svg: url('data:image/svg+xml;charset=UTF-8,'); -$sub-arrow-right-svg: url('data:image/svg+xml;charset=UTF-8,'); -$swap-horizontal-svg: url('data:image/svg+xml;charset=UTF-8,'); -$swap-vertical-svg: url('data:image/svg+xml;charset=UTF-8,'); +$sub-left-svg: url('data:image/svg+xml;charset=UTF-8,'); +$sub-right-svg: url('data:image/svg+xml;charset=UTF-8,'); +$support-svg: url('data:image/svg+xml;charset=UTF-8,'); +$swap-horizontal-svg: url('data:image/svg+xml;charset=UTF-8,'); +$swap-vertical-svg: url('data:image/svg+xml;charset=UTF-8,'); $terraform-logo-color-svg: url('data:image/svg+xml;charset=UTF-8,'); -$tier-enterprise-svg: url('data:image/svg+xml;charset=UTF-8,'); -$tier-oss-svg: url('data:image/svg+xml;charset=UTF-8,'); -$trash-svg: url('data:image/svg+xml;charset=UTF-8,'); -$tune-svg: url('data:image/svg+xml;charset=UTF-8,'); -$unfold-less-svg: url('data:image/svg+xml;charset=UTF-8,'); -$unfold-more-svg: url('data:image/svg+xml;charset=UTF-8,'); -$upload-svg: url('data:image/svg+xml;charset=UTF-8,'); -$user-organization-svg: url('data:image/svg+xml;charset=UTF-8,'); -$user-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); -$user-square-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); -$user-square-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); -$user-team-svg: url('data:image/svg+xml;charset=UTF-8,'); -$visibility-hide-svg: url('data:image/svg+xml;charset=UTF-8,'); -$visibility-show-svg: url('data:image/svg+xml;charset=UTF-8,'); +$trash-svg: url('data:image/svg+xml;charset=UTF-8,'); +$tune-svg: url('data:image/svg+xml;charset=UTF-8,'); +$unfold-less-svg: url('data:image/svg+xml;charset=UTF-8,'); +$unfold-more-svg: url('data:image/svg+xml;charset=UTF-8,'); +$upload-svg: url('data:image/svg+xml;charset=UTF-8,'); +$user-add-svg: url('data:image/svg+xml;charset=UTF-8,'); +$user-organization-svg: url('data:image/svg+xml;charset=UTF-8,'); +$user-plain-svg: url('data:image/svg+xml;charset=UTF-8,'); +$user-square-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); +$user-square-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); +$user-team-svg: url('data:image/svg+xml;charset=UTF-8,'); +$visibility-hide-svg: url('data:image/svg+xml;charset=UTF-8,'); +$visibility-show-svg: url('data:image/svg+xml;charset=UTF-8,'); +$webhook-svg: url('data:image/svg+xml;charset=UTF-8,'); diff --git a/ui-v2/app/styles/base/icons/icon-placeholders.scss b/ui-v2/app/styles/base/icons/icon-placeholders.scss index 154a328938..6af6e1971e 100644 --- a/ui-v2/app/styles/base/icons/icon-placeholders.scss +++ b/ui-v2/app/styles/base/icons/icon-placeholders.scss @@ -2,16 +2,31 @@ @extend %with-icon; background-image: $alert-circle-fill-svg; } +%with-alert-circle-fill-mask { + @extend %with-mask; + -webkit-mask-image: $alert-circle-fill-svg; + mask-image: $alert-circle-fill-svg; +} %with-alert-circle-outline-icon { @extend %with-icon; background-image: $alert-circle-outline-svg; } +%with-alert-circle-outline-mask { + @extend %with-mask; + -webkit-mask-image: $alert-circle-outline-svg; + mask-image: $alert-circle-outline-svg; +} %with-alert-triangle-color-icon { @extend %with-icon; background-image: $alert-triangle-color-svg; } +%with-alert-triangle-color-mask { + @extend %with-mask; + -webkit-mask-image: $alert-triangle-color-svg; + mask-image: $alert-triangle-color-svg; +} %with-alert-triangle-icon { @extend %with-icon; @@ -19,6 +34,7 @@ } %with-alert-triangle-mask { @extend %with-mask; + -webkit-mask-image: $alert-triangle-svg; mask-image: $alert-triangle-svg; } @@ -26,84 +42,199 @@ @extend %with-icon; background-image: $arrow-down-svg; } +%with-arrow-down-mask { + @extend %with-mask; + -webkit-mask-image: $arrow-down-svg; + mask-image: $arrow-down-svg; +} %with-arrow-left-icon { @extend %with-icon; background-image: $arrow-left-svg; } +%with-arrow-left-mask { + @extend %with-mask; + -webkit-mask-image: $arrow-left-svg; + mask-image: $arrow-left-svg; +} %with-arrow-right-color-icon { @extend %with-icon; background-image: $arrow-right-color-svg; } +%with-arrow-right-color-mask { + @extend %with-mask; + -webkit-mask-image: $arrow-right-color-svg; + mask-image: $arrow-right-color-svg; +} %with-arrow-right-icon { @extend %with-icon; background-image: $arrow-right-svg; } +%with-arrow-right-mask { + @extend %with-mask; + -webkit-mask-image: $arrow-right-svg; + mask-image: $arrow-right-svg; +} %with-arrow-up-icon { @extend %with-icon; background-image: $arrow-up-svg; } +%with-arrow-up-mask { + @extend %with-mask; + -webkit-mask-image: $arrow-up-svg; + mask-image: $arrow-up-svg; +} + +%with-bolt-icon { + @extend %with-icon; + background-image: $bolt-svg; +} +%with-bolt-mask { + @extend %with-mask; + -webkit-mask-image: $bolt-svg; + mask-image: $bolt-svg; +} + +%with-box-check-fill-icon { + @extend %with-icon; + background-image: $box-check-fill-svg; +} +%with-box-check-fill-mask { + @extend %with-mask; + -webkit-mask-image: $box-check-fill-svg; + mask-image: $box-check-fill-svg; +} + +%with-box-outline-icon { + @extend %with-icon; + background-image: $box-outline-svg; +} +%with-box-outline-mask { + @extend %with-mask; + -webkit-mask-image: $box-outline-svg; + mask-image: $box-outline-svg; +} + +%with-bug-icon { + @extend %with-icon; + background-image: $bug-svg; +} +%with-bug-mask { + @extend %with-mask; + -webkit-mask-image: $bug-svg; + mask-image: $bug-svg; +} %with-calendar-icon { @extend %with-icon; background-image: $calendar-svg; } +%with-calendar-mask { + @extend %with-mask; + -webkit-mask-image: $calendar-svg; + mask-image: $calendar-svg; +} %with-cancel-circle-fill-icon { @extend %with-icon; background-image: $cancel-circle-fill-svg; } +%with-cancel-circle-fill-mask { + @extend %with-mask; + -webkit-mask-image: $cancel-circle-fill-svg; + mask-image: $cancel-circle-fill-svg; +} %with-cancel-circle-outline-icon { @extend %with-icon; background-image: $cancel-circle-outline-svg; } +%with-cancel-circle-outline-mask { + @extend %with-mask; + -webkit-mask-image: $cancel-circle-outline-svg; + mask-image: $cancel-circle-outline-svg; +} %with-cancel-plain-icon { @extend %with-icon; background-image: $cancel-plain-svg; } +%with-cancel-plain-mask { + @extend %with-mask; + -webkit-mask-image: $cancel-plain-svg; + mask-image: $cancel-plain-svg; +} %with-cancel-square-fill-color-icon { @extend %with-icon; background-image: $cancel-square-fill-color-svg; } +%with-cancel-square-fill-color-mask { + @extend %with-mask; + -webkit-mask-image: $cancel-square-fill-color-svg; + mask-image: $cancel-square-fill-color-svg; +} %with-cancel-square-fill-icon { @extend %with-icon; background-image: $cancel-square-fill-svg; } +%with-cancel-square-fill-mask { + @extend %with-mask; + -webkit-mask-image: $cancel-square-fill-svg; + mask-image: $cancel-square-fill-svg; +} %with-cancel-square-outline-icon { @extend %with-icon; background-image: $cancel-square-outline-svg; } +%with-cancel-square-outline-mask { + @extend %with-mask; + -webkit-mask-image: $cancel-square-outline-svg; + mask-image: $cancel-square-outline-svg; +} %with-caret-down-icon { @extend %with-icon; background-image: $caret-down-svg; } +%with-caret-down-mask { + @extend %with-mask; + -webkit-mask-image: $caret-down-svg; + mask-image: $caret-down-svg; +} %with-caret-up-icon { @extend %with-icon; background-image: $caret-up-svg; } +%with-caret-up-mask { + @extend %with-mask; + -webkit-mask-image: $caret-up-svg; + mask-image: $caret-up-svg; +} %with-check-circle-fill-color-icon { @extend %with-icon; background-image: $check-circle-fill-color-svg; } +%with-check-circle-fill-color-mask { + @extend %with-mask; + -webkit-mask-image: $check-circle-fill-color-svg; + mask-image: $check-circle-fill-color-svg; +} %with-check-circle-fill-icon { @extend %with-icon; background-image: $check-circle-fill-svg; } - %with-check-circle-fill-mask { @extend %with-mask; + -webkit-mask-image: $check-circle-fill-svg; mask-image: $check-circle-fill-svg; } @@ -111,20 +242,31 @@ @extend %with-icon; background-image: $check-circle-outline-svg; } +%with-check-circle-outline-mask { + @extend %with-mask; + -webkit-mask-image: $check-circle-outline-svg; + mask-image: $check-circle-outline-svg; +} %with-check-plain-icon { @extend %with-icon; background-image: $check-plain-svg; } - %with-check-plain-mask { @extend %with-mask; + -webkit-mask-image: $check-plain-svg; mask-image: $check-plain-svg; } + %with-chevron-down-2-icon { @extend %with-icon; background-image: $chevron-down-2-svg; } +%with-chevron-down-2-mask { + @extend %with-mask; + -webkit-mask-image: $chevron-down-2-svg; + mask-image: $chevron-down-2-svg; +} %with-chevron-down-icon { @extend %with-icon; @@ -132,17 +274,29 @@ } %with-chevron-down-mask { @extend %with-mask; + -webkit-mask-image: $chevron-down-svg; mask-image: $chevron-down-svg; } + %with-chevron-left-icon { @extend %with-icon; background-image: $chevron-left-svg; } +%with-chevron-left-mask { + @extend %with-mask; + -webkit-mask-image: $chevron-left-svg; + mask-image: $chevron-left-svg; +} %with-chevron-right-icon { @extend %with-icon; background-image: $chevron-right-svg; } +%with-chevron-right-mask { + @extend %with-mask; + -webkit-mask-image: $chevron-right-svg; + mask-image: $chevron-right-svg; +} %with-chevron-up-icon { @extend %with-icon; @@ -150,6 +304,7 @@ } %with-chevron-up-mask { @extend %with-mask; + -webkit-mask-image: $chevron-up-svg; mask-image: $chevron-up-svg; } @@ -157,31 +312,61 @@ @extend %with-icon; background-image: $chevron-svg; } +%with-chevron-mask { + @extend %with-mask; + -webkit-mask-image: $chevron-svg; + mask-image: $chevron-svg; +} %with-clock-fill-icon { @extend %with-icon; background-image: $clock-fill-svg; } +%with-clock-fill-mask { + @extend %with-mask; + -webkit-mask-image: $clock-fill-svg; + mask-image: $clock-fill-svg; +} %with-clock-outline-icon { @extend %with-icon; background-image: $clock-outline-svg; } +%with-clock-outline-mask { + @extend %with-mask; + -webkit-mask-image: $clock-outline-svg; + mask-image: $clock-outline-svg; +} %with-cloud-cross-icon { @extend %with-icon; background-image: $cloud-cross-svg; } +%with-cloud-cross-mask { + @extend %with-mask; + -webkit-mask-image: $cloud-cross-svg; + mask-image: $cloud-cross-svg; +} %with-code-icon { @extend %with-icon; background-image: $code-svg; } +%with-code-mask { + @extend %with-mask; + -webkit-mask-image: $code-svg; + mask-image: $code-svg; +} %with-consul-logo-color-icon { @extend %with-icon; background-image: $consul-logo-color-svg; } +%with-consul-logo-color-mask { + @extend %with-mask; + -webkit-mask-image: $consul-logo-color-svg; + mask-image: $consul-logo-color-svg; +} %with-copy-action-icon { @extend %with-icon; @@ -189,6 +374,7 @@ } %with-copy-action-mask { @extend %with-mask; + -webkit-mask-image: $copy-action-svg; mask-image: $copy-action-svg; } @@ -196,220 +382,781 @@ @extend %with-icon; background-image: $copy-success-svg; } +%with-copy-success-mask { + @extend %with-mask; + -webkit-mask-image: $copy-success-svg; + mask-image: $copy-success-svg; +} + +%with-database-icon { + @extend %with-icon; + background-image: $database-svg; +} +%with-database-mask { + @extend %with-mask; + -webkit-mask-image: $database-svg; + mask-image: $database-svg; +} + +%with-deny-alt-icon { + @extend %with-icon; + background-image: $deny-alt-svg; +} +%with-deny-alt-mask { + @extend %with-mask; + -webkit-mask-image: $deny-alt-svg; + mask-image: $deny-alt-svg; +} %with-deny-color-icon { @extend %with-icon; background-image: $deny-color-svg; } +%with-deny-color-mask { + @extend %with-mask; + -webkit-mask-image: $deny-color-svg; + mask-image: $deny-color-svg; +} + +%with-deny-default-icon { + @extend %with-icon; + background-image: $deny-default-svg; +} +%with-deny-default-mask { + @extend %with-mask; + -webkit-mask-image: $deny-default-svg; + mask-image: $deny-default-svg; +} %with-deny-icon { @extend %with-icon; background-image: $deny-svg; } +%with-deny-mask { + @extend %with-mask; + -webkit-mask-image: $deny-svg; + mask-image: $deny-svg; +} %with-disabled-icon { @extend %with-icon; background-image: $disabled-svg; } +%with-disabled-mask { + @extend %with-mask; + -webkit-mask-image: $disabled-svg; + mask-image: $disabled-svg; +} %with-docs-icon { @extend %with-icon; background-image: $docs-svg; } +%with-docs-mask { + @extend %with-mask; + -webkit-mask-image: $docs-svg; + mask-image: $docs-svg; +} %with-download-icon { @extend %with-icon; background-image: $download-svg; } +%with-download-mask { + @extend %with-mask; + -webkit-mask-image: $download-svg; + mask-image: $download-svg; +} %with-edit-icon { @extend %with-icon; background-image: $edit-svg; } +%with-edit-mask { + @extend %with-mask; + -webkit-mask-image: $edit-svg; + mask-image: $edit-svg; +} + +%with-envelope-sealed-fill-icon { + @extend %with-icon; + background-image: $envelope-sealed-fill-svg; +} +%with-envelope-sealed-fill-mask { + @extend %with-mask; + -webkit-mask-image: $envelope-sealed-fill-svg; + mask-image: $envelope-sealed-fill-svg; +} + +%with-envelope-sealed-outline-icon { + @extend %with-icon; + background-image: $envelope-sealed-outline-svg; +} +%with-envelope-sealed-outline-mask { + @extend %with-mask; + -webkit-mask-image: $envelope-sealed-outline-svg; + mask-image: $envelope-sealed-outline-svg; +} + +%with-envelope-unsealed--outline-icon { + @extend %with-icon; + background-image: $envelope-unsealed--outline-svg; +} +%with-envelope-unsealed--outline-mask { + @extend %with-mask; + -webkit-mask-image: $envelope-unsealed--outline-svg; + mask-image: $envelope-unsealed--outline-svg; +} + +%with-envelope-unsealed-fill-icon { + @extend %with-icon; + background-image: $envelope-unsealed-fill-svg; +} +%with-envelope-unsealed-fill-mask { + @extend %with-mask; + -webkit-mask-image: $envelope-unsealed-fill-svg; + mask-image: $envelope-unsealed-fill-svg; +} %with-exit-icon { @extend %with-icon; background-image: $exit-svg; } +%with-exit-mask { + @extend %with-mask; + -webkit-mask-image: $exit-svg; + mask-image: $exit-svg; +} %with-expand-less-icon { @extend %with-icon; background-image: $expand-less-svg; } +%with-expand-less-mask { + @extend %with-mask; + -webkit-mask-image: $expand-less-svg; + mask-image: $expand-less-svg; +} %with-expand-more-icon { @extend %with-icon; background-image: $expand-more-svg; } +%with-expand-more-mask { + @extend %with-mask; + -webkit-mask-image: $expand-more-svg; + mask-image: $expand-more-svg; +} %with-file-fill-icon { @extend %with-icon; background-image: $file-fill-svg; } +%with-file-fill-mask { + @extend %with-mask; + -webkit-mask-image: $file-fill-svg; + mask-image: $file-fill-svg; +} %with-file-outline-icon { @extend %with-icon; background-image: $file-outline-svg; } +%with-file-outline-mask { + @extend %with-mask; + -webkit-mask-image: $file-outline-svg; + mask-image: $file-outline-svg; +} %with-filter-icon { @extend %with-icon; background-image: $filter-svg; } +%with-filter-mask { + @extend %with-mask; + -webkit-mask-image: $filter-svg; + mask-image: $filter-svg; +} %with-flag-icon { @extend %with-icon; background-image: $flag-svg; } +%with-flag-mask { + @extend %with-mask; + -webkit-mask-image: $flag-svg; + mask-image: $flag-svg; +} %with-folder-fill-icon { @extend %with-icon; background-image: $folder-fill-svg; } +%with-folder-fill-mask { + @extend %with-mask; + -webkit-mask-image: $folder-fill-svg; + mask-image: $folder-fill-svg; +} %with-folder-outline-color-icon { @extend %with-icon; background-image: $folder-outline-color-svg; } +%with-folder-outline-color-mask { + @extend %with-mask; + -webkit-mask-image: $folder-outline-color-svg; + mask-image: $folder-outline-color-svg; +} %with-folder-outline-icon { @extend %with-icon; background-image: $folder-outline-svg; } - %with-folder-outline-mask { @extend %with-mask; + -webkit-mask-image: $folder-outline-svg; mask-image: $folder-outline-svg; } +%with-gift-fill-icon { + @extend %with-icon; + background-image: $gift-fill-svg; +} +%with-gift-fill-mask { + @extend %with-mask; + -webkit-mask-image: $gift-fill-svg; + mask-image: $gift-fill-svg; +} + +%with-gift-outline-icon { + @extend %with-icon; + background-image: $gift-outline-svg; +} +%with-gift-outline-mask { + @extend %with-mask; + -webkit-mask-image: $gift-outline-svg; + mask-image: $gift-outline-svg; +} + %with-git-branch-icon { @extend %with-icon; background-image: $git-branch-svg; } +%with-git-branch-mask { + @extend %with-mask; + -webkit-mask-image: $git-branch-svg; + mask-image: $git-branch-svg; +} %with-git-commit-icon { @extend %with-icon; background-image: $git-commit-svg; } +%with-git-commit-mask { + @extend %with-mask; + -webkit-mask-image: $git-commit-svg; + mask-image: $git-commit-svg; +} %with-git-pull-request-icon { @extend %with-icon; background-image: $git-pull-request-svg; } +%with-git-pull-request-mask { + @extend %with-mask; + -webkit-mask-image: $git-pull-request-svg; + mask-image: $git-pull-request-svg; +} + +%with-git-repository-icon { + @extend %with-icon; + background-image: $git-repository-svg; +} +%with-git-repository-mask { + @extend %with-mask; + -webkit-mask-image: $git-repository-svg; + mask-image: $git-repository-svg; +} %with-hashicorp-logo-icon { @extend %with-icon; background-image: $hashicorp-logo-svg; } - %with-hashicorp-logo-mask { @extend %with-mask; + -webkit-mask-image: $hashicorp-logo-svg; mask-image: $hashicorp-logo-svg; } + +%with-health-icon { + @extend %with-icon; + background-image: $health-svg; +} +%with-health-mask { + @extend %with-mask; + -webkit-mask-image: $health-svg; + mask-image: $health-svg; +} + %with-help-circle-fill-icon { @extend %with-icon; background-image: $help-circle-fill-svg; } +%with-help-circle-fill-mask { + @extend %with-mask; + -webkit-mask-image: $help-circle-fill-svg; + mask-image: $help-circle-fill-svg; +} %with-help-circle-outline-icon { @extend %with-icon; background-image: $help-circle-outline-svg; } +%with-help-circle-outline-mask { + @extend %with-mask; + -webkit-mask-image: $help-circle-outline-svg; + mask-image: $help-circle-outline-svg; +} %with-history-icon { @extend %with-icon; background-image: $history-svg; } +%with-history-mask { + @extend %with-mask; + -webkit-mask-image: $history-svg; + mask-image: $history-svg; +} %with-info-circle-fill-color-icon { @extend %with-icon; background-image: $info-circle-fill-color-svg; } +%with-info-circle-fill-color-mask { + @extend %with-mask; + -webkit-mask-image: $info-circle-fill-color-svg; + mask-image: $info-circle-fill-color-svg; +} %with-info-circle-fill-icon { @extend %with-icon; background-image: $info-circle-fill-svg; } +%with-info-circle-fill-mask { + @extend %with-mask; + -webkit-mask-image: $info-circle-fill-svg; + mask-image: $info-circle-fill-svg; +} %with-info-circle-outline-icon { @extend %with-icon; background-image: $info-circle-outline-svg; } +%with-info-circle-outline-mask { + @extend %with-mask; + -webkit-mask-image: $info-circle-outline-svg; + mask-image: $info-circle-outline-svg; +} + +%with-key-icon { + @extend %with-icon; + background-image: $key-svg; +} +%with-key-mask { + @extend %with-mask; + -webkit-mask-image: $key-svg; + mask-image: $key-svg; +} %with-kubernetes-logo-color-icon { @extend %with-icon; background-image: $kubernetes-logo-color-svg; } +%with-kubernetes-logo-color-mask { + @extend %with-mask; + -webkit-mask-image: $kubernetes-logo-color-svg; + mask-image: $kubernetes-logo-color-svg; +} %with-learn-icon { @extend %with-icon; background-image: $learn-svg; } +%with-learn-mask { + @extend %with-mask; + -webkit-mask-image: $learn-svg; + mask-image: $learn-svg; +} %with-link-icon { @extend %with-icon; background-image: $link-svg; } +%with-link-mask { + @extend %with-mask; + -webkit-mask-image: $link-svg; + mask-image: $link-svg; +} %with-loading-icon { @extend %with-icon; background-image: $loading-svg; } +%with-loading-mask { + @extend %with-mask; + -webkit-mask-image: $loading-svg; + mask-image: $loading-svg; +} %with-lock-closed-icon { @extend %with-icon; background-image: $lock-closed-svg; } +%with-lock-closed-mask { + @extend %with-mask; + -webkit-mask-image: $lock-closed-svg; + mask-image: $lock-closed-svg; +} %with-lock-disabled-icon { @extend %with-icon; background-image: $lock-disabled-svg; } +%with-lock-disabled-mask { + @extend %with-mask; + -webkit-mask-image: $lock-disabled-svg; + mask-image: $lock-disabled-svg; +} %with-lock-open-icon { @extend %with-icon; background-image: $lock-open-svg; } +%with-lock-open-mask { + @extend %with-mask; + -webkit-mask-image: $lock-open-svg; + mask-image: $lock-open-svg; +} + +%with-logo-alicloud-color-icon { + @extend %with-icon; + background-image: $logo-alicloud-color-svg; +} +%with-logo-alicloud-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-alicloud-color-svg; + mask-image: $logo-alicloud-color-svg; +} + +%with-logo-alicloud-monochrome-icon { + @extend %with-icon; + background-image: $logo-alicloud-monochrome-svg; +} +%with-logo-alicloud-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-alicloud-monochrome-svg; + mask-image: $logo-alicloud-monochrome-svg; +} + +%with-logo-aws-color-icon { + @extend %with-icon; + background-image: $logo-aws-color-svg; +} +%with-logo-aws-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-aws-color-svg; + mask-image: $logo-aws-color-svg; +} + +%with-logo-aws-monochrome-icon { + @extend %with-icon; + background-image: $logo-aws-monochrome-svg; +} +%with-logo-aws-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-aws-monochrome-svg; + mask-image: $logo-aws-monochrome-svg; +} + +%with-logo-azure-color-icon { + @extend %with-icon; + background-image: $logo-azure-color-svg; +} +%with-logo-azure-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-azure-color-svg; + mask-image: $logo-azure-color-svg; +} + +%with-logo-azure-monochrome-icon { + @extend %with-icon; + background-image: $logo-azure-monochrome-svg; +} +%with-logo-azure-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-azure-monochrome-svg; + mask-image: $logo-azure-monochrome-svg; +} + +%with-logo-bitbucket-color-icon { + @extend %with-icon; + background-image: $logo-bitbucket-color-svg; +} +%with-logo-bitbucket-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-bitbucket-color-svg; + mask-image: $logo-bitbucket-color-svg; +} + +%with-logo-bitbucket-monochrome-icon { + @extend %with-icon; + background-image: $logo-bitbucket-monochrome-svg; +} +%with-logo-bitbucket-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-bitbucket-monochrome-svg; + mask-image: $logo-bitbucket-monochrome-svg; +} + +%with-logo-gcp-color-icon { + @extend %with-icon; + background-image: $logo-gcp-color-svg; +} +%with-logo-gcp-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-gcp-color-svg; + mask-image: $logo-gcp-color-svg; +} + +%with-logo-gcp-monochrome-icon { + @extend %with-icon; + background-image: $logo-gcp-monochrome-svg; +} +%with-logo-gcp-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-gcp-monochrome-svg; + mask-image: $logo-gcp-monochrome-svg; +} + +%with-logo-github-color-icon { + @extend %with-icon; + background-image: $logo-github-color-svg; +} +%with-logo-github-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-github-color-svg; + mask-image: $logo-github-color-svg; +} + +%with-logo-github-monochrome-icon { + @extend %with-icon; + background-image: $logo-github-monochrome-svg; +} +%with-logo-github-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-github-monochrome-svg; + mask-image: $logo-github-monochrome-svg; +} + +%with-logo-gitlab-color-icon { + @extend %with-icon; + background-image: $logo-gitlab-color-svg; +} +%with-logo-gitlab-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-gitlab-color-svg; + mask-image: $logo-gitlab-color-svg; +} + +%with-logo-gitlab-monochrome-icon { + @extend %with-icon; + background-image: $logo-gitlab-monochrome-svg; +} +%with-logo-gitlab-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-gitlab-monochrome-svg; + mask-image: $logo-gitlab-monochrome-svg; +} + +%with-logo-kubernetes-color-icon { + @extend %with-icon; + background-image: $logo-kubernetes-color-svg; +} +%with-logo-kubernetes-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-kubernetes-color-svg; + mask-image: $logo-kubernetes-color-svg; +} + +%with-logo-kubernetes-monochrome-icon { + @extend %with-icon; + background-image: $logo-kubernetes-monochrome-svg; +} +%with-logo-kubernetes-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-kubernetes-monochrome-svg; + mask-image: $logo-kubernetes-monochrome-svg; +} + +%with-logo-oracle-color-icon { + @extend %with-icon; + background-image: $logo-oracle-color-svg; +} +%with-logo-oracle-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-oracle-color-svg; + mask-image: $logo-oracle-color-svg; +} + +%with-logo-oracle-monochrome-icon { + @extend %with-icon; + background-image: $logo-oracle-monochrome-svg; +} +%with-logo-oracle-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-oracle-monochrome-svg; + mask-image: $logo-oracle-monochrome-svg; +} + +%with-logo-slack-color-icon { + @extend %with-icon; + background-image: $logo-slack-color-svg; +} +%with-logo-slack-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-slack-color-svg; + mask-image: $logo-slack-color-svg; +} + +%with-logo-slack-monochrome-icon { + @extend %with-icon; + background-image: $logo-slack-monochrome-svg; +} +%with-logo-slack-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-slack-monochrome-svg; + mask-image: $logo-slack-monochrome-svg; +} + +%with-logo-vmware-color-icon { + @extend %with-icon; + background-image: $logo-vmware-color-svg; +} +%with-logo-vmware-color-mask { + @extend %with-mask; + -webkit-mask-image: $logo-vmware-color-svg; + mask-image: $logo-vmware-color-svg; +} + +%with-logo-vmware-monochrome-icon { + @extend %with-icon; + background-image: $logo-vmware-monochrome-svg; +} +%with-logo-vmware-monochrome-mask { + @extend %with-mask; + -webkit-mask-image: $logo-vmware-monochrome-svg; + mask-image: $logo-vmware-monochrome-svg; +} %with-menu-icon { @extend %with-icon; background-image: $menu-svg; } +%with-menu-mask { + @extend %with-mask; + -webkit-mask-image: $menu-svg; + mask-image: $menu-svg; +} + +%with-message-icon { + @extend %with-icon; + background-image: $message-svg; +} +%with-message-mask { + @extend %with-mask; + -webkit-mask-image: $message-svg; + mask-image: $message-svg; +} %with-minus-circle-fill-icon { @extend %with-icon; background-image: $minus-circle-fill-svg; } +%with-minus-circle-fill-mask { + @extend %with-mask; + -webkit-mask-image: $minus-circle-fill-svg; + mask-image: $minus-circle-fill-svg; +} %with-minus-circle-outline-icon { @extend %with-icon; background-image: $minus-circle-outline-svg; } +%with-minus-circle-outline-mask { + @extend %with-mask; + -webkit-mask-image: $minus-circle-outline-svg; + mask-image: $minus-circle-outline-svg; +} %with-minus-plain-icon { @extend %with-icon; background-image: $minus-plain-svg; } +%with-minus-plain-mask { + @extend %with-mask; + -webkit-mask-image: $minus-plain-svg; + mask-image: $minus-plain-svg; +} %with-minus-square-fill-color-icon { @extend %with-icon; background-image: $minus-square-fill-color-svg; } +%with-minus-square-fill-color-mask { + @extend %with-mask; + -webkit-mask-image: $minus-square-fill-color-svg; + mask-image: $minus-square-fill-color-svg; +} %with-minus-square-fill-icon { @extend %with-icon; background-image: $minus-square-fill-svg; } +%with-minus-square-fill-mask { + @extend %with-mask; + -webkit-mask-image: $minus-square-fill-svg; + mask-image: $minus-square-fill-svg; +} %with-minus-icon { @extend %with-icon; background-image: $minus-svg; } +%with-minus-mask { + @extend %with-mask; + -webkit-mask-image: $minus-svg; + mask-image: $minus-svg; +} + +%with-module-icon { + @extend %with-icon; + background-image: $module-svg; +} +%with-module-mask { + @extend %with-mask; + -webkit-mask-image: $module-svg; + mask-image: $module-svg; +} %with-more-horizontal-icon { @extend %with-icon; background-image: $more-horizontal-svg; } +%with-more-horizontal-mask { + @extend %with-mask; + -webkit-mask-image: $more-horizontal-svg; + mask-image: $more-horizontal-svg; +} %with-more-vertical-icon { @extend %with-icon; @@ -417,6 +1164,7 @@ } %with-more-vertical-mask { @extend %with-mask; + -webkit-mask-image: $more-vertical-svg; mask-image: $more-vertical-svg; } @@ -424,74 +1172,299 @@ @extend %with-icon; background-image: $nomad-logo-color-svg; } +%with-nomad-logo-color-mask { + @extend %with-mask; + -webkit-mask-image: $nomad-logo-color-svg; + mask-image: $nomad-logo-color-svg; +} + +%with-notification-disabled-icon { + @extend %with-icon; + background-image: $notification-disabled-svg; +} +%with-notification-disabled-mask { + @extend %with-mask; + -webkit-mask-image: $notification-disabled-svg; + mask-image: $notification-disabled-svg; +} + +%with-notification-fill-icon { + @extend %with-icon; + background-image: $notification-fill-svg; +} +%with-notification-fill-mask { + @extend %with-mask; + -webkit-mask-image: $notification-fill-svg; + mask-image: $notification-fill-svg; +} + +%with-notification-outline-icon { + @extend %with-icon; + background-image: $notification-outline-svg; +} +%with-notification-outline-mask { + @extend %with-mask; + -webkit-mask-image: $notification-outline-svg; + mask-image: $notification-outline-svg; +} + +%with-outline-icon { + @extend %with-icon; + background-image: $outline-svg; +} +%with-outline-mask { + @extend %with-mask; + -webkit-mask-image: $outline-svg; + mask-image: $outline-svg; +} + +%with-page-outline-icon { + @extend %with-icon; + background-image: $page-outline-svg; +} +%with-page-outline-mask { + @extend %with-mask; + -webkit-mask-image: $page-outline-svg; + mask-image: $page-outline-svg; +} + +%with-partner-icon { + @extend %with-icon; + background-image: $partner-svg; +} +%with-partner-mask { + @extend %with-mask; + -webkit-mask-image: $partner-svg; + mask-image: $partner-svg; +} %with-plus-circle-fill-icon { @extend %with-icon; background-image: $plus-circle-fill-svg; } +%with-plus-circle-fill-mask { + @extend %with-mask; + -webkit-mask-image: $plus-circle-fill-svg; + mask-image: $plus-circle-fill-svg; +} %with-plus-circle-outline-icon { @extend %with-icon; background-image: $plus-circle-outline-svg; } +%with-plus-circle-outline-mask { + @extend %with-mask; + -webkit-mask-image: $plus-circle-outline-svg; + mask-image: $plus-circle-outline-svg; +} %with-plus-plain-icon { @extend %with-icon; background-image: $plus-plain-svg; } +%with-plus-plain-mask { + @extend %with-mask; + -webkit-mask-image: $plus-plain-svg; + mask-image: $plus-plain-svg; +} %with-plus-square-fill-icon { @extend %with-icon; background-image: $plus-square-fill-svg; } +%with-plus-square-fill-mask { + @extend %with-mask; + -webkit-mask-image: $plus-square-fill-svg; + mask-image: $plus-square-fill-svg; +} + +%with-provider-icon { + @extend %with-icon; + background-image: $provider-svg; +} +%with-provider-mask { + @extend %with-mask; + -webkit-mask-image: $provider-svg; + mask-image: $provider-svg; +} + +%with-public-default-icon { + @extend %with-icon; + background-image: $public-default-svg; +} +%with-public-default-mask { + @extend %with-mask; + -webkit-mask-image: $public-default-svg; + mask-image: $public-default-svg; +} + +%with-public-locked-icon { + @extend %with-icon; + background-image: $public-locked-svg; +} +%with-public-locked-mask { + @extend %with-mask; + -webkit-mask-image: $public-locked-svg; + mask-image: $public-locked-svg; +} %with-queue-icon { @extend %with-icon; background-image: $queue-svg; } +%with-queue-mask { + @extend %with-mask; + -webkit-mask-image: $queue-svg; + mask-image: $queue-svg; +} + +%with-radio-button-checked-icon { + @extend %with-icon; + background-image: $radio-button-checked-svg; +} +%with-radio-button-checked-mask { + @extend %with-mask; + -webkit-mask-image: $radio-button-checked-svg; + mask-image: $radio-button-checked-svg; +} + +%with-radio-button-unchecked-icon { + @extend %with-icon; + background-image: $radio-button-unchecked-svg; +} +%with-radio-button-unchecked-mask { + @extend %with-mask; + -webkit-mask-image: $radio-button-unchecked-svg; + mask-image: $radio-button-unchecked-svg; +} + +%with-random-icon { + @extend %with-icon; + background-image: $random-svg; +} +%with-random-mask { + @extend %with-mask; + -webkit-mask-image: $random-svg; + mask-image: $random-svg; +} %with-redirect-icon { @extend %with-icon; background-image: $redirect-svg; } +%with-redirect-mask { + @extend %with-mask; + -webkit-mask-image: $redirect-svg; + mask-image: $redirect-svg; +} -%with-refresh-icon { +%with-refresh-alert-icon { @extend %with-icon; - background-image: $refresh-svg; + background-image: $refresh-alert-svg; +} +%with-refresh-alert-mask { + @extend %with-mask; + -webkit-mask-image: $refresh-alert-svg; + mask-image: $refresh-alert-svg; +} + +%with-refresh-default-icon { + @extend %with-icon; + background-image: $refresh-default-svg; +} +%with-refresh-default-mask { + @extend %with-mask; + -webkit-mask-image: $refresh-default-svg; + mask-image: $refresh-default-svg; +} + +%with-remix-icon { + @extend %with-icon; + background-image: $remix-svg; +} +%with-remix-mask { + @extend %with-mask; + -webkit-mask-image: $remix-svg; + mask-image: $remix-svg; +} + +%with-ribbon-icon { + @extend %with-icon; + background-image: $ribbon-svg; +} +%with-ribbon-mask { + @extend %with-mask; + -webkit-mask-image: $ribbon-svg; + mask-image: $ribbon-svg; } %with-run-icon { @extend %with-icon; background-image: $run-svg; } +%with-run-mask { + @extend %with-mask; + -webkit-mask-image: $run-svg; + mask-image: $run-svg; +} %with-search-color-icon { @extend %with-icon; background-image: $search-color-svg; } +%with-search-color-mask { + @extend %with-mask; + -webkit-mask-image: $search-color-svg; + mask-image: $search-color-svg; +} %with-search-icon { @extend %with-icon; background-image: $search-svg; } +%with-search-mask { + @extend %with-mask; + -webkit-mask-image: $search-svg; + mask-image: $search-svg; +} %with-service-identity-icon { @extend %with-icon; background-image: $service-identity-svg; } +%with-service-identity-mask { + @extend %with-mask; + -webkit-mask-image: $service-identity-svg; + mask-image: $service-identity-svg; +} %with-settings-icon { @extend %with-icon; background-image: $settings-svg; } +%with-settings-mask { + @extend %with-mask; + -webkit-mask-image: $settings-svg; + mask-image: $settings-svg; +} + +%with-source-file-icon { + @extend %with-icon; + background-image: $source-file-svg; +} +%with-source-file-mask { + @extend %with-mask; + -webkit-mask-image: $source-file-svg; + mask-image: $source-file-svg; +} %with-star-fill-icon { @extend %with-icon; background-image: $star-fill-svg; } - %with-star-fill-mask { @extend %with-mask; + -webkit-mask-image: $star-fill-svg; mask-image: $star-fill-svg; } @@ -499,96 +1472,191 @@ @extend %with-icon; background-image: $star-outline-svg; } +%with-star-outline-mask { + @extend %with-mask; + -webkit-mask-image: $star-outline-svg; + mask-image: $star-outline-svg; +} %with-star-icon { @extend %with-icon; background-image: $star-svg; } - -%with-sub-arrow-left-icon { - @extend %with-icon; - background-image: $sub-arrow-left-svg; +%with-star-mask { + @extend %with-mask; + -webkit-mask-image: $star-svg; + mask-image: $star-svg; } -%with-sub-arrow-right-icon { +%with-sub-left-icon { @extend %with-icon; - background-image: $sub-arrow-right-svg; + background-image: $sub-left-svg; +} +%with-sub-left-mask { + @extend %with-mask; + -webkit-mask-image: $sub-left-svg; + mask-image: $sub-left-svg; +} + +%with-sub-right-icon { + @extend %with-icon; + background-image: $sub-right-svg; +} +%with-sub-right-mask { + @extend %with-mask; + -webkit-mask-image: $sub-right-svg; + mask-image: $sub-right-svg; +} + +%with-support-icon { + @extend %with-icon; + background-image: $support-svg; +} +%with-support-mask { + @extend %with-mask; + -webkit-mask-image: $support-svg; + mask-image: $support-svg; } %with-swap-horizontal-icon { @extend %with-icon; background-image: $swap-horizontal-svg; } +%with-swap-horizontal-mask { + @extend %with-mask; + -webkit-mask-image: $swap-horizontal-svg; + mask-image: $swap-horizontal-svg; +} %with-swap-vertical-icon { @extend %with-icon; background-image: $swap-vertical-svg; } +%with-swap-vertical-mask { + @extend %with-mask; + -webkit-mask-image: $swap-vertical-svg; + mask-image: $swap-vertical-svg; +} %with-terraform-logo-color-icon { @extend %with-icon; background-image: $terraform-logo-color-svg; } - -%with-tier-enterprise-icon { - @extend %with-icon; - background-image: $tier-enterprise-svg; -} - -%with-tier-oss-icon { - @extend %with-icon; - background-image: $tier-oss-svg; +%with-terraform-logo-color-mask { + @extend %with-mask; + -webkit-mask-image: $terraform-logo-color-svg; + mask-image: $terraform-logo-color-svg; } %with-trash-icon { @extend %with-icon; background-image: $trash-svg; } +%with-trash-mask { + @extend %with-mask; + -webkit-mask-image: $trash-svg; + mask-image: $trash-svg; +} %with-tune-icon { @extend %with-icon; background-image: $tune-svg; } +%with-tune-mask { + @extend %with-mask; + -webkit-mask-image: $tune-svg; + mask-image: $tune-svg; +} %with-unfold-less-icon { @extend %with-icon; background-image: $unfold-less-svg; } +%with-unfold-less-mask { + @extend %with-mask; + -webkit-mask-image: $unfold-less-svg; + mask-image: $unfold-less-svg; +} %with-unfold-more-icon { @extend %with-icon; background-image: $unfold-more-svg; } +%with-unfold-more-mask { + @extend %with-mask; + -webkit-mask-image: $unfold-more-svg; + mask-image: $unfold-more-svg; +} %with-upload-icon { @extend %with-icon; background-image: $upload-svg; } +%with-upload-mask { + @extend %with-mask; + -webkit-mask-image: $upload-svg; + mask-image: $upload-svg; +} + +%with-user-add-icon { + @extend %with-icon; + background-image: $user-add-svg; +} +%with-user-add-mask { + @extend %with-mask; + -webkit-mask-image: $user-add-svg; + mask-image: $user-add-svg; +} %with-user-organization-icon { @extend %with-icon; background-image: $user-organization-svg; } +%with-user-organization-mask { + @extend %with-mask; + -webkit-mask-image: $user-organization-svg; + mask-image: $user-organization-svg; +} %with-user-plain-icon { @extend %with-icon; background-image: $user-plain-svg; } +%with-user-plain-mask { + @extend %with-mask; + -webkit-mask-image: $user-plain-svg; + mask-image: $user-plain-svg; +} %with-user-square-fill-icon { @extend %with-icon; background-image: $user-square-fill-svg; } +%with-user-square-fill-mask { + @extend %with-mask; + -webkit-mask-image: $user-square-fill-svg; + mask-image: $user-square-fill-svg; +} %with-user-square-outline-icon { @extend %with-icon; background-image: $user-square-outline-svg; } +%with-user-square-outline-mask { + @extend %with-mask; + -webkit-mask-image: $user-square-outline-svg; + mask-image: $user-square-outline-svg; +} %with-user-team-icon { @extend %with-icon; background-image: $user-team-svg; } +%with-user-team-mask { + @extend %with-mask; + -webkit-mask-image: $user-team-svg; + mask-image: $user-team-svg; +} %with-visibility-hide-icon { @extend %with-icon; @@ -596,6 +1664,7 @@ } %with-visibility-hide-mask { @extend %with-mask; + -webkit-mask-image: $visibility-hide-svg; mask-image: $visibility-hide-svg; } @@ -605,5 +1674,16 @@ } %with-visibility-show-mask { @extend %with-mask; + -webkit-mask-image: $visibility-show-svg; mask-image: $visibility-show-svg; } + +%with-webhook-icon { + @extend %with-icon; + background-image: $webhook-svg; +} +%with-webhook-mask { + @extend %with-mask; + -webkit-mask-image: $webhook-svg; + mask-image: $webhook-svg; +} From e460c8b2b42eb8501cc49306875e581fd34d5da1 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 18 Feb 2020 13:42:08 +0000 Subject: [PATCH 11/83] ui: Upgrade circle CI node image to use node 12 (#7314) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ddb106030e..6035003e55 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,7 +5,7 @@ references: images: go: &GOLANG_IMAGE circleci/golang:1.14.1 middleman: &MIDDLEMAN_IMAGE hashicorp/middleman-hashicorp:0.3.40 - ember: &EMBER_IMAGE circleci/node:8-browsers + ember: &EMBER_IMAGE circleci/node:12-browsers paths: test-results: &TEST_RESULTS_DIR /tmp/test-results From 59e8261936cca7508daba715bf835d1205c3bc5a Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 18 Feb 2020 15:00:22 +0000 Subject: [PATCH 12/83] ui: Upgrade ember-cli-api-double and ember-data to fix up stage/preview site (#7316) --- ui-v2/yarn.lock | 2065 ++++++++++++++++++++++++++--------------------- 1 file changed, 1165 insertions(+), 900 deletions(-) diff --git a/ui-v2/yarn.lock b/ui-v2/yarn.lock index 8eb4227eaa..8abb05a5b5 100644 --- a/ui-v2/yarn.lock +++ b/ui-v2/yarn.lock @@ -2,14 +2,44 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: - "@babel/highlight" "^7.0.0" + "@babel/highlight" "^7.8.3" -"@babel/core@^7.0.0", "@babel/core@^7.1.6", "@babel/core@^7.2.2", "@babel/core@^7.3.3", "@babel/core@^7.3.4", "@babel/core@^7.4.3": +"@babel/compat-data@^7.8.4": + version "7.8.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" + integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== + dependencies: + browserslist "^4.8.5" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.0.0", "@babel/core@^7.1.6", "@babel/core@^7.3.3", "@babel/core@^7.3.4", "@babel/core@^7.8.3", "@babel/core@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" + integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helpers" "^7.8.4" + "@babel/parser" "^7.8.4" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.2.2", "@babel/core@^7.4.3": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== @@ -29,7 +59,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.5.5": +"@babel/generator@^7.4.0": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== @@ -40,237 +70,279 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== +"@babel/generator@^7.5.5", "@babel/generator@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" + integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-create-class-features-plugin@^7.4.4", "@babel/helper-create-class-features-plugin@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4" - integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg== +"@babel/helper-call-delegate@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" + integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-define-map@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" - integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== +"@babel/helper-compilation-targets@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" + integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" + "@babel/compat-data" "^7.8.4" + browserslist "^4.8.5" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" + integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + +"@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" + integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== + dependencies: + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== +"@babel/helper-function-name@^7.1.0", "@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.8.3" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.8.3" -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== +"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" + integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== +"@babel/helper-replace-supers@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" + integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== +"@babel/helper-split-export-declaration@^7.4.4", "@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.8.3" -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helpers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" - integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== +"@babel/helpers@^7.5.5", "@babel/helpers@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" + integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.4" + "@babel/types" "^7.8.3" -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.3.4", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5": +"@babel/parser@^7.3.4", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" + integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== + +"@babel/parser@^7.4.3": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.3.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" - integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== +"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.3.4", "@babel/plugin-proposal-class-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" + integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-proposal-decorators@^7.3.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0" - integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw== +"@babel/plugin-proposal-decorators@^7.3.0", "@babel/plugin-proposal-decorators@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" + integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.2.0" + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-decorators" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" - integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" + integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" "@babel/plugin-proposal-object-rest-spread@^7.5.5": version "7.5.5" @@ -280,185 +352,229 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-proposal-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" + integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== +"@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-proposal-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" + integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-syntax-decorators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" - integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== +"@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" + integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-decorators@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" + integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-typescript@^7.2.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" - integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-async-to-generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" - integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-block-scoping@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce" - integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg== +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-typescript@^7.2.0", "@babel/plugin-syntax-typescript@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" + integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.5.5", "@babel/plugin-transform-block-scoping@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" - integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== +"@babel/plugin-transform-classes@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" + integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-destructuring@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a" - integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ== +"@babel/plugin-transform-destructuring@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" + integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== +"@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" + integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" + integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-modules-amd@^7.0.0", "@babel/plugin-transform-modules-amd@^7.2.0", "@babel/plugin-transform-modules-amd@^7.5.0": +"@babel/plugin-transform-modules-amd@^7.0.0", "@babel/plugin-transform-modules-amd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" + integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== + dependencies: + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-amd@^7.2.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== @@ -467,131 +583,141 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" - integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== +"@babel/plugin-transform-modules-commonjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" + integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" - integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== +"@babel/plugin-transform-modules-systemjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" + integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-umd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" + integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== dependencies: - regexp-tree "^0.1.6" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== +"@babel/plugin-transform-new-target@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== +"@babel/plugin-transform-object-super@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-parameters@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" + integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-call-delegate" "^7.8.3" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" + integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== +"@babel/plugin-transform-regenerator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" + integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" + integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-runtime@^7.2.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz#a6331afbfc59189d2135b2e09474457a8e3d28bc" - integrity sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w== +"@babel/plugin-transform-runtime@^7.2.0", "@babel/plugin-transform-runtime@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169" + integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== +"@babel/plugin-transform-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" + integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-typescript@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917" + integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-typescript" "^7.8.3" "@babel/plugin-transform-typescript@~7.4.0": version "7.4.5" @@ -601,87 +727,93 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/polyfill@^7.0.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.4.tgz#78801cf3dbe657844eeabf31c1cae3828051e893" - integrity sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg== +"@babel/polyfill@^7.0.0", "@babel/polyfill@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.8.3.tgz#2333fc2144a542a7c07da39502ceeeb3abe4debd" + integrity sha512-0QEgn2zkCzqGIkSWWAEmvxD7e00Nm9asTtQvi7HdlYvMhjy/J38V/1Y9ode0zEJeIuxAI0uftiAzqc7nVeWUGg== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.2" -"@babel/preset-env@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a" - integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A== +"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" + integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.5.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.5.5" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.5.0" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.5.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.5.5" - browserslist "^4.6.0" - core-js-compat "^3.1.1" + "@babel/compat-data" "^7.8.4" + "@babel/helper-compilation-targets" "^7.8.4" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.8.3" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.8.3" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.8.4" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.8.3" + "@babel/plugin-transform-modules-commonjs" "^7.8.3" + "@babel/plugin-transform-modules-systemjs" "^7.8.3" + "@babel/plugin-transform-modules-umd" "^7.8.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.4" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.3" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/types" "^7.8.3" + browserslist "^4.8.5" + core-js-compat "^3.6.2" invariant "^2.2.2" - js-levenshtein "^1.1.3" + levenary "^1.1.1" semver "^5.5.0" -"@babel/runtime@^7.2.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" - integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ== +"@babel/runtime@^7.2.0", "@babel/runtime@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" + integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4": +"@babel/template@^7.4.0": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== @@ -690,7 +822,31 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5": +"@babel/template@^7.4.4", "@babel/template@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" + integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/traverse@^7.1.6", "@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" + integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.4" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.4" + "@babel/types" "^7.8.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/traverse@^7.4.3": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== @@ -705,10 +861,10 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.2.0", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" - integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== +"@babel/types@^7.1.6", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" + integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== dependencies: esutils "^2.0.2" lodash "^4.17.13" @@ -722,11 +878,12 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@ember-data/-build-infra@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/-build-infra/-/-build-infra-3.12.0.tgz#474e50c72553006e7dd25fb2585f79dc41e47123" - integrity sha512-v2lxJo3uKabi5tPd9YcL5JSp64/guUOjgUq6LmzeIZI9kY62UxHEMpuLC/q2LjzBB/EJRbQAR8DXTcgfhmQCmA== +"@ember-data/-build-infra@3.12.5": + version "3.12.5" + resolved "https://registry.yarnpkg.com/@ember-data/-build-infra/-/-build-infra-3.12.5.tgz#14634c7d0f18855d5d030c56b35fc0c09e6a7866" + integrity sha512-8LTGcTX63yBBPKYPcHi8RO21tFYTO946wDfSKrjcHqCm3U5cIQWf/6jl8AGzRNHGjKh0k6MACZUj0zkURYERAw== dependencies: + "@babel/plugin-transform-block-scoping" "^7.5.5" babel-plugin-debug-macros "^0.3.2" babel-plugin-feature-flags "^0.3.1" babel-plugin-filter-imports "^3.0.0" @@ -749,30 +906,30 @@ rsvp "^4.8.5" silent-error "^1.1.1" -"@ember-data/adapter@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/adapter/-/adapter-3.12.0.tgz#5e160019d7959e87ad6b4287c0adc79c546a9e3a" - integrity sha512-2djnTDFXnKyX16B69RHJmevUH4RR04X0+2bkhOt2tRsGoYYiXt7vxb1vpjZkpgZkhg37/gPdG95Yc6m5EJQB7Q== +"@ember-data/adapter@3.12.5": + version "3.12.5" + resolved "https://registry.yarnpkg.com/@ember-data/adapter/-/adapter-3.12.5.tgz#7545c0a2afae73463d67c5c7a6976bf368f6c735" + integrity sha512-487rypsRZJd+NzqEVpdkpaEiGr8SKFXJJKE94ArSXA0gBrYALvvOOLd4PPfgSIFi689XLiI4hakq4Cq+tgkFgw== dependencies: - "@ember-data/-build-infra" "3.12.0" + "@ember-data/-build-infra" "3.12.5" ember-cli-babel "^7.8.0" ember-cli-test-info "^1.0.0" ember-cli-typescript "^2.0.2" -"@ember-data/canary-features@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/canary-features/-/canary-features-3.12.0.tgz#325ca9ef12a59b69cfd7f320767e8513f0ed05e0" - integrity sha512-tgTY/Nbj8uSRzHk+TxOtmsnk0Hv25p+6B4KE68mwSNZO6dKFbaKvjPXfdgWkIclLaIEIP0rgfUPXqiiLJ71tDg== +"@ember-data/canary-features@3.12.5": + version "3.12.5" + resolved "https://registry.yarnpkg.com/@ember-data/canary-features/-/canary-features-3.12.5.tgz#3c8d4008a52a56ecb74875368fd90cacb0d10c98" + integrity sha512-yV0ZRivKiKAUXj4iWfr9I8Wcl21MUI0aRboinPdxqf7vF1ixlHsUn2eOHO5VzCN+q3NQEZ4M+NUoZjyk/JuH1A== dependencies: ember-cli-babel "^7.8.0" -"@ember-data/model@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/model/-/model-3.12.0.tgz#252dd52b39945d9a15a7e2eb3c26cffac43fa224" - integrity sha512-nprNXgfPRh6GPJdxvbrKTKFbbEcaxLgHux2xxsldpyCO7tkEMTvg4U5ezxLHfcxzsTwVFSg3hGn740USsTg/Tg== +"@ember-data/model@3.12.5": + version "3.12.5" + resolved "https://registry.yarnpkg.com/@ember-data/model/-/model-3.12.5.tgz#a0b51eefef5405d984cdb44d9b5f6525a76867c8" + integrity sha512-emLxwUHM2kqb+v0F2e3ZPPaEgUyeSXtaGfC1E23FpIgdHCFdKDc+aF/VojAw1k4Z9YKgy828vQhP3F0GKAGL2w== dependencies: - "@ember-data/-build-infra" "3.12.0" - "@ember-data/store" "3.12.0" + "@ember-data/-build-infra" "3.12.5" + "@ember-data/store" "3.12.5" ember-cli-babel "^7.8.0" ember-cli-string-utils "^1.1.0" ember-cli-test-info "^1.0.0" @@ -784,25 +941,25 @@ resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843" integrity sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ== -"@ember-data/serializer@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.12.0.tgz#3c97ccc931a5bf12125a948d8a9137de3071bec8" - integrity sha512-4B4m8Iv0bqjFPcv3w3Amd9FqzH1DdBUxuuKNSPQiS08mterDKgFklIqaWcsRuycnBCRog8MLgJRFrxq2sKUjag== +"@ember-data/serializer@3.12.5": + version "3.12.5" + resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.12.5.tgz#dfaf0773a9d545181073749b8b25602812dde6aa" + integrity sha512-i81wkUpcETLrabdnz7qaep51lyICiSS9wnFirO3YRCmxoZQld5hn99zn9E7bsP+u1GeVxi76RIeA0xA1gElQ5w== dependencies: - "@ember-data/-build-infra" "3.12.0" - "@ember-data/store" "3.12.0" + "@ember-data/-build-infra" "3.12.5" + "@ember-data/store" "3.12.5" ember-cli-babel "^7.8.0" ember-cli-test-info "^1.0.0" ember-cli-typescript "^2.0.2" -"@ember-data/store@3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@ember-data/store/-/store-3.12.0.tgz#0b1e6a25b5ff79e96faded4de176f65837b8a40c" - integrity sha512-7KXYAzjL7UYeeWNK2WsV0C9wAMwv2KNQH77Grt5UFb7nLk1NbM3Ct1uUQw7A/aubfI15PcHk3n7c5MFx2WVjTg== +"@ember-data/store@3.12.5": + version "3.12.5" + resolved "https://registry.yarnpkg.com/@ember-data/store/-/store-3.12.5.tgz#d2d79b96f94ac8ccf2f6b983ae0ed24081ebc863" + integrity sha512-lvh/grXG6uOn//iL1pKHf7Umia47nkXgKSxyb5IFYBpGfeWKQm7O8RI0HeZb9poeWgsiO4dT98SH7KK2818HZg== dependencies: - "@ember-data/-build-infra" "3.12.0" - "@ember-data/adapter" "3.12.0" - "@ember-data/canary-features" "3.12.0" + "@ember-data/-build-infra" "3.12.5" + "@ember-data/adapter" "3.12.5" + "@ember-data/canary-features" "3.12.5" ember-cli-babel "^7.8.0" ember-cli-path-utils "^1.0.0" ember-cli-typescript "^2.0.2" @@ -997,9 +1154,9 @@ integrity sha512-8OcgesUjWQ8AjaXzbz3tGJQn1kM0sN6pLidGM7isNPUyYmIjIEXQzaeUQYzsfv0N2Ko9ZuOXYUsaBl8IK1KGow== "@hashicorp/ember-cli-api-double@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-3.0.0.tgz#2a9e8e475c8ac9780221f46584297640870f9f1c" - integrity sha512-3jpkkB0jsVWbpI3ySsBJ5jmSb1bPkJu8nZTh9YvIiQDhH76zqHY7AXi35oSV4M83f5qYtBLJjDSdwrf0zJ9Dlg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-3.0.2.tgz#4f66f22e4b54293c46fe16dc24568267526c8acd" + integrity sha512-NmcA+jBcBO8tzCfbqWzrQdHvTUeaj71Gdu9phxaULMtM9Zw7BZtHlvb2P1ivknGGw92w9Se50pDNjkB57ww22A== dependencies: "@hashicorp/api-double" "^1.6.1" array-range "^1.0.1" @@ -1091,17 +1248,24 @@ resolved "https://registry.yarnpkg.com/@types/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz#38f8462fecaebc4e09a32e4d4ed1b9808f75bbca" integrity sha512-SLk4/hFc2kGvgwNFrpn2O1juxFOllcHAywvlo7VwxfExLzoz1GGJ0oIZCwj5fwSpvHw4AWpZjJ1fUvb62PDayQ== -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@*": + version "0.0.42" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.42.tgz#8d0c1f480339efedb3e46070e22dd63e0430dd11" + integrity sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ== "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== -"@types/glob@^7.1.1": +"@types/fs-extra@^5.0.5": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.1.0.tgz#2a325ef97901504a3828718c390d34b8426a10a1" + integrity sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ== + dependencies: + "@types/node" "*" + +"@types/glob@*", "@types/glob@^7.1.1": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== @@ -1115,7 +1279,7 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@^12.7.2": +"@types/node@*": version "12.7.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== @@ -1125,6 +1289,14 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/rimraf@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.3.tgz#0199a46af106729ba14213fda7b981278d8c84f2" + integrity sha512-dZfyfL/u9l/oi984hEXdmAjX3JHry7TLWw43u1HQ8HhPv6KtfxnrZ3T/bleJ0GEvnk9t5sM7eePkgMqz3yBcGg== + dependencies: + "@types/glob" "*" + "@types/node" "*" + "@types/symlink-or-copy@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#4151a81b4052c80bc2becbae09f3a9ec010a9c7a" @@ -1289,9 +1461,9 @@ JSV@^4.0.x: integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c= abab@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.1.tgz#3fa17797032b71410ec372e11668f4b4ffc86a82" - integrity sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== abbrev@1: version "1.1.1" @@ -1314,9 +1486,9 @@ acorn-dynamic-import@^3.0.0: acorn "^5.0.0" acorn-globals@^4.3.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e" - integrity sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ== + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" @@ -1336,15 +1508,20 @@ acorn@^5.0.0, acorn@^5.6.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7: +acorn@^6.0.1, acorn@^6.0.2: + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== + +acorn@^6.0.7: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== -acorn@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" - integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== after@0.8.2: version "0.8.2" @@ -1369,7 +1546,17 @@ ajv-keywords@^3.1.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: +ajv@^6.1.0, ajv@^6.5.5: + version "6.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" + integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.10.2, ajv@^6.9.1: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== @@ -1442,11 +1629,11 @@ ansi-styles@~1.0.0: integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= ansi-to-html@^0.6.6: - version "0.6.11" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.11.tgz#5093fc4962186c0e9343dec572a4f71abdc93439" - integrity sha512-88XZtrcwrfkyn6fGstHnkaF1kl7hGtNCYh4vSmItgEV+6JnQHryDBf7udF4f2RhTRQmYvJvPcTtqgaqrxzc9oA== + version "0.6.14" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.14.tgz#65fe6d08bba5dd9db33f44a20aec331e0010dad8" + integrity sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA== dependencies: - entities "^1.1.1" + entities "^1.1.2" ansicolors@~0.2.1: version "0.2.1" @@ -1694,7 +1881,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== @@ -1717,9 +1904,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== babel-code-frame@^6.26.0: version "6.26.0" @@ -1934,6 +2121,13 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" +babel-plugin-ember-data-packages-polyfill@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-data-packages-polyfill/-/babel-plugin-ember-data-packages-polyfill-0.1.2.tgz#21154c095ddc703722b1fb8bb06c126c0b6d77dc" + integrity sha512-kTHnOwoOXfPXi00Z8yAgyD64+jdSXk3pknnS7NlqnCKAU6YDkXZ4Y7irl66kaZjZn0FBBt0P4YOZFZk85jYOww== + dependencies: + "@ember-data/rfc395-data" "^0.0.4" + babel-plugin-ember-modules-api-polyfill@^2.12.0, babel-plugin-ember-modules-api-polyfill@^2.6.0: version "2.12.0" resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.12.0.tgz#a5e703205ba4e625a7fab9bb1aea64ef3222cf75" @@ -2431,6 +2625,13 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.2.0.tgz#e7c6ba82d4f5f5758c26078fe8eea28881233311" integrity sha512-bHhs98rj/7i/RZpCSJ3uk55pLXOItjIrh2sRQZSM6OoktScX+LxJzvlU+FELp9j3TdcddTmmYArLSGptCTwjuw== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + blank-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/blank-object/-/blank-object-1.0.2.tgz#f990793fbe9a8c8dd013fb3219420bec81d5f4b9" @@ -2448,11 +2649,16 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.1.1, bluebird@^3.4.6, bluebird@^3.5.5: +bluebird@^3.1.1, bluebird@^3.4.6: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -2583,7 +2789,24 @@ broccoli-babel-transpiler@^6.5.0: rsvp "^4.8.2" workerpool "^2.3.0" -broccoli-babel-transpiler@^7.1.2, broccoli-babel-transpiler@^7.2.0: +broccoli-babel-transpiler@^7.1.2, broccoli-babel-transpiler@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.4.0.tgz#f3069f0f77e8017aa17e1e757dfb4a30de044182" + integrity sha512-DzPXQr1C+zOgzXG40wqPjtjSSa6wRKb+Ls45Qtq7Pn+GxL3/jIvQOBZi0/irZ5dlYVbRMEZiUnaIBIOha2ygIw== + dependencies: + "@babel/core" "^7.8.3" + "@babel/polyfill" "^7.8.3" + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^3.0.2" + broccoli-persistent-filter "^2.2.1" + clone "^2.1.2" + hash-for-dep "^1.4.7" + heimdalljs-logger "^0.1.9" + json-stable-stringify "^1.0.1" + rsvp "^4.8.4" + workerpool "^3.1.1" + +broccoli-babel-transpiler@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.2.0.tgz#5c0d694c4055106abb385e2d3d88936d35b7cb18" integrity sha512-lkP9dNFfK810CRHHWsNl9rjyYqcXH3qg0kArnA6tV9Owx3nlZm3Eyr0cGo6sMUQCNLH+2oKrRjOdUGSc6Um6Cw== @@ -3154,14 +3377,14 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -browserslist@^4.6.0, browserslist@^4.6.6: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== +browserslist@^4.8.3, browserslist@^4.8.5: + version "4.8.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" + integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" + caniuse-lite "^1.0.30001027" + electron-to-chromium "^1.3.349" + node-releases "^1.1.49" bser@^2.0.0: version "2.1.0" @@ -3199,9 +3422,9 @@ buffer-xor@^1.0.3: integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -3347,15 +3570,15 @@ can-symlink@^1.0.0: dependencies: tmp "0.0.28" -caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000989: +caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: version "1.0.30000989" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== -caniuse-lite@^1.0.30000844: - version "1.0.30001022" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz#9eeffe580c3a8f110b7b1742dcf06a395885e4c6" - integrity sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A== +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001027: + version "1.0.30001028" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001028.tgz#f2241242ac70e0fa9cda55c2776d32a0867971c2" + integrity sha512-Vnrq+XMSHpT7E+LWoIYhs3Sne8h9lx9YJV3acH3THNCwU/9zV93/ta4xVfzTtnqd3rvnuVpVjE3DFqf56tr3aQ== capture-exit@^2.0.0: version "2.0.0" @@ -3463,9 +3686,9 @@ chokidar@^2.0.2: fsevents "^1.2.7" chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.0: version "1.0.2" @@ -3670,11 +3893,16 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.15.1, commander@^2.19.0, commander@^2.20.0, commander@^2.6.0, commander@~2.20.0: +commander@^2.15.1, commander@^2.19.0, commander@^2.6.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@^2.20.0, commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + common-tags@^1.4.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -3768,11 +3996,9 @@ connect@^3.6.6: utils-merge "1.0.1" console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" @@ -3819,14 +4045,7 @@ continuable-cache@^0.3.1: resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -convert-source-map@^1.1.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -3878,29 +4097,24 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150" - integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A== +core-js-compat@^3.6.2: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" + integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== dependencies: - browserslist "^4.6.6" - semver "^6.3.0" + browserslist "^4.8.3" + semver "7.0.0" core-js@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4= -core-js@^2.4.0, core-js@^2.5.0: +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== -core-js@^2.6.5: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - core-object@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/core-object/-/core-object-3.1.5.tgz#fa627b87502adc98045e44678e9a8ec3b9c0d2a9" @@ -4057,11 +4271,6 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= - debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4069,7 +4278,7 @@ debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3. dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.0.1, debug@^3.1.0, debug@^3.2.6: +debug@^3.0.0, debug@^3.0.1, debug@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -4124,11 +4333,6 @@ deep-equal@~1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -4217,9 +4421,9 @@ depd@~1.1.2: integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -4246,11 +4450,6 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -4350,15 +4549,15 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.30: +electron-to-chromium@^1.3.30: version "1.3.252" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.252.tgz#5b6261965b564a0f4df0f1c86246487897017f52" integrity sha512-NWJ5TztDnjExFISZHFwpoJjMbLUifsNBnx7u2JI0gCw6SbKyQYYWWtBHasO/jPtHym69F4EZuTpRNGN11MT/jg== -electron-to-chromium@^1.3.47: - version "1.3.340" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" - integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww== +electron-to-chromium@^1.3.349, electron-to-chromium@^1.3.47: + version "1.3.354" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.354.tgz#6c6ad9ef63654c4c022269517c5a3095cebc94db" + integrity sha512-24YMkNiZWOUeF6YeoscWfIGP0oMx+lJpU/miwI+lcu7plIDpyZn8Gx0lx0qTDlzGoz7hx+lpyD8QkbkX5L2Pqw== elegant-spinner@^1.0.1: version "1.0.1" @@ -4366,9 +4565,9 @@ elegant-spinner@^1.0.1: integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= elliptic@^6.0.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" - integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -4535,7 +4734,7 @@ ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-be ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.2.0, ember-cli-babel@^7.7.0, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: +ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.2.0, ember-cli-babel@^7.7.0, ember-cli-babel@^7.7.3: version "7.11.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.11.0.tgz#a2f4e4f123a4690968b512b87b4ff4bfa57ec244" integrity sha512-ykEsr7XoEPaADCBCJMViycCok1grtBRGvZ1k/atlL/gQYCQ1W4E4OROY/Mm2YBgyLftBv6buH7IZsULyQRZUmg== @@ -4562,6 +4761,38 @@ ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cl ensure-posix-path "^1.0.2" semver "^5.5.0" +ember-cli-babel@^7.8.0: + version "7.18.0" + resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.18.0.tgz#e979b73eee00cd93f63452c6170d045e8832f29c" + integrity sha512-OLPfYD8wSfCrmGHcUf8zEfySSvbAL+5Qp2RWLycJIMaBZhg+SncKj5kVkL3cPJR5n2hVHPdfmKTQIYjOYl6FnQ== + dependencies: + "@babel/core" "^7.8.4" + "@babel/helper-compilation-targets" "^7.8.4" + "@babel/plugin-proposal-class-properties" "^7.8.3" + "@babel/plugin-proposal-decorators" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.8.3" + "@babel/plugin-transform-typescript" "^7.8.3" + "@babel/polyfill" "^7.8.3" + "@babel/preset-env" "^7.8.4" + "@babel/runtime" "^7.8.4" + amd-name-resolver "^1.2.1" + babel-plugin-debug-macros "^0.3.0" + babel-plugin-ember-data-packages-polyfill "^0.1.2" + babel-plugin-ember-modules-api-polyfill "^2.12.0" + babel-plugin-module-resolver "^3.1.1" + broccoli-babel-transpiler "^7.4.0" + broccoli-debug "^0.6.4" + broccoli-funnel "^2.0.1" + broccoli-source "^1.1.0" + clone "^2.1.2" + ember-cli-babel-plugin-helpers "^1.1.0" + ember-cli-version-checker "^4.1.0" + ensure-posix-path "^1.0.2" + fixturify-project "^1.10.0" + rimraf "^3.0.1" + semver "^5.5.0" + ember-cli-broccoli-sane-watcher@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-3.0.0.tgz#dc1812c047e1ceec4413d3c41b51a9ffc61b4cfe" @@ -4846,6 +5077,15 @@ ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.0.1, ember-cli-ve resolve-package-path "^1.2.6" semver "^5.6.0" +ember-cli-version-checker@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-4.1.0.tgz#7fc9836bdbc87451d286ba6a9a89b23591d8bbb7" + integrity sha512-yLf2YqotTSsjiXwx9Dt6H7AU0QcldFn5SLk/pG3Zqb0aHNeanBOPlx4/Ysa46ILGWYIh0fDH34AEVRueXTrQBQ== + dependencies: + resolve-package-path "^2.0.0" + semver "^6.3.0" + silent-error "^1.1.1" + ember-cli-yadda@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/ember-cli-yadda/-/ember-cli-yadda-0.5.0.tgz#bbf564b996bd05f0ad4c7422a89795eca3ea3b47" @@ -5008,15 +5248,15 @@ ember-copy@^1.0.0: ember-cli-babel "^6.6.0" ember-data@~3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.12.0.tgz#ce20c41163ce50124d12a4370641fd9b4a21c3e2" - integrity sha512-muSyUGQXxxd3jyGwLJetKdI1X15Vi/HjdBSg02oj5m9tKRVEfDtE133c+KohgHbut9ko1fsBUXxy7pMdY2d5jQ== + version "3.12.5" + resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.12.5.tgz#b86f209fdff7269dd9c00a60f8113a20bc1c5dd6" + integrity sha512-hcl372NrhrLVYnAG+MinAOXy9pgvVX7sHXjzt5zD2j5vDwFhgrV9wDxiLs3mESb2F0frdQ7MnqquVmlvW82SYw== dependencies: - "@ember-data/-build-infra" "3.12.0" - "@ember-data/adapter" "3.12.0" - "@ember-data/model" "3.12.0" - "@ember-data/serializer" "3.12.0" - "@ember-data/store" "3.12.0" + "@ember-data/-build-infra" "3.12.5" + "@ember-data/adapter" "3.12.5" + "@ember-data/model" "3.12.5" + "@ember-data/serializer" "3.12.5" + "@ember-data/store" "3.12.5" "@ember/ordered-set" "^2.0.3" "@glimmer/env" "^0.1.7" ember-cli-babel "^7.8.0" @@ -5347,9 +5587,9 @@ encodeurl@~1.0.2: integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" @@ -5394,12 +5634,12 @@ engine.io@~3.3.1: ws "~6.1.0" enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== dependencies: graceful-fs "^4.1.2" - memory-fs "^0.4.0" + memory-fs "^0.5.0" tapable "^1.0.0" ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2, ensure-posix-path@^1.1.0: @@ -5407,7 +5647,7 @@ ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2, en resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce" integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw== -entities@^1.1.1, entities@~1.1.1: +entities@^1.1.2, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== @@ -5496,11 +5736,11 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" - integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + version "1.14.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== dependencies: - esprima "^3.1.3" + esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" @@ -5612,12 +5852,7 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -esprima@^3.1.3, esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -5627,6 +5862,11 @@ esprima@~3.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" integrity sha1-U88kes2ncxPlUcOqLnM0LT+099k= +esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" @@ -5672,9 +5912,9 @@ events-to-array@^1.0.1: integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y= events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -5860,6 +6100,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -5885,11 +6130,11 @@ fast-glob@^3.0.3: micromatch "^4.0.2" fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.4: +fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -5963,6 +6208,11 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fileset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" @@ -5972,9 +6222,9 @@ fileset@^2.0.3: minimatch "^3.0.3" filesize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.1.2.tgz#fcd570af1353cea97897be64f56183adb995994b" - integrity sha512-iSWteWtfNcrWQTkQw8ble2bnonSl7YJImsn9OZKpE2E4IHhXI78eASpDYUljXZZdYj36QsEKjOs/CsiDqmKMJw== + version "4.2.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.2.1.tgz#ab1cb2069db5d415911c1a13e144c0e743bc89bc" + integrity sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA== fill-range@^4.0.0: version "4.0.0" @@ -6087,6 +6337,25 @@ fireworm@^0.7.0: lodash.flatten "^3.0.2" minimatch "^3.0.2" +fixturify-project@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/fixturify-project/-/fixturify-project-1.10.0.tgz#091c452a9bb15f09b6b9cc7cf5c0ad559f1d9aad" + integrity sha512-L1k9uiBQuN0Yr8tA9Noy2VSQ0dfg0B8qMdvT7Wb5WQKc7f3dn3bzCbSrqlb+etLW+KDV4cBC7R1OvcMg3kcxmA== + dependencies: + fixturify "^1.2.0" + tmp "^0.0.33" + +fixturify@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fixturify/-/fixturify-1.2.0.tgz#abe8c52dd27dbbfdb874a02893781c93425663ea" + integrity sha512-b5CMQmBZKsGR6HGqdSrLOGYGHIqrR0CUrcGU/lDL0mYy+DtGm5cnb61Z0UiIUqMVZIoV0CbN+u9/Gwjj+ICg0A== + dependencies: + "@types/fs-extra" "^5.0.5" + "@types/minimatch" "^3.0.3" + "@types/rimraf" "^2.0.2" + fs-extra "^7.0.1" + matcher-collection "^2.0.0" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -6229,13 +6498,6 @@ fs-extra@^8.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== - dependencies: - minipass "^2.2.1" - fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.4, fs-tree-diff@^0.5.6, fs-tree-diff@^0.5.7: version "0.5.9" resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-0.5.9.tgz#a4ec6182c2f5bd80b9b83c8e23e4522e6f5fd946" @@ -6294,12 +6556,12 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.11" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" fsevents@~2.1.2: version "2.1.2" @@ -6347,6 +6609,11 @@ gaze@^1.0.0: dependencies: globule "^1.0.0" +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -6408,7 +6675,12 @@ git-repo-info@^1.4.1: resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.4.1.tgz#2a072823254aaf62fcf0766007d7b6651bd41943" integrity sha1-KgcoIyVKr2L88HZgB9e2ZRvUGUM= -git-repo-info@^2.0.0, git-repo-info@^2.1.0: +git-repo-info@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.1.tgz#220ffed8cbae74ef8a80e3052f2ccb5179aed058" + integrity sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg== + +git-repo-info@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.0.tgz#13d1f753c75bc2994432e65a71e35377ff563813" integrity sha512-+kigfDB7j3W80f74BoOUX+lKOmf4pR3/i2Ww6baKTCPe2hD4FRdjhV3s4P5Dy0Tak1uY1891QhKoYNtnyX2VvA== @@ -6458,7 +6730,7 @@ glob@^5.0.10: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.3, glob@~7.1.1, glob@~7.1.6: +glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1, glob@~7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -6470,7 +6742,7 @@ glob@^7.0.0, glob@^7.1.3, glob@~7.1.1, glob@~7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.0.4, glob@^7.1.2, glob@^7.1.4: +glob@^7.0.3, glob@^7.0.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -6579,7 +6851,12 @@ got@^8.0.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +graceful-fs@^4.1.3, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== @@ -6594,10 +6871,10 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.11, handlebars@^4.0.13, handlebars@^4.0.4, handlebars@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" - integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== +handlebars@^4.0.11, handlebars@^4.3.1: + version "4.7.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" + integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -6605,10 +6882,10 @@ handlebars@^4.0.11, handlebars@^4.0.13, handlebars@^4.0.4, handlebars@^4.1.2: optionalDependencies: uglify-js "^3.1.4" -handlebars@^4.3.1: - version "4.7.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.2.tgz#01127b3840156a0927058779482031afe0e730d7" - integrity sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw== +handlebars@^4.0.13, handlebars@^4.0.4, handlebars@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" + integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -6632,7 +6909,7 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: +har-validator@~5.1.0, har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -6681,12 +6958,7 @@ has-symbol-support-x@^1.4.1: resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-symbols@^1.0.1: +has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -6927,7 +7199,7 @@ husky@^3.0.5: run-node "^1.0.0" slash "^3.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6944,13 +7216,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -7042,7 +7307,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@~1.3.0: +ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -7105,7 +7370,7 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" -invariant@^2.2.2: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -7247,11 +7512,9 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -7559,11 +7822,6 @@ js-base64@^2.1.8: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - js-reporters@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/js-reporters/-/js-reporters-1.2.1.tgz#f88c608e324a3373a95bcc45ad305e5c979c459b" @@ -7698,9 +7956,9 @@ json5@^1.0.1: minimist "^1.2.0" json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== dependencies: minimist "^1.2.0" @@ -7773,9 +8031,9 @@ kind-of@^5.0.0: integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== layout-bin-packer@^1.4.0: version "1.5.0" @@ -7800,6 +8058,18 @@ leek@0.0.24: lodash.assign "^3.2.0" rsvp "^3.0.21" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -8317,7 +8587,15 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -memory-fs@^0.4.0, memory-fs@~0.4.1: +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -8445,20 +8723,20 @@ mime-db@1.43.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0" integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw== -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.19, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== - dependencies: - mime-db "1.40.0" - -mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.26" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: mime-db "1.43.0" +mime-types@^2.1.18, mime-types@^2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -8511,7 +8789,7 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.0, minipass@^2.2.1, minipass@^2.3.5: +minipass@^2.2.0: version "2.5.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.0.tgz#dddb1d001976978158a05badfcbef4a771612857" integrity sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q== @@ -8519,13 +8797,6 @@ minipass@^2.2.0, minipass@^2.2.1, minipass@^2.3.5: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -8647,15 +8918,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -8776,28 +9038,12 @@ node-notifier@^5.0.1: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== +node-releases@^1.1.49: + version "1.1.49" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.49.tgz#67ba5a3fac2319262675ef864ed56798bb33b93e" + integrity sha512-xH8t0LS0disN0mtRCh+eByxFPie+msJUBL/lJDBuap53QGiYPa9joh83K4pCZgWJ+2L4b9h88vCVdXQ60NO2bg== dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.29: - version "1.1.29" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.29.tgz#86a57c6587a30ecd6726449e5d293466b0a0bb86" - integrity sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ== - dependencies: - semver "^5.3.0" + semver "^6.3.0" node-sass@^4.9.3: version "4.13.1" @@ -8842,14 +9088,6 @@ nomnom@^1.5.x: dependencies: abbrev "1" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -8886,11 +9124,6 @@ normalize-url@2.0.1: query-string "^5.0.1" sort-keys "^2.0.0" -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - npm-git-info@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/npm-git-info/-/npm-git-info-1.0.3.tgz#a933c42ec321e80d3646e0d6e844afe94630e1d5" @@ -8906,14 +9139,6 @@ npm-package-arg@^6.1.0: semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.6: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -8928,7 +9153,7 @@ npm-run-path@^3.0.0: dependencies: path-key "^3.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -8949,9 +9174,9 @@ number-is-nan@^1.0.0: integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.0.9: - version "2.1.4" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" - integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" @@ -9085,7 +9310,19 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= @@ -9131,7 +9368,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0, osenv@^0.1.3, osenv@^0.1.4, osenv@^0.1.5: +osenv@0, osenv@^0.1.3, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -9171,7 +9408,14 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-limit@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== @@ -9229,9 +9473,9 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" @@ -9250,9 +9494,9 @@ parent-module@^1.0.0: callsites "^3.0.0" parse-asn1@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" - integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -9632,9 +9876,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.3.1" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.1.tgz#d5aa3873a35ec450bc7db9012ad5a7246f6fc8bd" - integrity sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== public-encrypt@^4.0.0: version "4.0.3" @@ -9788,16 +10032,6 @@ raw-body@~1.1.0: bytes "1" string_decoder "0.10" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -9843,9 +10077,9 @@ read-pkg@^5.1.1: type-fest "^0.6.0" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -9976,11 +10210,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.6: - version "0.1.13" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.13.tgz#5b19ab9377edc68bc3679256840bb29afc158d7f" - integrity sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw== - regexp.prototype.flags@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" @@ -10008,10 +10237,10 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411" - integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ== +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.1.0" @@ -10026,9 +10255,9 @@ regjsgen@^0.2.0: integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.1.4: version "0.1.5" @@ -10038,9 +10267,9 @@ regjsparser@^0.1.4: jsesc "~0.5.0" regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + version "0.6.3" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.3.tgz#74192c5805d35e9f5ebe3c1fb5b40d40a8a38460" + integrity sha512-8uZvYbnfAtEm9Ab8NTb3hdLwL4g/LQzEYP7Xs27T96abJCCE2d6r3cPZPQEsLKy0vRSGVNG+/zVGtLr86HQduA== dependencies: jsesc "~0.5.0" @@ -10066,23 +10295,23 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: - lodash "^4.17.11" + lodash "^4.17.15" request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== dependencies: - request-promise-core "1.1.2" + request-promise-core "1.1.3" stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0, request@^2.88.0: +request@^2.87.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -10108,6 +10337,32 @@ request@^2.87.0, request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -10159,6 +10414,14 @@ resolve-package-path@^1.0.11, resolve-package-path@^1.2.2, resolve-package-path@ path-root "^0.1.1" resolve "^1.10.0" +resolve-package-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-2.0.0.tgz#7f258ab86ff074fff4ff8027a28f94d17d6fb1df" + integrity sha512-/CLuzodHO2wyyHTzls5Qr+EFeG6RcW4u6//gjYvUfcfyuplIX1SSccU+A5A9A78Gmezkl3NBkFAMxLbzTY9TJA== + dependencies: + path-root "^0.1.1" + resolve "^1.13.1" + resolve-path@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" @@ -10179,17 +10442,17 @@ resolve@1.9.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.3, resolve@^1.1.7, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: +resolve@^1.1.3, resolve@^1.1.7, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.3.3: - version "1.15.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" - integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" @@ -10253,6 +10516,13 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" +rimraf@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -10262,20 +10532,20 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: inherits "^2.0.1" rollup-pluginutils@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" - integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== dependencies: estree-walker "^0.6.1" rollup@^1.12.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.20.3.tgz#6243f6c118ca05f56b2d9433112400cd834a1eb8" - integrity sha512-/OMCkY0c6E8tleeVm4vQVDz24CkVgvueK3r8zTYu2AQNpjrcaPwO9hE+pWj5LTFrvvkaxt4MYIp2zha4y0lRvg== + version "1.31.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.31.1.tgz#4170d6f87148d46e5fbe29b493f8f3ea3453c96f" + integrity sha512-2JREN1YdrS/kpPzEd33ZjtuNbOuBC3ePfuZBdKEybvqcEcszW1ckyVqzcEiEe0nE8sqHK+pbJg+PsAgRJ8+1dg== dependencies: - "@types/estree" "0.0.39" - "@types/node" "^12.7.2" - acorn "^7.0.0" + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" route-recognizer@^0.3.3: version "0.3.4" @@ -10392,11 +10662,6 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - saxes@^3.1.3: version "3.1.11" resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" @@ -10444,6 +10709,11 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -10473,10 +10743,10 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== serve-static@1.14.1: version "1.14.1" @@ -10711,11 +10981,11 @@ source-list-map@^2.0.0: integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -10728,7 +10998,7 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@~0.5.10, source-map-support@~0.5.12: +source-map-support@~0.5.10: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== @@ -10736,6 +11006,14 @@ source-map-support@~0.5.10, source-map-support@~0.5.12: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" @@ -10915,9 +11193,9 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^1.0.0: version "1.1.0" @@ -11084,7 +11362,7 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -11130,20 +11408,15 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8: +symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz#9506dd64d8e98fa21dcbf4018d1eab23e77f71fe" integrity sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA== -symlink-or-copy@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#5d49108e2ab824a34069b68974486c290020b393" - integrity sha512-W31+GLiBmU/ZR02Ii0mVZICuNEN9daZ63xZMPDsYgPgNjMtg+atqLEGI7PPI936jYSQZxoLb/63xos8Adrx4Eg== - sync-disk-cache@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.3.tgz#481933461623fdc2bdf46cfc87872ba215a7e246" - integrity sha512-Kp7DFemXDPRUbFW856CKamtX7bJuThZPa2dwnK2RfNqMew7Ah8xDc52SdooNlfN8oydDdDHlBPLsXTrtmA7HKw== + version "1.3.4" + resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.4.tgz#53a2c5a09d8f4bb53160bce182a456ad71574024" + integrity sha512-GlkGeM81GPPEKz/lH7QUTbvqLq7K/IUTuaKDSMulP9XQ42glqNJIN/RKgSOw4y8vxL1gOVvj+W7ruEO4s36eCw== dependencies: debug "^2.1.3" heimdalljs "^0.2.3" @@ -11205,19 +11478,6 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" -tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.5" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - temp@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.0.tgz#61391795a11bd9738d4c4d7f55f012cb8f55edaa" @@ -11226,15 +11486,15 @@ temp@0.9.0: rimraf "~2.6.2" terser-webpack-plugin@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" - integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^1.7.0" + serialize-javascript "^2.1.2" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" @@ -11250,9 +11510,9 @@ terser@^3.17.0: source-map-support "~0.5.10" terser@^4.1.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.2.1.tgz#1052cfe17576c66e7bc70fcc7119f22b155bdac1" - integrity sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A== + version "4.6.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87" + integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -11443,7 +11703,7 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.3.3, tough-cookie@^2.4.3: +tough-cookie@^2.3.3, tough-cookie@^2.4.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -11559,11 +11819,11 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + version "3.7.7" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.7.tgz#21e52c7dccda80a53bf7cde69628a7e511aec9c9" + integrity sha512-FeSU+hi7ULYy6mn8PKio/tXsdSXN35lm4KgV2asx00kzrLU9Pi3oAslcJT70Jdj7PHX29gGUPOT6+lXGBbemhA== dependencies: - commander "~2.20.0" + commander "~2.20.3" source-map "~0.6.1" underscore.string@^3.2.2, underscore.string@~3.3.4: @@ -11743,9 +12003,9 @@ utils-merge@1.0.1: integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -11777,9 +12037,9 @@ verror@1.10.0: extsprintf "^1.2.0" vm-browserify@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== w3c-hr-time@^1.0.1: version "1.0.1" @@ -11922,9 +12182,9 @@ whatwg-mimetype@^2.2.0: integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -11949,6 +12209,11 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -12044,9 +12309,9 @@ xml-name-validator@^3.0.0: integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xmlchars@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.1.1.tgz#ef1a81c05bff629c2280007f12daca21bd6f6c93" - integrity sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w== + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xmldom@^0.1.19: version "0.1.27" @@ -12083,10 +12348,10 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^3.0.0, yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yam@^1.0.0: version "1.0.0" From f9bd3a0b937c0ba83e7d1483860e340ddab1be4c Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 18 Feb 2020 15:08:31 +0000 Subject: [PATCH 13/83] ui: Use a service-proxy to test service removal notification (#7315) --- ui-v2/tests/acceptance/dc/list-blocking.feature | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ui-v2/tests/acceptance/dc/list-blocking.feature b/ui-v2/tests/acceptance/dc/list-blocking.feature index 5e2a0268e9..be51dd3079 100644 --- a/ui-v2/tests/acceptance/dc/list-blocking.feature +++ b/ui-v2/tests/acceptance/dc/list-blocking.feature @@ -33,7 +33,7 @@ Feature: dc / list-blocking When I visit the [Page] page for yaml --- dc: dc-1 - service: service-0 + service: service-0-proxy --- Then the url should be /dc-1/[Url] And pause until I see 3 [Model] models @@ -44,7 +44,7 @@ Feature: dc / list-blocking And an external edit results in 0 [Model] models And pause until I see the text "deregistered" in "[data-notification]" Where: - ------------------------------------------------- - | Page | Model | Url | - | service | instance | services/service-0 | - ------------------------------------------------- + ------------------------------------------------------- + | Page | Model | Url | + | service | instance | services/service-0-proxy | + ------------------------------------------------------- From f306c753e2e5f58d35eccc62086271a23d83efe7 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 18 Feb 2020 16:43:52 +0000 Subject: [PATCH 14/83] ui: HTTP Body testing (#7290) * ui: Test Coverage Reporting (#7027) * Serve up the /coverage folder whilst developing * Upgrade ember-cli-api-double now it supports passthrough per url * ui: make env into a service and use it where we need to be injectable * Give http/client a body method so we can use it on its own for testing * Add test helper for testing with and without nspaces enabled * Add two tests, one thay needs nspaces and one that doesn't * Keep cleaning up client/http, whilst figuring out a immutable bug * Convert tests to new return format ([actual, leftovers]) --- ui-v2/app/adapters/application.js | 5 +- ui-v2/app/services/client/http.js | 121 +++++++++++------- ui-v2/app/services/env.js | 8 ++ ui-v2/tests/helpers/get-nspace-runner.js | 25 ++++ .../integration/adapters/coordinate-test.js | 12 ++ .../adapters/discovery-chain-test.js | 23 ++++ ui-v2/tests/unit/services/env-test.js | 12 ++ ui-v2/yarn.lock | 19 ++- 8 files changed, 170 insertions(+), 55 deletions(-) create mode 100644 ui-v2/app/services/env.js create mode 100644 ui-v2/tests/helpers/get-nspace-runner.js create mode 100644 ui-v2/tests/unit/services/env-test.js diff --git a/ui-v2/app/adapters/application.js b/ui-v2/app/adapters/application.js index 93079afed1..45cb2e7291 100644 --- a/ui-v2/app/adapters/application.js +++ b/ui-v2/app/adapters/application.js @@ -1,14 +1,13 @@ import Adapter from './http'; import { inject as service } from '@ember/service'; -import { env } from 'consul-ui/env'; export const DATACENTER_QUERY_PARAM = 'dc'; export const NSPACE_QUERY_PARAM = 'ns'; export default Adapter.extend({ - repo: service('settings'), client: service('client/http'), + env: service('env'), formatNspace: function(nspace) { - if (env('CONSUL_NSPACES_ENABLED')) { + if (this.env.env('CONSUL_NSPACES_ENABLED')) { return nspace !== '' ? { [NSPACE_QUERY_PARAM]: nspace } : undefined; } }, diff --git a/ui-v2/app/services/client/http.js b/ui-v2/app/services/client/http.js index 60ec3c7fa6..57f0f5bed3 100644 --- a/ui-v2/app/services/client/http.js +++ b/ui-v2/app/services/client/http.js @@ -8,6 +8,21 @@ import getObjectPool from 'consul-ui/utils/get-object-pool'; import Request from 'consul-ui/utils/http/request'; import createURL from 'consul-ui/utils/createURL'; +// reopen EventSources if a user changes tab +export const restartWhenAvailable = function(client) { + return function(e) { + // setup the aborted connection restarting + // this should happen here to avoid cache deletion + const status = get(e, 'errors.firstObject.status'); + if (status === '0') { + // Any '0' errors (abort) should possibly try again, depending upon the circumstances + // whenAvailable returns a Promise that resolves when the client is available + // again + return client.whenAvailable(e); + } + throw e; + }; +}; class HTTPError extends Error { constructor(statusCode, message) { super(message); @@ -37,6 +52,15 @@ const dispose = function(request) { // right now createURL converts undefined to '' so we need to check thats not needed // anywhere (todo written here for visibility) const url = createURL(encodeURIComponent); +const createHeaders = function(lines) { + return lines.reduce(function(prev, item) { + const temp = item.split(':'); + if (temp.length > 1) { + prev[temp[0].trim()] = temp[1].trim(); + } + return prev; + }, {}); +}; export default Service.extend({ dom: service('dom'), settings: service('settings'), @@ -58,64 +82,65 @@ export default Service.extend({ url: function() { return url(...arguments); }, + body: function(strs, ...values) { + let body = {}; + const doubleBreak = strs.reduce(function(prev, item, i) { + if (item.indexOf('\n\n') !== -1) { + return i; + } + return prev; + }, -1); + if (doubleBreak !== -1) { + // This merges request bodies together, so you can specify multiple bodies + // in the request and it will merge them together. + // Turns out we never actually do this, so it might be worth removing as it complicates + // matters slightly as we assumed post bodies would be an object. + // This actually works as it just uses the value of the first object, if its an array + // it concats + body = values.splice(doubleBreak).reduce(function(prev, item, i) { + switch (true) { + case Array.isArray(item): + if (i === 0) { + prev = []; + } + return prev.concat(item); + case typeof item !== 'string': + return { + ...prev, + ...item, + }; + default: + return item; + } + }, body); + } + return [body, ...values]; + }, request: function(cb) { const client = this; return cb(function(strs, ...values) { - let body = {}; - const doubleBreak = strs.reduce(function(prev, item, i) { - if (item.indexOf('\n\n') !== -1) { - return i; - } - return prev; - }, -1); - if (doubleBreak !== -1) { - // This merges request bodies together, so you can specify multiple bodies - // in the request and it will merge them together. - // Turns out we never actually do this, so it might be worth removing as it complicates - // matters slightly as we assumed post bodies would be an object. - // This actually works as it just uses the value of the first object, if its an array - // it concats - body = values.splice(doubleBreak).reduce(function(prev, item, i) { - switch (true) { - case Array.isArray(item): - if (i === 0) { - prev = []; - } - return prev.concat(item); - case typeof item !== 'string': - return { - ...prev, - ...item, - }; - default: - return item; - } - }, body); - } - let temp = url(strs, ...values).split(' '); - const method = temp.shift(); - let rest = temp.join(' '); - temp = rest.split('\n'); - const path = temp.shift().trim(); - const createHeaders = function(lines) { - return lines.reduce(function(prev, item) { - const temp = item.split(':'); - if (temp.length > 1) { - prev[temp[0].trim()] = temp[1].trim(); - } - return prev; - }, {}); - }; + // first go to the end and remove/parse the http body + const [body, ...urlVars] = client.body(...arguments); + // with whats left get the method off the front + const [method, ...urlParts] = client.url(strs, ...urlVars).split(' '); + // with whats left use the rest of the line for the url + // with whats left after the line, use for the headers + const [url, ...headerParts] = urlParts.join(' ').split('\n'); + const headers = { + // default to application/json ...{ 'Content-Type': 'application/json; charset=utf-8', }, + // add any application level headers ...get(client, 'settings').findHeaders(), - ...createHeaders(temp), + // but overwrite or add to those from anything in the specific request + ...createHeaders(headerParts), }; + return new Promise(function(resolve, reject) { const options = { - url: path, + url: url.trim(), method: method, contentType: headers['Content-Type'], // type: 'json', @@ -127,7 +152,7 @@ export default Service.extend({ const respond = function(cb) { return cb(headers, response); }; - //TODO: nextTick ? + // TODO: nextTick ? resolve(respond); }, error: function(xhr, textStatus, err) { diff --git a/ui-v2/app/services/env.js b/ui-v2/app/services/env.js new file mode 100644 index 0000000000..2449c5dfe5 --- /dev/null +++ b/ui-v2/app/services/env.js @@ -0,0 +1,8 @@ +import Service from '@ember/service'; +import { env } from 'consul-ui/env'; + +export default Service.extend({ + env: function(key) { + return env(key); + }, +}); diff --git a/ui-v2/tests/helpers/get-nspace-runner.js b/ui-v2/tests/helpers/get-nspace-runner.js new file mode 100644 index 0000000000..3a6042ea60 --- /dev/null +++ b/ui-v2/tests/helpers/get-nspace-runner.js @@ -0,0 +1,25 @@ +import Service from '@ember/service'; +export default function(type) { + return function(cb, withNspaces, withoutNspaces, container, assert) { + let CONSUL_NSPACES_ENABLED = true; + container.owner.register( + 'service:env', + Service.extend({ + env: function() { + return CONSUL_NSPACES_ENABLED; + }, + }) + ); + const adapter = container.owner.lookup(`adapter:${type}`); + const serializer = container.owner.lookup(`serializer:${type}`); + const client = container.owner.lookup('service:client/http'); + let actual; + + actual = cb(adapter, serializer, client); + assert.deepEqual(actual[0], withNspaces); + + CONSUL_NSPACES_ENABLED = false; + actual = cb(adapter, serializer, client); + assert.deepEqual(actual[0], withoutNspaces); + }; +} diff --git a/ui-v2/tests/integration/adapters/coordinate-test.js b/ui-v2/tests/integration/adapters/coordinate-test.js index eb8ef724c2..c9a7e6c817 100644 --- a/ui-v2/tests/integration/adapters/coordinate-test.js +++ b/ui-v2/tests/integration/adapters/coordinate-test.js @@ -12,4 +12,16 @@ module('Integration | Adapter | coordinate', function(hooks) { }); assert.equal(actual, expected); }); + test('requestForQuery returns the correct body', function(assert) { + const adapter = this.owner.lookup('adapter:coordinate'); + const client = this.owner.lookup('service:client/http'); + const expected = { + index: 1, + }; + const [actual] = adapter.requestForQuery(client.body, { + dc: dc, + index: 1, + }); + assert.deepEqual(actual, expected); + }); }); diff --git a/ui-v2/tests/integration/adapters/discovery-chain-test.js b/ui-v2/tests/integration/adapters/discovery-chain-test.js index f8eff7fafd..3ded7b1f20 100644 --- a/ui-v2/tests/integration/adapters/discovery-chain-test.js +++ b/ui-v2/tests/integration/adapters/discovery-chain-test.js @@ -1,6 +1,8 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; +import getNspaceRunner from 'consul-ui/tests/helpers/get-nspace-runner'; +const nspaceRunner = getNspaceRunner('discovery-chain'); module('Integration | Adapter | discovery-chain', function(hooks) { setupTest(hooks); const dc = 'dc-1'; @@ -24,4 +26,25 @@ module('Integration | Adapter | discovery-chain', function(hooks) { }); }); }); + test('requestForQueryRecord returns the correct body', function(assert) { + return nspaceRunner( + (adapter, serializer, client) => { + return adapter.requestForQueryRecord(client.body, { + id: id, + dc: dc, + ns: 'team-1', + index: 1, + }); + }, + { + index: 1, + ns: 'team-1', + }, + { + index: 1, + }, + this, + assert + ); + }); }); diff --git a/ui-v2/tests/unit/services/env-test.js b/ui-v2/tests/unit/services/env-test.js new file mode 100644 index 0000000000..bc30ef2dfe --- /dev/null +++ b/ui-v2/tests/unit/services/env-test.js @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Service | env', function(hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function(assert) { + let service = this.owner.lookup('service:env'); + assert.ok(service); + }); +}); diff --git a/ui-v2/yarn.lock b/ui-v2/yarn.lock index 8abb05a5b5..448534d88d 100644 --- a/ui-v2/yarn.lock +++ b/ui-v2/yarn.lock @@ -1154,9 +1154,9 @@ integrity sha512-8OcgesUjWQ8AjaXzbz3tGJQn1kM0sN6pLidGM7isNPUyYmIjIEXQzaeUQYzsfv0N2Ko9ZuOXYUsaBl8IK1KGow== "@hashicorp/ember-cli-api-double@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-3.0.2.tgz#4f66f22e4b54293c46fe16dc24568267526c8acd" - integrity sha512-NmcA+jBcBO8tzCfbqWzrQdHvTUeaj71Gdu9phxaULMtM9Zw7BZtHlvb2P1ivknGGw92w9Se50pDNjkB57ww22A== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-3.0.0.tgz#2a9e8e475c8ac9780221f46584297640870f9f1c" + integrity sha512-3jpkkB0jsVWbpI3ySsBJ5jmSb1bPkJu8nZTh9YvIiQDhH76zqHY7AXi35oSV4M83f5qYtBLJjDSdwrf0zJ9Dlg== dependencies: "@hashicorp/api-double" "^1.6.1" array-range "^1.0.1" @@ -6871,7 +6871,7 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.11, handlebars@^4.3.1: +handlebars@^4.0.11: version "4.7.3" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== @@ -6893,6 +6893,17 @@ handlebars@^4.0.13, handlebars@^4.0.4, handlebars@^4.1.2: optionalDependencies: uglify-js "^3.1.4" +handlebars@^4.3.1: + version "4.7.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.2.tgz#01127b3840156a0927058779482031afe0e730d7" + integrity sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + handlebars@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" From 8e5cb78c1ca5f9a0c2bc46826769d582d886803e Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 18 Feb 2020 16:44:15 +0000 Subject: [PATCH 15/83] ui: Add new Help menu with links to docs, learn and GH (#7310) --- ui-v2/app/components/popover-menu.js | 3 +++ .../base/components/menu-panel/layout.scss | 4 ++++ .../components/main-nav-horizontal/index.scss | 3 +++ .../components/main-nav-horizontal/skin.scss | 2 +- ui-v2/app/styles/components/product.scss | 10 +++++++++ .../app/styles/components/product/index.scss | 3 --- .../templates/components/hashicorp-consul.hbs | 22 ++++++++++++++++--- .../app/templates/components/popover-menu.hbs | 2 +- ui-v2/config/environment.js | 1 + 9 files changed, 42 insertions(+), 8 deletions(-) diff --git a/ui-v2/app/components/popover-menu.js b/ui-v2/app/components/popover-menu.js index 55c1ba5262..3079f9eb30 100644 --- a/ui-v2/app/components/popover-menu.js +++ b/ui-v2/app/components/popover-menu.js @@ -9,6 +9,9 @@ export default Component.extend(Slotted, { expanded: false, keyboardAccess: true, onchange: function() {}, + // TODO: this needs to be made dynamic/auto detect + // for now use this to set left/right explicitly + position: '', init: function() { this._super(...arguments); this.guid = this.dom.guid(this); diff --git a/ui-v2/app/styles/base/components/menu-panel/layout.scss b/ui-v2/app/styles/base/components/menu-panel/layout.scss index 44823cd128..c40289c4e0 100644 --- a/ui-v2/app/styles/base/components/menu-panel/layout.scss +++ b/ui-v2/app/styles/base/components/menu-panel/layout.scss @@ -15,6 +15,9 @@ /* or be hardcoded */ /* min-height: 143px; */ } +%menu-panel [role='menuitem']::after { + float: right; +} %menu-panel-sub-panel { position: absolute; top: 0; @@ -28,6 +31,7 @@ } %menu-panel:not(.left) { right: 0px; + left: auto; } %menu-panel.left { left: 0px; diff --git a/ui-v2/app/styles/components/main-nav-horizontal/index.scss b/ui-v2/app/styles/components/main-nav-horizontal/index.scss index ae5d8bd337..333e688576 100644 --- a/ui-v2/app/styles/components/main-nav-horizontal/index.scss +++ b/ui-v2/app/styles/components/main-nav-horizontal/index.scss @@ -18,6 +18,9 @@ %main-nav-horizontal > ul > li.is-active > label > * { @extend %main-nav-horizontal-action-active; } +%main-nav-horizontal label + div { + @extend %main-nav-horizontal-drop-nav; +} %main-nav-horizontal-drop-nav { @extend %menu-panel; } diff --git a/ui-v2/app/styles/components/main-nav-horizontal/skin.scss b/ui-v2/app/styles/components/main-nav-horizontal/skin.scss index d0ea088e04..a4f6e35df8 100644 --- a/ui-v2/app/styles/components/main-nav-horizontal/skin.scss +++ b/ui-v2/app/styles/components/main-nav-horizontal/skin.scss @@ -32,7 +32,7 @@ color: inherit; } %main-nav-horizontal-toggle, -%main-nav-horizontal input { +%main-nav-horizontal input[type='checkbox'] { display: none; } %main-nav-horizontal [type='checkbox'] + label > *::after { diff --git a/ui-v2/app/styles/components/product.scss b/ui-v2/app/styles/components/product.scss index 1787d34eb0..f047be48d7 100644 --- a/ui-v2/app/styles/components/product.scss +++ b/ui-v2/app/styles/components/product.scss @@ -3,6 +3,16 @@ html body > svg { display: none; } +%main-nav-horizontal .docs-link a::after { + @extend %with-learn-icon, %as-pseudo; +} + +%main-nav-horizontal .learn-link a::after { + @extend %with-docs-icon, %as-pseudo; +} +%main-nav-horizontal .feedback-link a::after { + @extend %with-logo-github-monochrome-icon, %as-pseudo; +} html.ember-loading body > svg { @extend %brand-loader; } diff --git a/ui-v2/app/styles/components/product/index.scss b/ui-v2/app/styles/components/product/index.scss index 0cfc8c3de4..ae9742d37b 100644 --- a/ui-v2/app/styles/components/product/index.scss +++ b/ui-v2/app/styles/components/product/index.scss @@ -24,9 +24,6 @@ %secondary-nav { @extend %main-nav-horizontal; } -%primary-nav label + div { - @extend %main-nav-horizontal-drop-nav; -} @media #{$--lt-horizontal-nav} { %primary-nav { margin-top: 65px; diff --git a/ui-v2/app/templates/components/hashicorp-consul.hbs b/ui-v2/app/templates/components/hashicorp-consul.hbs index f6f844b717..c68b77e7b8 100644 --- a/ui-v2/app/templates/components/hashicorp-consul.hbs +++ b/ui-v2/app/templates/components/hashicorp-consul.hbs @@ -16,7 +16,7 @@ {{#if (and (eq nspaces.length 1) (not canManageNspaces)) }} {{nspace.Name}} {{ else }} - {{#popover-menu}} + {{#popover-menu position='left'}} {{#block-slot name='trigger'}} {{nspace.Name}} {{/block-slot}} @@ -51,7 +51,7 @@ {{#if (or (not dcs) (eq dcs.length 1)) }} {{dc.Name}} {{ else }} - {{#popover-menu}} + {{#popover-menu position='left'}} {{#block-slot name='trigger'}} {{dc.Name}} {{/block-slot}} @@ -90,7 +90,23 @@

+
diff --git a/ui-v2/app/templates/dc/services/show.hbs b/ui-v2/app/templates/dc/services/show.hbs index a6636da80a..60a63633e7 100644 --- a/ui-v2/app/templates/dc/services/show.hbs +++ b/ui-v2/app/templates/dc/services/show.hbs @@ -14,6 +14,7 @@ {{item.Service.Service}} + {{#if (not item.Service.Kind)}} From 7e83dc2aebc67af4af5772bd3645f5fdff449ff5 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Thu, 7 May 2020 18:42:00 +0100 Subject: [PATCH 70/83] ui: Small CSS tweaks (#7808) 1. Reinstate top border on in page tabs 2. Keep overflow:hidden just for dom-recycling-tables --- ui-v2/app/styles/base/components/tabs/skin.scss | 4 ++++ ui-v2/app/styles/components/dom-recycling-table/layout.scss | 3 +++ 2 files changed, 7 insertions(+) diff --git a/ui-v2/app/styles/base/components/tabs/skin.scss b/ui-v2/app/styles/base/components/tabs/skin.scss index 7ad0caf074..b9b8ca2113 100644 --- a/ui-v2/app/styles/base/components/tabs/skin.scss +++ b/ui-v2/app/styles/base/components/tabs/skin.scss @@ -1,3 +1,7 @@ +%tab-nav { + border-top: $decor-border-200; + border-color: $gray-200; +} %tab-nav ul { list-style-type: none; } diff --git a/ui-v2/app/styles/components/dom-recycling-table/layout.scss b/ui-v2/app/styles/components/dom-recycling-table/layout.scss index cbaaf255e5..78186e67bd 100644 --- a/ui-v2/app/styles/components/dom-recycling-table/layout.scss +++ b/ui-v2/app/styles/components/dom-recycling-table/layout.scss @@ -6,6 +6,9 @@ } %dom-recycling-table tr > * { flex: 1 0 auto; + /* this means no simple CSS drive tooltips in dom-recycling tables */ + /* ideally the thing inside the td should be overflow hidden */ + overflow: hidden; } %dom-recycling-table tbody { /* important required as ember-collection will inline an overflow: visible*/ From b2ecc65d219cf61e90a6e6cb4efbedb041f4944d Mon Sep 17 00:00:00 2001 From: Kenia <19161242+kaxcode@users.noreply.github.com> Date: Mon, 11 May 2020 10:04:27 -0400 Subject: [PATCH 71/83] ui: Create PopoverSelect, CatalogToolbar, and update tests (#7489) * Create PopoverSelect component and styling * Create CatalogToolbar component and Styling * ui: Adds `selectable-key-values` helper (#7472) Preferably we want all copy/text to live in the template. Whilst you can achieve what we've done here with a combination of different helpers, as we will be using this approach in various places it's probably best to make a helper. We also hit an ember bug related to using the `let` helper and trying to access `thingThatWasLet.firstObject` (which can also be worked around using `object-at`). Moving everything to a helper 'sorted' everything. Probably worthwhile noting that if the sort option themselves become dynamic, I'm not sure if the helper here would actually react as you would expect (I'm aware that ember helpers on react on the root arguments, not necesarily sub properties of those arguments). If we get to that point this helper could take the same approach as what I believe ember-composable-helpers does to get around this, or move them to the view controller. If we do ever moved this to the view controller, we can still use the exported function from the new helper here to keep using the same functionality and tests we have here. * Create tests for sorting services with CatalogToolbar * Add rule to print 'ember/no-global-jquery' as a warning Co-authored-by: John Cowen --- ui-v2/.eslintrc.js | 3 +- .../app/components/catalog-toolbar/index.hbs | 10 ++++ ui-v2/app/components/catalog-toolbar/index.js | 5 ++ .../components/consul-service-list/index.hbs | 2 +- ui-v2/app/components/popover-select/index.hbs | 19 +++++++ ui-v2/app/components/popover-select/index.js | 19 +++++++ ui-v2/app/controllers/dc/services/index.js | 1 + ui-v2/app/helpers/selectable-key-values.js | 46 +++++++++++++++++ .../base/components/buttons/layout.scss | 6 +++ .../styles/base/components/buttons/skin.scss | 20 ++++++++ .../base/components/popover-menu/layout.scss | 25 +++++++++ .../base/components/popover-menu/skin.scss | 9 ++++ .../app/styles/base/icons/base-variables.scss | 1 + .../styles/base/icons/icon-placeholders.scss | 10 ++++ ui-v2/app/styles/components/filter-bar.scss | 6 +++ .../styles/components/filter-bar/layout.scss | 17 +++++++ .../styles/components/filter-bar/skin.scss | 3 ++ ui-v2/app/styles/components/index.scss | 1 + .../app/styles/components/popover-select.scss | 15 ++++++ ui-v2/app/templates/dc/services/index.hbs | 51 ++++++++++++------- .../dc/services/list-blocking.feature | 11 ++-- .../acceptance/dc/services/sorting.feature | 45 ++++++++++++++++ .../steps/components/catalog-toolbar-steps.js | 10 ++++ .../steps/dc/services/sorting-steps.js | 10 ++++ .../components/catalog-toolbar-test.js | 26 ++++++++++ ui-v2/tests/pages.js | 6 ++- .../tests/pages/components/catalog-toolbar.js | 4 ++ ui-v2/tests/pages/components/popover-sort.js | 8 +++ ui-v2/tests/pages/dc/services/index.js | 6 +-- ui-v2/tests/steps/assertions/page.js | 36 +++++++++++++ .../helpers/selectable-key-values-test.js | 34 +++++++++++++ 31 files changed, 434 insertions(+), 31 deletions(-) create mode 100644 ui-v2/app/components/catalog-toolbar/index.hbs create mode 100644 ui-v2/app/components/catalog-toolbar/index.js create mode 100644 ui-v2/app/components/popover-select/index.hbs create mode 100644 ui-v2/app/components/popover-select/index.js create mode 100644 ui-v2/app/helpers/selectable-key-values.js create mode 100644 ui-v2/app/styles/components/popover-select.scss create mode 100644 ui-v2/tests/acceptance/dc/services/sorting.feature create mode 100644 ui-v2/tests/acceptance/steps/components/catalog-toolbar-steps.js create mode 100644 ui-v2/tests/acceptance/steps/dc/services/sorting-steps.js create mode 100644 ui-v2/tests/integration/components/catalog-toolbar-test.js create mode 100644 ui-v2/tests/pages/components/catalog-toolbar.js create mode 100644 ui-v2/tests/pages/components/popover-sort.js create mode 100644 ui-v2/tests/unit/helpers/selectable-key-values-test.js diff --git a/ui-v2/.eslintrc.js b/ui-v2/.eslintrc.js index 03e383b181..ce7e9cee4a 100644 --- a/ui-v2/.eslintrc.js +++ b/ui-v2/.eslintrc.js @@ -16,7 +16,8 @@ module.exports = { rules: { 'no-unused-vars': ['error', { args: 'none' }], 'ember/no-new-mixins': ['warn'], - 'ember/no-jquery': 'warn' + 'ember/no-jquery': 'warn', + 'ember/no-global-jquery': 'warn' }, overrides: [ // node files diff --git a/ui-v2/app/components/catalog-toolbar/index.hbs b/ui-v2/app/components/catalog-toolbar/index.hbs new file mode 100644 index 0000000000..334489bb45 --- /dev/null +++ b/ui-v2/app/components/catalog-toolbar/index.hbs @@ -0,0 +1,10 @@ +
+ + + diff --git a/ui-v2/app/components/catalog-toolbar/index.js b/ui-v2/app/components/catalog-toolbar/index.js new file mode 100644 index 0000000000..4798652642 --- /dev/null +++ b/ui-v2/app/components/catalog-toolbar/index.js @@ -0,0 +1,5 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: '', +}); diff --git a/ui-v2/app/components/consul-service-list/index.hbs b/ui-v2/app/components/consul-service-list/index.hbs index 432c90c8ed..b4cb708113 100644 --- a/ui-v2/app/components/consul-service-list/index.hbs +++ b/ui-v2/app/components/consul-service-list/index.hbs @@ -1,7 +1,7 @@ {{yield}} {{#if (gt items.length 0)}} - + {{item.Name}}
    diff --git a/ui-v2/app/components/popover-select/index.hbs b/ui-v2/app/components/popover-select/index.hbs new file mode 100644 index 0000000000..364505d6dc --- /dev/null +++ b/ui-v2/app/components/popover-select/index.hbs @@ -0,0 +1,19 @@ +
    + + + + {{selected.value}} + + + +
  • + {{title}} +
  • + {{#each options as |option|}} +
  • + +
  • + {{/each}} +
    +
    +
    diff --git a/ui-v2/app/components/popover-select/index.js b/ui-v2/app/components/popover-select/index.js new file mode 100644 index 0000000000..2efe0e9296 --- /dev/null +++ b/ui-v2/app/components/popover-select/index.js @@ -0,0 +1,19 @@ +import Component from '@ember/component'; + +export default Component.extend({ + actions: { + change: function(option, e) { + // We fake an event here, which could be a bit of a footbun if we treat + // it completely like an event, we should be abe to avoid doing this + // when we move to glimmer components (this.args.selected vs this.selected) + this.onchange({ + target: { + selected: option, + }, + // make this vaguely event like to avoid + // having a separate property + preventDefault: function(e) {}, + }); + }, + }, +}); diff --git a/ui-v2/app/controllers/dc/services/index.js b/ui-v2/app/controllers/dc/services/index.js index 2c10208380..c1a4e6d429 100644 --- a/ui-v2/app/controllers/dc/services/index.js +++ b/ui-v2/app/controllers/dc/services/index.js @@ -4,6 +4,7 @@ import WithEventSource from 'consul-ui/mixins/with-event-source'; import WithSearching from 'consul-ui/mixins/with-searching'; export default Controller.extend(WithEventSource, WithSearching, { queryParams: { + sortBy: 'sort', s: { as: 'filter', }, diff --git a/ui-v2/app/helpers/selectable-key-values.js b/ui-v2/app/helpers/selectable-key-values.js new file mode 100644 index 0000000000..dbc8396b95 --- /dev/null +++ b/ui-v2/app/helpers/selectable-key-values.js @@ -0,0 +1,46 @@ +import { helper } from '@ember/component/helper'; +import { slugify } from 'consul-ui/helpers/slugify'; +export const selectableKeyValues = function(params = [], hash = {}) { + let selected; + + const items = params.map(function(item, i) { + let key, value; + switch (typeof item) { + case 'string': + key = slugify([item]); + value = item; + break; + default: + if (item.length > 1) { + key = item[0]; + value = item[1]; + } else { + key = slugify([item[0]]); + value = item[0]; + } + break; + } + const kv = { + key: key, + value: value, + }; + switch (typeof hash.selected) { + case 'string': + if (hash.selected === item[0]) { + selected = kv; + } + break; + case 'number': + if (hash.selected === i) { + selected = kv; + } + break; + } + return kv; + }); + return { + items: items, + selected: typeof selected === 'undefined' ? items[0] : selected, + }; +}; +export default helper(selectableKeyValues); diff --git a/ui-v2/app/styles/base/components/buttons/layout.scss b/ui-v2/app/styles/base/components/buttons/layout.scss index 42a70eb8ae..e86724e641 100644 --- a/ui-v2/app/styles/base/components/buttons/layout.scss +++ b/ui-v2/app/styles/base/components/buttons/layout.scss @@ -48,3 +48,9 @@ display: inline-block; box-sizing: border-box; } +%split-button { + @extend %secondary-button; + padding: 0 8px !important; + position: relative; + height: 100%; +} diff --git a/ui-v2/app/styles/base/components/buttons/skin.scss b/ui-v2/app/styles/base/components/buttons/skin.scss index c5914057f4..3c142a34ab 100644 --- a/ui-v2/app/styles/base/components/buttons/skin.scss +++ b/ui-v2/app/styles/base/components/buttons/skin.scss @@ -112,3 +112,23 @@ %internal-button-dangerous:hover { @extend %internal-button-dangerous-intent; } + +%split-button span::after { + @extend %as-pseudo; + position: absolute; + background-color: $gray-300; + width: 1px; + top: 0; + height: 100%; + margin-left: 8px; +} +%split-button::before { + @extend %as-pseudo; + height: 16px; +} +%sort-button::before { + @extend %with-sort-icon; + margin-top: 8px; + width: 16px; + height: 16px; +} diff --git a/ui-v2/app/styles/base/components/popover-menu/layout.scss b/ui-v2/app/styles/base/components/popover-menu/layout.scss index 78916fb21a..8800f03bd5 100644 --- a/ui-v2/app/styles/base/components/popover-menu/layout.scss +++ b/ui-v2/app/styles/base/components/popover-menu/layout.scss @@ -27,3 +27,28 @@ %more-popover-menu-panel [id$='-']:first-child:checked ~ ul label[for$='-'] + [role='menu'] { display: block; } +%popover-menu { + @extend %display-toggle-siblings; +} +%popover-menu + label > * { + @extend %toggle-button; +} +%popover-menu-panel { + @extend %menu-panel; + width: 192px; +} +%popover-menu + label + div { + @extend %popover-menu-panel; +} +%popover-menu-panel:not(.above) { + top: 38px; +} +%popover-menu-panel:not(.left) { + right: 10px; +} +%popover-menu-panel li [role='menu'] { + display: none; +} +%popover-menu-panel [id$='-']:first-child:checked ~ ul label[for$='-'] + [role='menu'] { + display: block; +} diff --git a/ui-v2/app/styles/base/components/popover-menu/skin.scss b/ui-v2/app/styles/base/components/popover-menu/skin.scss index c0e6ae727f..15fffe38bb 100644 --- a/ui-v2/app/styles/base/components/popover-menu/skin.scss +++ b/ui-v2/app/styles/base/components/popover-menu/skin.scss @@ -7,3 +7,12 @@ %more-popover-menu + label > * { font-size: 0; } +%popover-menu + label > *::after { + @extend %with-chevron-down-icon, %as-pseudo; + width: 16px; + height: 16px; + margin-left: 16px; +} +%popover-menu + label > * { + @extend %split-button, %sort-button; +} diff --git a/ui-v2/app/styles/base/icons/base-variables.scss b/ui-v2/app/styles/base/icons/base-variables.scss index b05d1f95aa..e0d58c8689 100644 --- a/ui-v2/app/styles/base/icons/base-variables.scss +++ b/ui-v2/app/styles/base/icons/base-variables.scss @@ -146,6 +146,7 @@ $search-svg: url('data:image/svg+xml;charset=UTF-8,'); $settings-svg: url('data:image/svg+xml;charset=UTF-8,'); $source-file-svg: url('data:image/svg+xml;charset=UTF-8,'); +$sort-svg: url('data:image/svg+xml;charset=UTF-8,'); $star-fill-svg: url('data:image/svg+xml;charset=UTF-8,'); $star-outline-svg: url('data:image/svg+xml;charset=UTF-8,'); $star-svg: url('data:image/svg+xml;charset=UTF-8,'); diff --git a/ui-v2/app/styles/base/icons/icon-placeholders.scss b/ui-v2/app/styles/base/icons/icon-placeholders.scss index 88f2dd0a32..4c2525a7e3 100644 --- a/ui-v2/app/styles/base/icons/icon-placeholders.scss +++ b/ui-v2/app/styles/base/icons/icon-placeholders.scss @@ -1468,6 +1468,16 @@ mask-image: $source-file-svg; } +%with-sort-icon { + @extend %with-icon; + background-image: $sort-svg; +} +%with-sort-mask { + @extend %with-mask; + -webkit-mask-image: $sort-svg; + mask-image: $sort-svg; +} + %with-star-fill-icon { @extend %with-icon; background-image: $star-fill-svg; diff --git a/ui-v2/app/styles/components/filter-bar.scss b/ui-v2/app/styles/components/filter-bar.scss index 5945f6adb9..1ecc2bb90b 100644 --- a/ui-v2/app/styles/components/filter-bar.scss +++ b/ui-v2/app/styles/components/filter-bar.scss @@ -3,6 +3,12 @@ .filter-bar { @extend %filter-bar; } +.catalog-toolbar { + @extend %catalog-toolbar; +} +%catalog-toolbar { + @extend %filter-bar; +} %filter-bar [role='radiogroup'] { @extend %expanded-single-select; } diff --git a/ui-v2/app/styles/components/filter-bar/layout.scss b/ui-v2/app/styles/components/filter-bar/layout.scss index 385694c231..4e9a787691 100644 --- a/ui-v2/app/styles/components/filter-bar/layout.scss +++ b/ui-v2/app/styles/components/filter-bar/layout.scss @@ -7,19 +7,36 @@ %filter-bar + :not(.notice) { margin-top: 1.8em; } +%catalog-toolbar { + padding: 4px 8px; + display: flex; + margin-top: 0 !important; + margin-bottom: -12px !important; + border-bottom: 1px solid $gray-200; +} @media #{$--horizontal-filters} { %filter-bar { display: flex; flex-direction: row-reverse; justify-content: space-between; } + %catalog-toolbar { + flex-direction: row; + } %filter-bar > *:first-child { margin-left: 12px; } + %catalog-toolbar > *:first-child { + margin-left: 0px; + } %filter-bar fieldset { min-width: 210px; width: auto; } + %catalog-toolbar fieldset { + min-width: none; + width: 100%; + } } @media #{$--lt-horizontal-filters} { %filter-bar > *:first-child { diff --git a/ui-v2/app/styles/components/filter-bar/skin.scss b/ui-v2/app/styles/components/filter-bar/skin.scss index 12a221a641..b43cfb8a91 100644 --- a/ui-v2/app/styles/components/filter-bar/skin.scss +++ b/ui-v2/app/styles/components/filter-bar/skin.scss @@ -3,6 +3,9 @@ border: $decor-border-100; border-radius: $decor-radius-100; } +%catalog-toolbar > div { + border: none; +} // TODO: Move this elsewhere @media #{$--horizontal-selects} { %filter-bar label:not(:last-child) { diff --git a/ui-v2/app/styles/components/index.scss b/ui-v2/app/styles/components/index.scss index c0993899f8..3d19d0c33a 100644 --- a/ui-v2/app/styles/components/index.scss +++ b/ui-v2/app/styles/components/index.scss @@ -34,6 +34,7 @@ @import './grid-collection'; @import './consul-service-list'; @import './consul-service-instance-list'; +@import './popover-select'; /**/ diff --git a/ui-v2/app/styles/components/popover-select.scss b/ui-v2/app/styles/components/popover-select.scss new file mode 100644 index 0000000000..a0f8ec50b7 --- /dev/null +++ b/ui-v2/app/styles/components/popover-select.scss @@ -0,0 +1,15 @@ +.popover-select { + @extend %popover-select; +} +%popover-select > [type='checkbox'] { + @extend %popover-menu; +} +%popover-select { + position: relative; + z-index: 3; + padding-left: 12px; + height: 100%; +} +%popover-select label { + border-right: none !important; +} diff --git a/ui-v2/app/templates/dc/services/index.hbs b/ui-v2/app/templates/dc/services/index.hbs index 98794a8a17..240b8390d4 100644 --- a/ui-v2/app/templates/dc/services/index.hbs +++ b/ui-v2/app/templates/dc/services/index.hbs @@ -1,26 +1,43 @@ {{title 'Services'}} - - -

    - Services {{format-number services.length}} total -

    - -
    - -{{#if (gt items.length 0) }} - -{{/if}} - - +{{#let (selectable-key-values + (array "Name:asc" "A to Z") + (array "Name:desc" "Z to A") + selected=sortBy + ) + as |sort| +}} + + + {{partial 'dc/services/notifications'}} + + +

    + Services {{format-number items.length}} total +

    + +
    + + {{#if (gt items.length 0) }} + + {{/if}} + + - + +

    There are no services.

    -
    -
    - + + +{{/let}} diff --git a/ui-v2/tests/acceptance/dc/services/list-blocking.feature b/ui-v2/tests/acceptance/dc/services/list-blocking.feature index 74ee620216..a35efcb93d 100644 --- a/ui-v2/tests/acceptance/dc/services/list-blocking.feature +++ b/ui-v2/tests/acceptance/dc/services/list-blocking.feature @@ -2,17 +2,14 @@ Feature: dc / services / list blocking Scenario: Viewing the listing pages for service Given 1 datacenter model with the value "dc-1" - And 6 service models from yaml + And 3 service models from yaml --- - Name: Service-0 - - Name: Service-0-proxy - Kind: 'connect-proxy' + Kind: ~ - Name: Service-1 - - Name: Service-1-proxy - Kind: 'connect-proxy' + Kind: ~ - Name: Service-2 - - Name: Service-2-proxy - Kind: 'connect-proxy' + Kind: ~ --- And a network latency of 100 When I visit the services page for yaml diff --git a/ui-v2/tests/acceptance/dc/services/sorting.feature b/ui-v2/tests/acceptance/dc/services/sorting.feature new file mode 100644 index 0000000000..1e9a500377 --- /dev/null +++ b/ui-v2/tests/acceptance/dc/services/sorting.feature @@ -0,0 +1,45 @@ +@setupApplicationTest +Feature: dc / services / sorting + Scenario: + Given 1 datacenter model with the value "dc-1" + And 6 service models from yaml + --- + - Name: Service-A + Kind: ~ + - Name: Service-B + Kind: ~ + - Name: Service-C + Kind: ~ + - Name: Service-D + Kind: ~ + - Name: Service-E + Kind: ~ + - Name: Service-F + Kind: ~ + --- + When I visit the services page for yaml + --- + dc: dc-1 + --- + When I click selected on the sort + When I click options.1.button on the sort + Then I see name on the services vertically like yaml + --- + - Service-F + - Service-E + - Service-D + - Service-C + - Service-B + - Service-A + --- + When I click selected on the sort + When I click options.0.button on the sort + Then I see name on the services vertically like yaml + --- + - Service-A + - Service-B + - Service-C + - Service-D + - Service-E + - Service-F + --- diff --git a/ui-v2/tests/acceptance/steps/components/catalog-toolbar-steps.js b/ui-v2/tests/acceptance/steps/components/catalog-toolbar-steps.js new file mode 100644 index 0000000000..3c9a76f69f --- /dev/null +++ b/ui-v2/tests/acceptance/steps/components/catalog-toolbar-steps.js @@ -0,0 +1,10 @@ +import steps from '../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff --git a/ui-v2/tests/acceptance/steps/dc/services/sorting-steps.js b/ui-v2/tests/acceptance/steps/dc/services/sorting-steps.js new file mode 100644 index 0000000000..ba1093295f --- /dev/null +++ b/ui-v2/tests/acceptance/steps/dc/services/sorting-steps.js @@ -0,0 +1,10 @@ +import steps from '../../steps'; + +// step definitions that are shared between features should be moved to the +// tests/acceptance/steps/steps.js file + +export default function(assert) { + return steps(assert).then('I should find a file', function() { + assert.ok(true, this.step); + }); +} diff --git a/ui-v2/tests/integration/components/catalog-toolbar-test.js b/ui-v2/tests/integration/components/catalog-toolbar-test.js new file mode 100644 index 0000000000..9c42f9db77 --- /dev/null +++ b/ui-v2/tests/integration/components/catalog-toolbar-test.js @@ -0,0 +1,26 @@ +import { module, skip } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import { hbs } from 'ember-cli-htmlbars'; + +module('Integration | Component | catalog-toolbar', function(hooks) { + setupRenderingTest(hooks); + + skip('it renders', async function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.set('myAction', function(val) { ... }); + + await render(hbs``); + + assert.equal(this.element.querySelector('form').length, 1); + + // Template block usage: + await render(hbs` + + template block text + + `); + + assert.equal(this.element.textContent.trim(), 'template block text'); + }); +}); diff --git a/ui-v2/tests/pages.js b/ui-v2/tests/pages.js index 5ef2bf14ef..65af4f154f 100644 --- a/ui-v2/tests/pages.js +++ b/ui-v2/tests/pages.js @@ -21,6 +21,8 @@ import radiogroup from 'consul-ui/tests/lib/page-object/radiogroup'; import tabgroup from 'consul-ui/tests/lib/page-object/tabgroup'; import freetextFilter from 'consul-ui/tests/pages/components/freetext-filter'; import catalogFilter from 'consul-ui/tests/pages/components/catalog-filter'; +import catalogToolbar from 'consul-ui/tests/pages/components/catalog-toolbar'; +import popoverSort from 'consul-ui/tests/pages/components/popover-sort'; import aclFilter from 'consul-ui/tests/pages/components/acl-filter'; import intentionFilter from 'consul-ui/tests/pages/components/intention-filter'; import tokenListFactory from 'consul-ui/tests/pages/components/token-list'; @@ -75,10 +77,10 @@ export default { index: create(index(visitable, collection)), dcs: create(dcs(visitable, clickable, attribute, collection)), services: create( - services(visitable, clickable, text, attribute, collection, page, catalogFilter, radiogroup) + services(visitable, clickable, text, attribute, collection, page, popoverSort, radiogroup) ), service: create( - service(visitable, attribute, collection, text, consulIntentionList, catalogFilter, tabgroup) + service(visitable, attribute, collection, text, consulIntentionList, catalogToolbar, tabgroup) ), instance: create(instance(visitable, attribute, collection, text, tabgroup)), nodes: create(nodes(visitable, clickable, attribute, collection, catalogFilter)), diff --git a/ui-v2/tests/pages/components/catalog-toolbar.js b/ui-v2/tests/pages/components/catalog-toolbar.js new file mode 100644 index 0000000000..76fda01024 --- /dev/null +++ b/ui-v2/tests/pages/components/catalog-toolbar.js @@ -0,0 +1,4 @@ +import { triggerable } from 'ember-cli-page-object'; +export default { + search: triggerable('keypress', '[name="s"]'), +}; diff --git a/ui-v2/tests/pages/components/popover-sort.js b/ui-v2/tests/pages/components/popover-sort.js new file mode 100644 index 0000000000..c97639dd9a --- /dev/null +++ b/ui-v2/tests/pages/components/popover-sort.js @@ -0,0 +1,8 @@ +import { clickable, collection } from 'ember-cli-page-object'; +export default { + scope: '[data-popover-select]', + selected: clickable('button'), + options: collection('li[role="none"]', { + button: clickable('button'), + }), +}; diff --git a/ui-v2/tests/pages/dc/services/index.js b/ui-v2/tests/pages/dc/services/index.js index 71fb21a8a4..0d3ea9e431 100644 --- a/ui-v2/tests/pages/dc/services/index.js +++ b/ui-v2/tests/pages/dc/services/index.js @@ -1,6 +1,6 @@ -export default function(visitable, clickable, text, attribute, collection, page, filter) { +export default function(visitable, clickable, text, attribute, collection, page, popoverSort) { const service = { - name: text('a span:nth-child(2)'), + name: text('[data-test-service-name]'), service: clickable('a'), externalSource: attribute('data-test-external-source', '[data-test-external-source]'), kind: attribute('data-test-kind', '[data-test-kind]'), @@ -12,7 +12,7 @@ export default function(visitable, clickable, text, attribute, collection, page, name: clickable('a'), }), navigation: page.navigation, - filter: filter, home: clickable('[data-test-home]'), + sort: popoverSort, }; } diff --git a/ui-v2/tests/steps/assertions/page.js b/ui-v2/tests/steps/assertions/page.js index 4e1489c7c3..a698cfb9b4 100644 --- a/ui-v2/tests/steps/assertions/page.js +++ b/ui-v2/tests/steps/assertions/page.js @@ -1,4 +1,6 @@ /* eslint no-console: "off" */ +import $ from '-jquery'; + const notFound = 'Element not found'; const cannotDestructure = "Cannot destructure property 'context'"; const cannotReadContext = "Cannot read property 'context' of undefined"; @@ -57,6 +59,40 @@ export default function(scenario, assert, find, currentPage) { ); }); }) + .then('I see $property on the $component vertically like yaml\n$yaml', function( + property, + component, + yaml + ) { + const _component = currentPage()[component]; + const iterator = new Array(_component.length).fill(true); + assert.ok(iterator.length > 0); + + const items = _component.toArray().sort((a, b) => { + return ( + $(a.scope) + .get(0) + .getBoundingClientRect().top - + $(b.scope) + .get(0) + .getBoundingClientRect().top + ); + }); + + iterator.forEach(function(item, i, arr) { + const actual = typeof items[i][property] === 'undefined' ? null : items[i][property]; + + const expected = typeof yaml[i] === 'number' ? yaml[i].toString() : yaml[i]; + + assert.deepEqual( + actual, + expected, + `Expected to see ${property} on ${component}[${i}] as ${JSON.stringify( + expected + )}, was ${JSON.stringify(actual)}` + ); + }); + }) .then(['I see $property on the $component'], function(property, component) { // TODO: Time to work on repetition // Collection diff --git a/ui-v2/tests/unit/helpers/selectable-key-values-test.js b/ui-v2/tests/unit/helpers/selectable-key-values-test.js new file mode 100644 index 0000000000..76090b3072 --- /dev/null +++ b/ui-v2/tests/unit/helpers/selectable-key-values-test.js @@ -0,0 +1,34 @@ +import { selectableKeyValues } from 'consul-ui/helpers/selectable-key-values'; +import { module, test } from 'qunit'; + +module('Unit | Helper | selectable-key-values', function() { + test('it turns arrays into key values and selects the first item by default', function(assert) { + const actual = selectableKeyValues([['key-1', 'value-1'], ['key-2', 'value-2']]); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'key-1', value: 'value-1' }); + }); + test('it turns arrays into key values and selects the defined key', function(assert) { + const actual = selectableKeyValues([['key-1', 'value-1'], ['key-2', 'value-2']], { + selected: 'key-2', + }); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'key-2', value: 'value-2' }); + }); + test('it turns arrays into key values and selects the defined index', function(assert) { + const actual = selectableKeyValues([['key-1', 'value-1'], ['key-2', 'value-2']], { + selected: 1, + }); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'key-2', value: 'value-2' }); + }); + test('it turns arrays with only one element into key values and selects the defined index', function(assert) { + const actual = selectableKeyValues([['Value 1'], ['Value 2']], { selected: 1 }); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'value-2', value: 'Value 2' }); + }); + test('it turns strings into key values and selects the defined index', function(assert) { + const actual = selectableKeyValues(['Value 1', 'Value 2'], { selected: 1 }); + assert.equal(actual.items.length, 2); + assert.deepEqual(actual.selected, { key: 'value-2', value: 'Value 2' }); + }); +}); From ad9a24d53fc5e7c62950d99ed52832e95cd603e2 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Mon, 11 May 2020 15:05:25 +0100 Subject: [PATCH 72/83] ui: Moves/loads policy datacenters info into the detail panel (#7828) --- ui-v2/app/components/policy-selector/index.hbs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ui-v2/app/components/policy-selector/index.hbs b/ui-v2/app/components/policy-selector/index.hbs index 1d0d8743f3..8b702a2b86 100644 --- a/ui-v2/app/components/policy-selector/index.hbs +++ b/ui-v2/app/components/policy-selector/index.hbs @@ -57,14 +57,22 @@ + {{#if (eq item.template '')}} + + {{/if}} +
    +
    Datacenters:
    +
    + {{join ', ' (policy/datacenters (or loadedItem item))}} +
    +
    {{#if (env 'CONSUL_NSPACES_ENABLED')}}
{{/if}} \ No newline at end of file diff --git a/ui-v2/app/components/consul-service-list/index.hbs b/ui-v2/app/components/consul-service-list/index.hbs index b4cb708113..db0724e3fb 100644 --- a/ui-v2/app/components/consul-service-list/index.hbs +++ b/ui-v2/app/components/consul-service-list/index.hbs @@ -25,11 +25,11 @@ connected with proxy {{/if}} - {{#if (gt items.Tags.length 0)}} -
  • - -
  • - {{/if}} + +
  • + +
  • +
    {{/if}} \ No newline at end of file diff --git a/ui-v2/app/components/tag-list/index.hbs b/ui-v2/app/components/tag-list/index.hbs index c51ea2a418..ead1355091 100644 --- a/ui-v2/app/components/tag-list/index.hbs +++ b/ui-v2/app/components/tag-list/index.hbs @@ -1,8 +1,16 @@ -{{#if (gt items.length 0)}} -
    Tags
    -
    - {{#each items as |item|}} - {{item}} - {{/each}} -
    +{{#if (gt item.Tags.length 0)}} + {{#if (has-block)}} + {{yield + (component 'tag-list' item=item) + }} + {{else}} +
    +
    Tags
    +
    + {{#each item.Tags as |item|}} + {{item}} + {{/each}} +
    +
    + {{/if}} {{/if}} diff --git a/ui-v2/app/components/tag-list/index.js b/ui-v2/app/components/tag-list/index.js index 1656e4a23c..4798652642 100644 --- a/ui-v2/app/components/tag-list/index.js +++ b/ui-v2/app/components/tag-list/index.js @@ -1,6 +1,5 @@ import Component from '@ember/component'; export default Component.extend({ - tagName: 'dl', - classNames: ['tag-list'], + tagName: '', }); diff --git a/ui-v2/app/templates/dc/nodes/show/services.hbs b/ui-v2/app/templates/dc/nodes/show/services.hbs index d08540260d..48e714657e 100644 --- a/ui-v2/app/templates/dc/nodes/show/services.hbs +++ b/ui-v2/app/templates/dc/nodes/show/services.hbs @@ -34,7 +34,7 @@ {{item.Port}} - +
    diff --git a/ui-v2/app/templates/dc/services/index.hbs b/ui-v2/app/templates/dc/services/index.hbs index 240b8390d4..e3f300af53 100644 --- a/ui-v2/app/templates/dc/services/index.hbs +++ b/ui-v2/app/templates/dc/services/index.hbs @@ -30,7 +30,7 @@ - +

    diff --git a/ui-v2/app/templates/dc/services/instance/tags.hbs b/ui-v2/app/templates/dc/services/instance/tags.hbs index ff5d0c4cd4..c0c620962e 100644 --- a/ui-v2/app/templates/dc/services/instance/tags.hbs +++ b/ui-v2/app/templates/dc/services/instance/tags.hbs @@ -1,7 +1,7 @@

    {{#if (gt item.Tags.length 0) }} - + {{else}}

    There are no tags. diff --git a/ui-v2/app/templates/dc/services/show/tags.hbs b/ui-v2/app/templates/dc/services/show/tags.hbs index 20a5cd3f04..a3cb6a6e35 100644 --- a/ui-v2/app/templates/dc/services/show/tags.hbs +++ b/ui-v2/app/templates/dc/services/show/tags.hbs @@ -1,7 +1,7 @@

    {{#if (gt item.Tags.length 0) }} - + {{else}}

    There are no tags. diff --git a/ui-v2/tests/integration/components/tag-list-test.js b/ui-v2/tests/integration/components/tag-list-test.js index a8f5c9fbe8..ce65406ac5 100644 --- a/ui-v2/tests/integration/components/tag-list-test.js +++ b/ui-v2/tests/integration/components/tag-list-test.js @@ -10,16 +10,17 @@ module('Integration | Component | tag list', function(hooks) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.on('myAction', function(val) { ... }); - await render(hbs`{{tag-list}}`); + await render(hbs``); - assert.dom('*').hasText(''); + assert.dom('dd').hasText('tag'); // Template block usage: await render(hbs` - {{#tag-list}} - {{/tag-list}} + + + `); - assert.dom('*').hasText(''); + assert.dom('dd').hasText('tag'); }); }); From e2ef864b1edb2e705b265c4b791600844d06eab4 Mon Sep 17 00:00:00 2001 From: Kenia <19161242+kaxcode@users.noreply.github.com> Date: Tue, 12 May 2020 08:06:08 -0400 Subject: [PATCH 80/83] ui: Add and use ProxyFor to get the `connected with proxy` boolean (#7820) * Add and use ProxyFor to get the `connected with proxy` boolean * Fix up page-navigation test * Upgrade to @hashicorp/consul-api-double@2.14.7 --- ui-v2/app/controllers/dc/services/index.js | 8 +++++++- ui-v2/app/models/service.js | 1 + ui-v2/tests/acceptance/page-navigation.feature | 2 +- ui-v2/yarn.lock | 6 +++--- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ui-v2/app/controllers/dc/services/index.js b/ui-v2/app/controllers/dc/services/index.js index c1a4e6d429..4f3a1185c4 100644 --- a/ui-v2/app/controllers/dc/services/index.js +++ b/ui-v2/app/controllers/dc/services/index.js @@ -32,7 +32,13 @@ export default Controller.extend(WithEventSource, WithSearching, { return item.Kind === 'connect-proxy'; }) .forEach(item => { - proxies[item.Name.replace('-proxy', '')] = true; + // Iterating to cover the usecase of a proxy being + // used by more than one service + if (item.ProxyFor) { + item.ProxyFor.forEach(service => { + proxies[service] = true; + }); + } }); return proxies; diff --git a/ui-v2/app/models/service.js b/ui-v2/app/models/service.js index 49b04c2ac2..611031f04d 100644 --- a/ui-v2/app/models/service.js +++ b/ui-v2/app/models/service.js @@ -14,6 +14,7 @@ export default Model.extend({ }, }), InstanceCount: attr('number'), + ProxyFor: attr(), Kind: attr('string'), ExternalSources: attr(), Meta: attr(), diff --git a/ui-v2/tests/acceptance/page-navigation.feature b/ui-v2/tests/acceptance/page-navigation.feature index 007fdfb2ac..f4e0e15b5f 100644 --- a/ui-v2/tests/acceptance/page-navigation.feature +++ b/ui-v2/tests/acceptance/page-navigation.feature @@ -42,7 +42,7 @@ Feature: page-navigation Where: ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Item | Model | URL | Endpoint | Back | - | service | services | /dc-1/services/service-0-terminating-gateway/instances | /v1/discovery-chain/service-0-terminating-gateway?dc=dc-1&ns=@namespace | /dc-1/services | + | service | services | /dc-1/services/service-0/instances | /v1/discovery-chain/service-0?dc=dc-1&ns=@namespace | /dc-1/services | | node | nodes | /dc-1/nodes/node-0/health-checks | /v1/session/node/node-0?dc=dc-1&ns=@namespace | /dc-1/nodes | | kv | kvs | /dc-1/kv/0-key-value/edit | /v1/session/info/ee52203d-989f-4f7a-ab5a-2bef004164ca?dc=dc-1&ns=@namespace | /dc-1/kv | # | acl | acls | /dc-1/acls/anonymous | /v1/acl/info/anonymous?dc=dc-1 | /dc-1/acls | diff --git a/ui-v2/yarn.lock b/ui-v2/yarn.lock index f19900d101..eb4a17664a 100644 --- a/ui-v2/yarn.lock +++ b/ui-v2/yarn.lock @@ -1211,9 +1211,9 @@ js-yaml "^3.13.1" "@hashicorp/consul-api-double@^2.6.2": - version "2.14.4" - resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-2.14.4.tgz#cc68c500f934d9ac76292797f845e78b9e3c4fcb" - integrity sha512-6GXHlSKr822CPuAz7jWBDZE4KAxKNSFt/2RA0Z7q6HAHu0O3NTd14vZweO30hS1yusyVEI9RLd9OvgMbv5WXhA== + version "2.14.7" + resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-2.14.7.tgz#80cd19461a3f3716bf76ba28bcabff842bcd9aef" + integrity sha512-QjpwvrraUswn/hFh+9lIKuA9keCGOkh1yr/cT3I6fDiw4JKLyDLaRN8bF/JNGtgoA/SsQh10L1YI3feZ7M3VKw== "@hashicorp/ember-cli-api-double@^3.0.2": version "3.0.2" From 182cdef45c41754c0f5fc5de84514196acfaf3b4 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 12 May 2020 13:14:10 +0100 Subject: [PATCH 81/83] ui: Restrict %secondary-button to only form buttons in the main content (#7836) --- ui-v2/app/styles/components/buttons.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui-v2/app/styles/components/buttons.scss b/ui-v2/app/styles/components/buttons.scss index 69d004b61b..2bdbb51600 100644 --- a/ui-v2/app/styles/components/buttons.scss +++ b/ui-v2/app/styles/components/buttons.scss @@ -6,14 +6,14 @@ a.type-create { // TODO: Once we move action-groups to use aria menu we can get rid of // some of this and just use not(aria-haspopup) button[type='reset'], -form button[type='button']:not([aria-haspopup='menu']), +%app-view-content form button[type='button']:not([aria-haspopup='menu']), header .actions button[type='button']:not(.copy-btn), button.type-cancel, html.template-error div > a { @extend %secondary-button; } .with-confirmation .type-delete, -form button[type='button'].type-delete { +%app-view-content form button[type='button'].type-delete { @extend %dangerous-button; } button.copy-btn { From f469da640e00177052f163c638c19a15a6dd9135 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 12 May 2020 13:36:03 +0100 Subject: [PATCH 82/83] ui: Renames CopyButtonFeedback to CopyButton and use it everywhere (#7834) * ui: Renames CopyButtonFeedback to CopyButton and use it everywhere * Uncapitalize output * Remove the ability to set the contents via an attr, and.. ..change the attribute for the string that gets copied to be called 'value' so it feels like HTML --- .../components/copy-button-feedback/index.hbs | 15 ------ .../components/copy-button-feedback/index.js | 5 -- ui-v2/app/components/copy-button/README.mdx | 32 ++++++++++++ ui-v2/app/components/copy-button/index.hbs | 19 ++++++- ui-v2/app/components/copy-button/index.js | 49 ++++++++----------- .../app/components/healthcheck-list/index.hbs | 16 +----- .../base/components/tooltip/layout.scss | 4 +- .../styles/base/components/tooltip/skin.scss | 30 ++++++------ .../styles/components/feedback-dialog.scss | 4 +- ui-v2/app/templates/dc/acls/edit.hbs | 20 ++------ ui-v2/app/templates/dc/acls/tokens/edit.hbs | 4 +- ui-v2/app/templates/dc/intentions/edit.hbs | 20 ++------ ui-v2/app/templates/dc/nodes/show.hbs | 18 +------ .../templates/dc/services/instance/proxy.hbs | 8 +-- .../components/copy-button-feedback-test.js | 24 --------- 15 files changed, 103 insertions(+), 165 deletions(-) delete mode 100644 ui-v2/app/components/copy-button-feedback/index.hbs delete mode 100644 ui-v2/app/components/copy-button-feedback/index.js create mode 100644 ui-v2/app/components/copy-button/README.mdx delete mode 100644 ui-v2/tests/integration/components/copy-button-feedback-test.js diff --git a/ui-v2/app/components/copy-button-feedback/index.hbs b/ui-v2/app/components/copy-button-feedback/index.hbs deleted file mode 100644 index 775605c239..0000000000 --- a/ui-v2/app/components/copy-button-feedback/index.hbs +++ /dev/null @@ -1,15 +0,0 @@ - - - {{#if hasBlock }}{{yield}}{{else}}{{value}}{{/if}} - - -

    - Copied {{name}}! -

    - - -

    - Sorry, something went wrong! -

    -
    - diff --git a/ui-v2/app/components/copy-button-feedback/index.js b/ui-v2/app/components/copy-button-feedback/index.js deleted file mode 100644 index 4798652642..0000000000 --- a/ui-v2/app/components/copy-button-feedback/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({ - tagName: '', -}); diff --git a/ui-v2/app/components/copy-button/README.mdx b/ui-v2/app/components/copy-button/README.mdx new file mode 100644 index 0000000000..9e307ab510 --- /dev/null +++ b/ui-v2/app/components/copy-button/README.mdx @@ -0,0 +1,32 @@ +## CopyButton + +```handlebars +{{! inline }} + + + + Copy me! + +``` + +### Arguments + +| Argument | Type | Default | Description | +| --- | --- | --- | --- | +| `value` | `String` | | The string to be copied to the clipboard on click | +| `name` | `String` | | The 'Name' of the string to be copied. Mainly used for giving feedback to the user | + +This component renders a simple button, when clicked copies the value (the `@value` attribute) to the users clipboard. A simple piece of feedback is given to the user in the form of a tooltip. When used inline an empty button is rendered. + +### See + +- [Component Source Code](./index.js) +- [Template Source Code](./index.hbs) + +--- diff --git a/ui-v2/app/components/copy-button/index.hbs b/ui-v2/app/components/copy-button/index.hbs index 25b6ca9274..f1ee923884 100644 --- a/ui-v2/app/components/copy-button/index.hbs +++ b/ui-v2/app/components/copy-button/index.hbs @@ -1,2 +1,17 @@ -{{! this overriding template makes sure you can add button:empty's }} -{{~yield~}} + + + + + + + +

    + Copied {{name}}! +

    +
    + +

    + Sorry, something went wrong! +

    +
    +
    diff --git a/ui-v2/app/components/copy-button/index.js b/ui-v2/app/components/copy-button/index.js index 55b61f7447..e0b3d0ec13 100644 --- a/ui-v2/app/components/copy-button/index.js +++ b/ui-v2/app/components/copy-button/index.js @@ -1,38 +1,29 @@ import Component from '@ember/component'; import { inject as service } from '@ember/service'; -import WithListeners from 'consul-ui/mixins/with-listeners'; - -export default Component.extend(WithListeners, { +export default Component.extend({ clipboard: service('clipboard/os'), - tagName: 'button', - classNames: ['copy-btn'], - buttonType: 'button', - disabled: false, - error: function() {}, - success: function() {}, - attributeBindings: [ - 'clipboardText:data-clipboard-text', - 'clipboardTarget:data-clipboard-target', - 'clipboardAction:data-clipboard-action', - 'buttonType:type', - 'disabled', - 'aria-label', - 'title', - ], - delegateClickEvent: true, - + dom: service('dom'), + tagName: '', + init: function() { + this._super(...arguments); + this.guid = this.dom.guid(this); + this._listeners = this.dom.listeners(); + }, + willDestroyElement: function() { + this._super(...arguments); + this._listeners.remove(); + }, didInsertElement: function() { this._super(...arguments); - const clipboard = this.clipboard.execute( - this.delegateClickEvent ? `#${this.elementId}` : this.element - ); - ['success', 'error'].map(event => { - return this.listen(clipboard, event, () => { - if (!this.disabled) { - this[event](...arguments); - } - }); + const component = this; + this._listeners.add(this.clipboard.execute(`#${this.guid}`), { + success: function() { + component.success(...arguments); + }, + error: function() { + component.error(...arguments); + }, }); }, }); diff --git a/ui-v2/app/components/healthcheck-list/index.hbs b/ui-v2/app/components/healthcheck-list/index.hbs index 47cb070c06..fb07ce39ef 100644 --- a/ui-v2/app/components/healthcheck-list/index.hbs +++ b/ui-v2/app/components/healthcheck-list/index.hbs @@ -37,21 +37,7 @@
    Output
    {{item.Output}}
    - - - - - -

    - Copied output! -

    -
    - -

    - Sorry, something went wrong! -

    -
    -
    +
    {{/if}}
    diff --git a/ui-v2/app/styles/base/components/tooltip/layout.scss b/ui-v2/app/styles/base/components/tooltip/layout.scss index 55a6d459d3..8c7b0d0e7e 100644 --- a/ui-v2/app/styles/base/components/tooltip/layout.scss +++ b/ui-v2/app/styles/base/components/tooltip/layout.scss @@ -41,11 +41,11 @@ /* this is only for pseudo tooltips be want to avoid */ /* specifying pseudo in this file */ %tooltip::after { - bottom: calc(100% - 7px); + bottom: calc(100% - 8px); } %tooltip-bottom::before { bottom: auto; - top: calc(100% + 7px); + top: calc(100% + 8px); } %tooltip-bottom::after { bottom: -12px; diff --git a/ui-v2/app/styles/base/components/tooltip/skin.scss b/ui-v2/app/styles/base/components/tooltip/skin.scss index 806e7c22ab..148ab5a523 100644 --- a/ui-v2/app/styles/base/components/tooltip/skin.scss +++ b/ui-v2/app/styles/base/components/tooltip/skin.scss @@ -1,27 +1,29 @@ -%tooltip-bubble, -%tooltip-tail { +%tooltip-bubble { color: $white; - background-color: $gray-500; + background-color: $gray-700; +} +%tooltip-tail { + background-color: $transparent; + border-color: $transparent; + border-top-color: $gray-700; + border-bottom-color: $gray-700; } /* borders here are used to draw a triangle in CSS */ -/* the are not actual borders */ +/* they are not actual borders */ %tooltip-tail { - background-color: transparent !important; - border-left: 9px solid transparent; - border-right: 9px solid transparent; - - border-top: 18px solid $gray-500; + border-style: solid; + border-bottom-width: 0; + border-top-width: 18px; + border-left-width: 9px; + border-right-width: 9px; } %tooltip-bottom::after { - border-top: 0; - border-bottom: 18px solid $gray-500; + border-top-width: 0; + border-bottom-width: 18px; } %tooltip-bubble { border-radius: $decor-radius-200; - /* this isn't quite like the values in structure */ - /* but this looks closer visually */ - /* TODO: try and get this closer to structure */ box-shadow: $decor-elevation-400; } diff --git a/ui-v2/app/styles/components/feedback-dialog.scss b/ui-v2/app/styles/components/feedback-dialog.scss index 29ac1c663b..f6cf6a06c1 100644 --- a/ui-v2/app/styles/components/feedback-dialog.scss +++ b/ui-v2/app/styles/components/feedback-dialog.scss @@ -14,7 +14,7 @@ .actions .with-feedback p::after { bottom: auto; top: -13px !important; - border-bottom: 18px solid $gray-800; - border-top: 0; + border-bottom-width: 18px; + border-top-width: 0; } } diff --git a/ui-v2/app/templates/dc/acls/edit.hbs b/ui-v2/app/templates/dc/acls/edit.hbs index 40324a6b34..c42ef6915f 100644 --- a/ui-v2/app/templates/dc/acls/edit.hbs +++ b/ui-v2/app/templates/dc/acls/edit.hbs @@ -18,23 +18,9 @@
    {{#if (not create) }} - - - - Copy token ID - - - -

    - Copied token ID! -

    -
    - -

    - Sorry, something went wrong! -

    -
    -
    + + Copy token ID + diff --git a/ui-v2/app/templates/dc/acls/tokens/edit.hbs b/ui-v2/app/templates/dc/acls/tokens/edit.hbs index 075575dbc6..86cd683681 100644 --- a/ui-v2/app/templates/dc/acls/tokens/edit.hbs +++ b/ui-v2/app/templates/dc/acls/tokens/edit.hbs @@ -70,11 +70,11 @@
    AccessorID
    - {{item.AccessorID}} + {{item.AccessorID}}
    Token
    - {{item.SecretID}} + {{item.SecretID}}
    {{#if (and (not (token/is-legacy item)) (not create))}}
    Scope
    diff --git a/ui-v2/app/templates/dc/intentions/edit.hbs b/ui-v2/app/templates/dc/intentions/edit.hbs index 79f58397eb..f5e46939de 100644 --- a/ui-v2/app/templates/dc/intentions/edit.hbs +++ b/ui-v2/app/templates/dc/intentions/edit.hbs @@ -31,23 +31,9 @@ {{#if (not create) }} - - - - Copy UUID - - - -

    - Copied UUID! -

    -
    - -

    - Sorry, something went wrong! -

    -
    -
    + + Copy UUID + {{/if}}
    diff --git a/ui-v2/app/templates/dc/nodes/show.hbs b/ui-v2/app/templates/dc/nodes/show.hbs index c6b86c48cb..90188bbcad 100644 --- a/ui-v2/app/templates/dc/nodes/show.hbs +++ b/ui-v2/app/templates/dc/nodes/show.hbs @@ -28,23 +28,7 @@ }}/> - - - - {{item.Address}} - - - -

    - Copied IP Address! -

    -
    - -

    - Sorry, something went wrong! -

    -
    -
    + {{item.Address}}
    {{outlet}} diff --git a/ui-v2/app/templates/dc/services/instance/proxy.hbs b/ui-v2/app/templates/dc/services/instance/proxy.hbs index a3f373d7a1..234194c17c 100644 --- a/ui-v2/app/templates/dc/services/instance/proxy.hbs +++ b/ui-v2/app/templates/dc/services/instance/proxy.hbs @@ -32,9 +32,9 @@ {{#if (gt item.LocalBindPort 0)}} {{#let (concat (or item.LocalBindAddress '127.0.0.1') ':' item.LocalBindPort) as |combinedAddress| }}
  • - {{combinedAddress}}
  • @@ -80,7 +80,7 @@ {{#if combinedAddress}} {{combinedAddress}} - + {{else}} {{'-'}} {{/if}} diff --git a/ui-v2/tests/integration/components/copy-button-feedback-test.js b/ui-v2/tests/integration/components/copy-button-feedback-test.js deleted file mode 100644 index f9e89c380b..0000000000 --- a/ui-v2/tests/integration/components/copy-button-feedback-test.js +++ /dev/null @@ -1,24 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render } from '@ember/test-helpers'; -import hbs from 'htmlbars-inline-precompile'; - -module('Integration | Component | copy button feedback', function(hooks) { - setupRenderingTest(hooks); - - test('it renders', async function(assert) { - // Set any properties with this.set('myProperty', 'value'); - // Handle any actions with this.on('myAction', function(val) { ... }); - - await render(hbs`{{copy-button-feedback value='Click Me'}}`); - - assert.dom('*').hasText('Click Me'); - - // Template block usage: - await render(hbs` - {{#copy-button-feedback}}Click Me{{/copy-button-feedback}} - `); - - assert.dom('*').hasText('Click Me'); - }); -}); From b608ceb8155f192f5e196cbf6cd2f6cb9a48c868 Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 12 May 2020 16:37:22 +0100 Subject: [PATCH 83/83] ui: Test Improvements (#7854) * ui: Combine all "see/don't see" steps into one step * Fix up broken tests * Add some test meta data/titles * Test out proxies in the service listing * Remove comments --- .../components/consul-service-list/index.hbs | 2 +- ui-v2/app/templates/dc/services/show.hbs | 8 +- .../acceptance/components/text-input.feature | 4 +- ui-v2/tests/acceptance/dc/nodes/show.feature | 2 +- .../acceptance/dc/services/index.feature | 23 ++- .../dc/services/show-routing.feature | 2 +- ui-v2/tests/pages.js | 2 +- ui-v2/tests/pages/dc/services/index.js | 3 +- ui-v2/tests/steps.js | 2 +- ui-v2/tests/steps/assertions/page.js | 152 +++++++----------- 10 files changed, 95 insertions(+), 105 deletions(-) diff --git a/ui-v2/app/components/consul-service-list/index.hbs b/ui-v2/app/components/consul-service-list/index.hbs index db0724e3fb..a4f10402a9 100644 --- a/ui-v2/app/components/consul-service-list/index.hbs +++ b/ui-v2/app/components/consul-service-list/index.hbs @@ -21,7 +21,7 @@ {{/if}} {{#if (get proxies item.Name)}} -
  • +
  • connected with proxy
  • {{/if}} diff --git a/ui-v2/app/templates/dc/services/show.hbs b/ui-v2/app/templates/dc/services/show.hbs index 60a63633e7..0f766c90fb 100644 --- a/ui-v2/app/templates/dc/services/show.hbs +++ b/ui-v2/app/templates/dc/services/show.hbs @@ -21,10 +21,10 @@ {{/if}} diff --git a/ui-v2/tests/acceptance/components/text-input.feature b/ui-v2/tests/acceptance/components/text-input.feature index 1bdfe4d6e3..b629e7c043 100644 --- a/ui-v2/tests/acceptance/components/text-input.feature +++ b/ui-v2/tests/acceptance/components/text-input.feature @@ -2,7 +2,7 @@ Feature: components / text-input: Text input Background: Given 1 datacenter model with the value "dc-1" - Scenario: + Scenario: KV page When I visit the kv page for yaml --- dc: dc-1 @@ -15,7 +15,7 @@ Feature: components / text-input: Text input {"additional": "hi", "value": "there"} --- Then I see submitIsEnabled - Scenario: + Scenario: ACL page When I visit the acl page for yaml --- dc: dc-1 diff --git a/ui-v2/tests/acceptance/dc/nodes/show.feature b/ui-v2/tests/acceptance/dc/nodes/show.feature index 77ac77afcd..d403001416 100644 --- a/ui-v2/tests/acceptance/dc/nodes/show.feature +++ b/ui-v2/tests/acceptance/dc/nodes/show.feature @@ -54,7 +54,7 @@ Feature: dc / nodes / show: Show node --- And I see healthChecks on the tabs And I see services on the tabs - And I see roundTripTime on the tabs + And I don't see roundTripTime on the tabs And I see lockSessions on the tabs And I see servicesIsSelected on the tabs Scenario: A node warns when deregistered whilst blocking diff --git a/ui-v2/tests/acceptance/dc/services/index.feature b/ui-v2/tests/acceptance/dc/services/index.feature index f2539e39e4..6bec9f3287 100644 --- a/ui-v2/tests/acceptance/dc/services/index.feature +++ b/ui-v2/tests/acceptance/dc/services/index.feature @@ -75,6 +75,25 @@ Feature: dc / services / index: List Services - ingress-gateway - terminating-gateway --- + Scenario: View a Service with a proxy + Given 1 datacenter model with the value "dc-1" + And 3 service models from yaml + --- + - Name: Service-0 + Kind: ~ + - Name: Service-0-proxy + Kind: connect-proxy + ProxyFor: ['Service-0'] + - Name: Service-1 + Kind: ~ + --- - - + When I visit the services page for yaml + --- + dc: dc-1 + --- + Then the url should be /dc-1/services + And the title should be "Services - Consul" + Then I see 2 service models + And I see proxy on the services.0 + And I don't see proxy on the services.1 diff --git a/ui-v2/tests/acceptance/dc/services/show-routing.feature b/ui-v2/tests/acceptance/dc/services/show-routing.feature index 70c64c57c3..ca6f42c2cf 100644 --- a/ui-v2/tests/acceptance/dc/services/show-routing.feature +++ b/ui-v2/tests/acceptance/dc/services/show-routing.feature @@ -1,5 +1,5 @@ @setupApplicationTest -Feature: dc / services / Show Routing for Service +Feature: dc / services / show-routing: Show Routing for Service Scenario: Given a service, the Routing tab should display Given 1 datacenter model with the value "dc1" And 1 node models diff --git a/ui-v2/tests/pages.js b/ui-v2/tests/pages.js index a925ae7e0d..177f6ef115 100644 --- a/ui-v2/tests/pages.js +++ b/ui-v2/tests/pages.js @@ -87,7 +87,7 @@ export default { index: create(index(visitable, collection)), dcs: create(dcs(visitable, clickable, attribute, collection)), services: create( - services(visitable, clickable, text, attribute, collection, popoverSort, radiogroup) + services(visitable, clickable, text, attribute, isPresent, collection, popoverSort, radiogroup) ), service: create( service(visitable, attribute, collection, text, consulIntentionList, catalogToolbar, tabgroup) diff --git a/ui-v2/tests/pages/dc/services/index.js b/ui-v2/tests/pages/dc/services/index.js index 54b796cf3d..c7f15e18ad 100644 --- a/ui-v2/tests/pages/dc/services/index.js +++ b/ui-v2/tests/pages/dc/services/index.js @@ -1,9 +1,10 @@ -export default function(visitable, clickable, text, attribute, collection, popoverSort) { +export default function(visitable, clickable, text, attribute, present, collection, popoverSort) { const service = { name: text('[data-test-service-name]'), service: clickable('a'), externalSource: attribute('data-test-external-source', '[data-test-external-source]'), kind: attribute('data-test-kind', '[data-test-kind]'), + proxy: present('[data-test-proxy]'), }; return { visit: visitable('/:dc/services'), diff --git a/ui-v2/tests/steps.js b/ui-v2/tests/steps.js index 43db01a773..30100b2d1c 100644 --- a/ui-v2/tests/steps.js +++ b/ui-v2/tests/steps.js @@ -114,7 +114,7 @@ export default function(assert, library) { } obj = parent[last]; if (typeof obj === 'undefined') { - throw new Error(`The '${path}' object doesn't exist`); + throw new Error(`PageObject not found: The '${path}' object doesn't exist`); } if (typeof obj === 'function') { obj = obj.bind(parent); diff --git a/ui-v2/tests/steps/assertions/page.js b/ui-v2/tests/steps/assertions/page.js index a698cfb9b4..47d20bea72 100644 --- a/ui-v2/tests/steps/assertions/page.js +++ b/ui-v2/tests/steps/assertions/page.js @@ -1,9 +1,12 @@ /* eslint no-console: "off" */ import $ from '-jquery'; -const notFound = 'Element not found'; +const elementNotFound = 'Element not found'; +// this error comes from our pageObject `find `function +const pageObjectNotFound = 'PageObject not found'; const cannotDestructure = "Cannot destructure property 'context'"; const cannotReadContext = "Cannot read property 'context' of undefined"; + // checking for existence of pageObjects is pretty difficult // errors are thrown but we should check to make sure its the error that we // want and not another real error @@ -24,11 +27,20 @@ const cannotReadContext = "Cannot read property 'context' of undefined"; // that real errors are picked up by the tests, so if this gets unmanageable at any point // look at checking for the instance of e being TypeError or similar const isExpectedError = function(e) { - return [notFound, cannotDestructure, cannotReadContext].some(item => e.message.startsWith(item)); + return [pageObjectNotFound, elementNotFound, cannotDestructure, cannotReadContext].some(item => + e.message.startsWith(item) + ); }; - +const dont = `( don't| shouldn't| can't)?`; export default function(scenario, assert, find, currentPage) { scenario + .then(['I see $num of the $component object'], function(num, component) { + assert.equal( + currentPage()[component].length, + num, + `Expected to see ${num} items in the ${component} object` + ); + }) .then('I see $property on the $component like yaml\n$yaml', function( property, component, @@ -93,99 +105,57 @@ export default function(scenario, assert, find, currentPage) { ); }); }) - .then(['I see $property on the $component'], function(property, component) { - // TODO: Time to work on repetition - // Collection - var obj; - if (typeof currentPage()[component].objectAt === 'function') { - obj = currentPage()[component].objectAt(0); - } else { - obj = currentPage()[component]; - } - let _component; - if (typeof obj === 'function') { - const func = obj[property].bind(obj); - try { - _component = func(); - } catch (e) { + .then([`I${dont} see $property`, `I${dont} see $property on the $component`], function( + negative, + property, + component + ) { + const isNegative = typeof negative !== 'undefined'; + let message = `Expected to${isNegative ? ' not' : ''} see ${property}`; + let target; + try { + if (typeof component === 'string') { + property = `${component}.${property}`; + message = `${message} on ${component}`; + } + target = find(property); + } catch (e) { + if (isNegative) { + if (isExpectedError(e)) { + assert.ok(true, message); + return Promise.resolve(); + } else { + console.error(e); + throw e; + } + } else { console.error(e); - throw new Error( - `The '${property}' property on the '${component}' page object doesn't exist` + throw e; + } + } + if (typeof target === 'function') { + if (isNegative) { + assert.throws( + function() { + target(); + }, + function(e) { + return isExpectedError(e); + }, + message ); - } - } else { - _component = obj; - } - assert.ok(_component[property], `Expected to see ${property} on ${component}`); - }) - .then(['I see $num of the $component object'], function(num, component) { - assert.equal( - currentPage()[component].length, - num, - `Expected to see ${num} items in the ${component} object` - ); - }) - .then(["I don't see $property on the $component"], function(property, component) { - const message = `Expected to not see ${property} on ${component}`; - // Cope with collections - let obj; - if (typeof currentPage()[component].objectAt === 'function') { - obj = currentPage()[component].objectAt(0); - } else { - obj = currentPage()[component]; - } - let prop; - try { - prop = obj[property]; - } catch (e) { - if (isExpectedError(e)) { - assert.ok(true, message); + return Promise.resolve(); } else { - throw e; + try { + target = target(); + } catch (e) { + console.error(e); + throw new Error(`The '${property}' page object doesn't exist`); + } } } - if (typeof prop === 'function') { - assert.throws( - function() { - prop(); - }, - function(e) { - return isExpectedError(e); - }, - message - ); - } else { - assert.notOk(prop); - } - }) - .then(["I don't see $property"], function(property) { - const message = `Expected to not see ${property}`; - let prop; - try { - prop = currentPage()[property]; - } catch (e) { - if (isExpectedError(e)) { - assert.ok(true, message); - } else { - throw e; - } - } - if (typeof prop === 'function') { - assert.throws( - function() { - prop(); - }, - function(e) { - return isExpectedError(e); - }, - message - ); - } else { - assert.notOk(prop); - } - }) - .then(['I see $property'], function(property) { - assert.ok(currentPage()[property], `Expected to see ${property}`); + assert[isNegative ? 'notOk' : 'ok'](target, message); + return Promise.resolve(); }) .then( [