From 318bbf3e3f0e395d8627a88d1c4df6f127a04d81 Mon Sep 17 00:00:00 2001 From: Greg Magolan Date: Sat, 9 Nov 2019 14:35:10 -0800 Subject: [PATCH] feat(karma): npm peer deps & remove @rules_webtesting//browsers/sauce:chrome-win10 support Also cleanup us arguments and doc string for karma_web_test_suite. BREAKING CHANGES: npm karma deps for karma_web_test and karma_web_suite are now peer deps so that the versions used can be chosen by the user. This PR also removes the built-in `@io_bazel_rules_webtesting//browsers/sauce:chrome-win10` saucelabs support. It is not very useful as it only tests a single browser and it difficult to use. In the angular repo, saucelabs support was implemented with a custom karma config using karma_web_test. This is the recommended approach. --- examples/angular/package.json | 7 + examples/angular_view_engine/package.json | 7 + examples/protocol_buffers/package.json | 7 + examples/web_testing/BUILD.bazel | 17 --- examples/web_testing/package.json | 7 + package.json | 1 - packages/karma/src/BUILD.bazel | 13 -- packages/karma/src/index.from_src.bzl | 23 +++- packages/karma/src/karma.conf.js | 57 ++------ packages/karma/src/karma.js | 3 - packages/karma/src/karma_web_test.bzl | 123 ++++++++--------- packages/karma/src/package.json | 24 ++-- packages/karma/src/plugins.js | 13 -- packages/karma/test/defaults.bzl | 2 +- packages/protractor/src/protractor.conf.js | 21 +-- yarn.lock | 149 +-------------------- 16 files changed, 130 insertions(+), 344 deletions(-) delete mode 100644 packages/karma/src/karma.js delete mode 100644 packages/karma/src/plugins.js diff --git a/examples/angular/package.json b/examples/angular/package.json index 722f52ffca..75f6740693 100644 --- a/examples/angular/package.json +++ b/examples/angular/package.json @@ -46,6 +46,13 @@ "core-js": "2.6.9", "firebase-tools": "7.1.0", "history-server": "^1.3.1", + "karma": "~4.1.0", + "karma-chrome-launcher": "2.2.0", + "karma-firefox-launcher": "1.1.0", + "karma-jasmine": "2.0.1", + "karma-requirejs": "1.1.0", + "karma-sourcemap-loader": "0.3.7", + "requirejs": "2.3.6", "rollup": "^1.21.4", "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-node-resolve": "^5.2.0", diff --git a/examples/angular_view_engine/package.json b/examples/angular_view_engine/package.json index 249d7171e2..9e927ba594 100644 --- a/examples/angular_view_engine/package.json +++ b/examples/angular_view_engine/package.json @@ -46,7 +46,14 @@ "core-js": "2.6.9", "firebase-tools": "7.1.0", "history-server": "^1.3.1", + "karma": "~4.1.0", + "karma-chrome-launcher": "2.2.0", + "karma-firefox-launcher": "1.1.0", + "karma-jasmine": "2.0.1", + "karma-requirejs": "1.1.0", + "karma-sourcemap-loader": "0.3.7", "patch-package": "^6.2.0", + "requirejs": "2.3.6", "rollup": "^1.21.4", "rollup-plugin-amd": "^4.0.0", "rollup-plugin-commonjs": "^10.1.0", diff --git a/examples/protocol_buffers/package.json b/examples/protocol_buffers/package.json index 6ca3e9374c..eecd3aad4b 100644 --- a/examples/protocol_buffers/package.json +++ b/examples/protocol_buffers/package.json @@ -11,8 +11,15 @@ "@types/long": "^4.0.0", "@types/node": "11.11.1", "http-server": "^0.11.1", + "karma": "~4.1.0", + "karma-chrome-launcher": "2.2.0", + "karma-firefox-launcher": "1.1.0", + "karma-jasmine": "2.0.1", + "karma-requirejs": "1.1.0", + "karma-sourcemap-loader": "0.3.7", "long": "4.0.0", "protobufjs": "5.0.3", + "requirejs": "2.3.6", "rollup": "1.20.3", "terser": "4.3.1", "typescript": "^3.3.1" diff --git a/examples/web_testing/BUILD.bazel b/examples/web_testing/BUILD.bazel index 57c9ab0d4c..8ffb8fc59f 100644 --- a/examples/web_testing/BUILD.bazel +++ b/examples/web_testing/BUILD.bazel @@ -73,23 +73,6 @@ karma_web_test_suite( ], ) -karma_web_test_suite( - name = "sauce_test", - browsers = [ - "@io_bazel_rules_webtesting//browsers/sauce:chrome-win10", - ], - tags = [ - "exclusive", - "native", - "sauce", - # TODO(alexeagle): enable on CI once we have set the SAUCE env variables - "manual", - ], - deps = [ - ":tests", - ], -) - # Just a dummy test so that we have a test target for //... on certain bazelci platforms with bazel_integration_test sh_test( name = "dummy_test", diff --git a/examples/web_testing/package.json b/examples/web_testing/package.json index 6b4423c3c8..b257bbe364 100644 --- a/examples/web_testing/package.json +++ b/examples/web_testing/package.json @@ -4,7 +4,14 @@ "@bazel/typescript": "^0.40.0", "@types/jasmine": "2.8.2", "@types/node": "11.11.1", + "karma": "~4.1.0", + "karma-chrome-launcher": "2.2.0", + "karma-firefox-launcher": "1.1.0", + "karma-jasmine": "2.0.1", "karma-json-result-reporter": "1.0.0", + "karma-requirejs": "1.1.0", + "karma-sourcemap-loader": "0.3.7", + "requirejs": "2.3.6", "typescript": "^3.3.1" }, "scripts": { diff --git a/package.json b/package.json index 10ec4abe97..dcb93658ec 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,6 @@ "karma-firefox-launcher": "1.1.0", "karma-jasmine": "2.0.1", "karma-requirejs": "1.1.0", - "karma-sauce-launcher": "2.0.2", "karma-sourcemap-loader": "0.3.7", "minimist": "^1.2.0", "node_resolve_index": "file:./tools/npm_packages/node_resolve_index", diff --git a/packages/karma/src/BUILD.bazel b/packages/karma/src/BUILD.bazel index 1c2b93547f..0d9fb9e0e3 100644 --- a/packages/karma/src/BUILD.bazel +++ b/packages/karma/src/BUILD.bazel @@ -17,7 +17,6 @@ # The generated `@bazel/karma` npm package contains a trimmed BUILD file using INTERNAL fences. load("@bazel_skylib//:bzl_library.bzl", "bzl_library") load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") -load("@build_bazel_rules_nodejs//internal/js_library:js_library.bzl", "js_library") load("@npm_bazel_typescript//:index.from_src.bzl", "ts_library") package(default_visibility = ["//visibility:public"]) @@ -43,7 +42,6 @@ nodejs_binary( "@npm//karma-firefox-launcher", "@npm//karma-jasmine", "@npm//karma-requirejs", - "@npm//karma-sauce-launcher", "@npm//karma-sourcemap-loader", "@npm//requirejs", "@npm//tmp", @@ -71,23 +69,12 @@ filegroup( "browser_repositories.bzl", "index.bzl", "karma.conf.js", - "karma.js", "karma_web_test.bzl", "package.bzl", "package.json", - "plugins.js", ], ) -js_library( - name = "karma_plugins", - srcs = [ - "plugins.js", - ], - module_name = "@bazel/karma/plugins", - module_root = "plugins.js", -) - # END-INTERNAL exports_files([ "karma.conf.js", diff --git a/packages/karma/src/index.from_src.bzl b/packages/karma/src/index.from_src.bzl index d6cf7d9f7e..f54886a687 100644 --- a/packages/karma/src/index.from_src.bzl +++ b/packages/karma/src/index.from_src.bzl @@ -21,12 +21,21 @@ load( _karma_web_test_suite = "karma_web_test_suite", ) -INTERNAL_KARMA_BIN = "@npm_bazel_karma//:karma_bin" +_KARMA_BIN = "@npm_bazel_karma//:karma_bin" +_KARMA_PEER_DEPS = [ + "@npm//jasmine-core", + "@npm//karma", + "@npm//karma-chrome-launcher", + "@npm//karma-firefox-launcher", + "@npm//karma-jasmine", + "@npm//karma-requirejs", + "@npm//karma-sourcemap-loader", + "@npm//requirejs", + "@npm//tmp", +] -def karma_web_test(karma = INTERNAL_KARMA_BIN, **kwargs): - data = kwargs.pop("data", []) + ["@npm_bazel_karma//:karma_plugins"] - _karma_web_test(karma = karma, data = data, **kwargs) +def karma_web_test(karma = _KARMA_BIN, **kwargs): + _karma_web_test(karma = karma, peer_deps = _KARMA_PEER_DEPS, **kwargs) -def karma_web_test_suite(karma = INTERNAL_KARMA_BIN, **kwargs): - data = kwargs.pop("data", []) + ["@npm_bazel_karma//:karma_plugins"] - _karma_web_test_suite(karma = karma, data = data, **kwargs) +def karma_web_test_suite(karma = _KARMA_BIN, **kwargs): + _karma_web_test_suite(karma = karma, peer_deps = _KARMA_PEER_DEPS, **kwargs) diff --git a/packages/karma/src/karma.conf.js b/packages/karma/src/karma.conf.js index 3a36042189..cb3f631335 100644 --- a/packages/karma/src/karma.conf.js +++ b/packages/karma/src/karma.conf.js @@ -142,12 +142,15 @@ try { function configureBazelConfig(config, conf) { // list of karma plugins mergeConfigArray(conf, 'plugins', [ - // Loads 'concat_js', 'watcher', 'jasmine', 'requirejs' and 'sourcemap' - // from @bazel/karma. These packages are used in this config file. - ...require('@bazel/karma/plugins'), + // Loads 'concat_js' + require('@bazel/karma'), + // Load plugins that are peer deps. These packages are used in this config file. + require('karma-chrome-launcher'), + require('karma-firefox-launcher'), + require('karma-jasmine'), + require('karma-requirejs'), + require('karma-sourcemap-loader'), // Loads user-installed karma-* packages in the root node_modules. - // If some of the plugins above are also installed in user project, the - // user version would override the default. 'karma-*', ]); @@ -307,29 +310,7 @@ try { const webTestMetadata = require(process.env['WEB_TEST_METADATA']); log_verbose(`WEB_TEST_METADATA: ${JSON.stringify(webTestMetadata, null, 2)}`); - if (webTestMetadata['environment'] === 'sauce') { - // If a sauce labs browser is chosen for the test such as - // "@io_bazel_rules_webtesting//browsers/sauce:chrome-win10" - // than the 'environment' will equal 'sauce'. - // We expect that a SAUCE_USERNAME and SAUCE_ACCESS_KEY is available - // from the environment for this test to run - if (!process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY) { - console.error( - 'Make sure the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables are set.'); - process.exit(1); - } - // 'capabilities' will specify the sauce labs configuration to use - const capabilities = webTestMetadata['capabilities']; - conf.customLaunchers = { - 'sauce': { - base: 'SauceLabs', - browserName: capabilities['browserName'], - platform: capabilities['platform'], - version: capabilities['version'], - } - }; - conf.browsers.push('sauce'); - } else if (webTestMetadata['environment'] === 'local') { + if (webTestMetadata['environment'] === 'local') { // When a local chrome or firefox browser is chosen such as // "@io_bazel_rules_webtesting//browsers:chromium-local" or // "@io_bazel_rules_webtesting//browsers:firefox-local" @@ -376,26 +357,6 @@ try { if (!conf.browsers.length) { throw new Error('No browsers configured in web test suite'); } - - // Extra configuration is needed for saucelabs - // See: https://github.com/karma-runner/karma-sauce-launcher - if (conf.customLaunchers) { - // set the test name for sauce labs to use - // TEST_BINARY is set by Bazel and contains the name of the test - // target postfixed with the browser name such as - // 'examples/testing/testing_sauce_chrome-win10' for the - // test target examples/testing:testing - if (!conf.sauceLabs) { - conf.sauceLabs = {} - } - conf.sauceLabs.testName = process.env['TEST_BINARY'] || 'karma'; - - // Try "websocket" for a faster transmission first. Fallback to "polling" if necessary. - overrideConfigValue(conf, 'transports', ['websocket', 'polling']); - - // add the saucelabs reporter - mergeConfigArray(conf, 'reporters', ['saucelabs']); - } } function configureTsWebTestConfig(conf) { diff --git a/packages/karma/src/karma.js b/packages/karma/src/karma.js deleted file mode 100644 index 2653ede140..0000000000 --- a/packages/karma/src/karma.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node - -require('karma/lib/cli').run(); diff --git a/packages/karma/src/karma_web_test.bzl b/packages/karma/src/karma_web_test.bzl index b481e64a6d..58198a559c 100644 --- a/packages/karma/src/karma_web_test.bzl +++ b/packages/karma/src/karma_web_test.bzl @@ -18,8 +18,18 @@ load("@build_bazel_rules_nodejs//internal/js_library:js_library.bzl", "write_amd load("@io_bazel_rules_webtesting//web:web.bzl", "web_test_suite") load("@io_bazel_rules_webtesting//web/internal:constants.bzl", "DEFAULT_WRAPPED_TEST_TAGS") -_CONF_TMPL = "//:karma.conf.js" -_DEFAULT_KARMA_BIN = "@npm//@bazel/karma/bin:karma" +KARMA_PEER_DEPS = [ + "@npm//@bazel/karma", + "@npm//jasmine-core", + "@npm//karma", + "@npm//karma-chrome-launcher", + "@npm//karma-firefox-launcher", + "@npm//karma-jasmine", + "@npm//karma-requirejs", + "@npm//karma-sourcemap-loader", + "@npm//requirejs", + "@npm//tmp", +] KARMA_WEB_TEST_ATTRS = { "srcs": attr.label_list( @@ -51,7 +61,7 @@ KARMA_WEB_TEST_ATTRS = { ), "karma": attr.label( doc = "karma binary label", - default = Label(_DEFAULT_KARMA_BIN), + default = "@npm//karma/bin:karma", executable = True, cfg = "target", allow_files = True, @@ -76,7 +86,7 @@ KARMA_WEB_TEST_ATTRS = { aspects = [node_modules_aspect], ), "_conf_tmpl": attr.label( - default = Label(_CONF_TMPL), + default = "//:karma.conf.js", allow_single_file = True, ), } @@ -313,6 +323,7 @@ def karma_web_test( static_files = [], config_file = None, tags = [], + peer_deps = KARMA_PEER_DEPS, **kwargs): """Runs unit tests in a browser with Karma. @@ -357,12 +368,13 @@ def karma_web_test( certain attributes of this configuration file. Attributes that are overridden will be outputted to the test log. tags: Standard Bazel tags, this macro adds tags for ibazel support + peer_deps: list of peer npm deps required by karma_web_test **kwargs: Passed through to `karma_web_test` """ _karma_web_test( srcs = srcs, - deps = deps, + deps = deps + peer_deps, data = data, configuration_env_vars = configuration_env_vars, bootstrap = bootstrap, @@ -379,98 +391,81 @@ def karma_web_test( def karma_web_test_suite( name, browsers = None, - args = None, - browser_overrides = None, - config = None, - flaky = None, - local = None, - shard_count = None, - size = None, - tags = [], - test_suite_tags = None, - timeout = None, - visibility = None, web_test_data = [], - wrapped_test_tags = None, - **remaining_keyword_args): + wrapped_test_tags = list(DEFAULT_WRAPPED_TEST_TAGS), + **kwargs): """Defines a test_suite of web_test targets that wrap a karma_web_test target. - This macro also accepts all parameters in karma_web_test. See karma_web_test docs - for details. + This macro accepts all parameters in karma_web_test and adds additional parameters + for the suite. See karma_web_test docs for all karma_web_test. + + The wrapping macro is `web_test_suite` which comes from rules_websting: + https://github.com/bazelbuild/rules_webtesting/blob/master/web/web.bzl. Args: name: The base name of the test browsers: A sequence of labels specifying the browsers to use. - args: Args for web_test targets generated by this extension. - browser_overrides: Dictionary; optional; default is an empty dictionary. A - dictionary mapping from browser names to browser-specific web_test - attributes, such as shard_count, flakiness, timeout, etc. For example: - ``` - { - '//browsers:chrome-native': {'shard_count': 3, 'flaky': 1}, - '//browsers:firefox-native': {'shard_count': 1, 'timeout': 100}, - } - ``` - config: Label; optional; Configuration of web test features. - flaky: A boolean specifying that the test is flaky. If set, the test will - be retried up to 3 times (default: 0) - local: boolean; optional. - shard_count: The number of test shards to use per browser. (default: 1) - size: A string specifying the test size. (default: 'large') - tags: A list of test tag strings to apply to each generated web_test target. - This macro adds a couple for ibazel. - test_suite_tags: A list of tag strings for the generated test_suite. - timeout: A string specifying the test timeout (default: computed from size) - visibility: List of labels; optional. - web_test_data: Data dependencies for the web_test. - wrapped_test_tags: A list of test tag strings to use for the wrapped test - **remaining_keyword_args: Arguments for the wrapped test target. + web_test_data: Data dependencies for the wrapoer web_test targets. + wrapped_test_tags: A list of test tag strings to use for the wrapped + karma_web_test target. + **kwargs: Arguments for the wrapped karma_web_test target. """ - # Check explicitly for None so that users can set this to the empty list - if wrapped_test_tags == None: - wrapped_test_tags = DEFAULT_WRAPPED_TEST_TAGS - + # Common attributes + args = kwargs.pop("args", None) + flaky = kwargs.pop("flaky", None) + local = kwargs.pop("local", None) + shard_count = kwargs.pop("shard_count", None) + size = kwargs.pop("size", "large") + timeout = kwargs.pop("timeout", None) + + # Wrapper attributes + browser_overrides = kwargs.pop("browser_overrides", None) + config = kwargs.pop("config", None) + test_suite_tags = kwargs.pop("test_suite_tags", None) + visibility = kwargs.pop("visibility", None) + tags = kwargs.pop("tags", []) + [ + # Users don't need to know that this tag is required to run under ibazel + "ibazel_notify_changes", + ] if browsers == None: browsers = ["@io_bazel_rules_webtesting//browsers:chromium-local"] + + # rules_webesting requires the "native" tag for browsers if not "native" in tags: tags = tags + ["native"] - size = size or "large" - + # The wrapped `karma_web_test` target wrapped_test_name = name + "_wrapped_test" - - _karma_web_test( + karma_web_test( name = wrapped_test_name, args = args, flaky = flaky, local = local, shard_count = shard_count, size = size, - tags = wrapped_test_tags, timeout = timeout, + tags = wrapped_test_tags, visibility = ["//visibility:private"], - **remaining_keyword_args + **kwargs ) + # The wrapper `web_test_suite` target web_test_suite( name = name, - launcher = ":" + wrapped_test_name, args = args, - browsers = browsers, - browser_overrides = browser_overrides, - config = config, - data = web_test_data, flaky = flaky, local = local, shard_count = shard_count, size = size, - tags = tags + [ - # Users don't need to know that this tag is required to run under ibazel - "ibazel_notify_changes", - ], + timeout = timeout, + launcher = ":" + wrapped_test_name, + browsers = browsers, + browser_overrides = browser_overrides, + config = config, + data = web_test_data, + tags = tags, test = wrapped_test_name, test_suite_tags = test_suite_tags, - timeout = timeout, visibility = visibility, ) diff --git a/packages/karma/src/package.json b/packages/karma/src/package.json index 1c0b0eab4f..81f9eee887 100644 --- a/packages/karma/src/package.json +++ b/packages/karma/src/package.json @@ -17,21 +17,17 @@ ], "main": "./index.js", "typings": "./index.d.ts", - "bin": { - "karma": "./karma.js" - }, "dependencies": { - "jasmine-core": "2.8.0", - "karma": "~4.1.0", - "karma-chrome-launcher": "2.2.0", - "karma-firefox-launcher": "1.1.0", - "karma-jasmine": "2.0.1", - "karma-requirejs": "1.1.0", - "karma-sauce-launcher": "2.0.2", - "karma-sourcemap-loader": "0.3.7", - "requirejs": "2.3.5", - "semver": "5.6.0", - "tmp": "0.0.33" + "tmp": "0.1.0" + }, + "peerDependencies": { + "jasmine-core": ">=2.0.0", + "karma": ">=4.0.0", + "karma-chrome-launcher": ">=2.0.0", + "karma-firefox-launcher": ">=1.0.0", + "karma-jasmine": ">=2.0.0", + "karma-requirejs": ">=1.0.0", + "karma-sourcemap-loader": ">=0.3.0" }, "bazelWorkspaces": { "npm_bazel_karma": { diff --git a/packages/karma/src/plugins.js b/packages/karma/src/plugins.js deleted file mode 100644 index 1b99aa4c67..0000000000 --- a/packages/karma/src/plugins.js +++ /dev/null @@ -1,13 +0,0 @@ -// This file reexports dependencies of @bazel/karma so that the -// Bazel-generated Karma config could load the actual versions specified in -// this package. - -module.exports = [ - require('./index'), - require('karma-chrome-launcher'), - require('karma-firefox-launcher'), - require('karma-jasmine'), - require('karma-requirejs'), - require('karma-sauce-launcher'), - require('karma-sourcemap-loader'), -]; diff --git a/packages/karma/test/defaults.bzl b/packages/karma/test/defaults.bzl index 1a179c2eaf..6a19513db1 100644 --- a/packages/karma/test/defaults.bzl +++ b/packages/karma/test/defaults.bzl @@ -17,7 +17,7 @@ load("@npm_bazel_karma//:index.from_src.bzl", _karma_web_test_suite = "karma_web_test_suite") -def karma_web_test_suite(name, browsers = [], tags = [], **kwargs): +def karma_web_test_suite(name, browsers = None, tags = [], **kwargs): # BazelCI docker images are missing shares libs to run a subset browser tests: # mac: firefox does not work, chrome works # ubuntu: firefox and chrome do not work --- there are 0 tests to run diff --git a/packages/protractor/src/protractor.conf.js b/packages/protractor/src/protractor.conf.js index 81dd2254d8..6726f5610c 100644 --- a/packages/protractor/src/protractor.conf.js +++ b/packages/protractor/src/protractor.conf.js @@ -114,26 +114,7 @@ setConf(conf, 'specs', specs, 'are determined by the srcs and deps attribute'); if (process.env['WEB_TEST_METADATA']) { const webTestMetadata = require(process.env['WEB_TEST_METADATA']); log_verbose(`WEB_TEST_METADATA: ${JSON.stringify(webTestMetadata, null, 2)}`); - if (webTestMetadata['environment'] === 'sauce') { - // If a sauce labs browser is chosen for the test such as - // "@io_bazel_rules_webtesting//browsers/sauce:chrome-win10" - // than the 'environment' will equal 'sauce'. - // We expect that a SAUCE_USERNAME and SAUCE_ACCESS_KEY is available - // from the environment for this test to run - - // TODO(gmagolan): implement sauce labs support for protractor - throw new Error('Saucelabs not yet support by protractor_web_test_suite.'); - - // if (!process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY) { - // console.error('Make sure the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables are - // set.'); - // process.exit(1); - // } - // setConf(conf, 'sauceUser', process.env.SAUCE_USERNAME, 'is determined by the SAUCE_USERNAME - // environment variable'); - // setConf(conf, 'sauceKey', process.env.SAUCE_ACCESS_KEY, 'is determined by the - // SAUCE_ACCESS_KEY environment variable'); - } else if (webTestMetadata['environment'] === 'local') { + if (webTestMetadata['environment'] === 'local') { // When a local chrome or firefox browser is chosen such as // "@io_bazel_rules_webtesting//browsers:chromium-local" or // "@io_bazel_rules_webtesting//browsers:firefox-local" diff --git a/yarn.lock b/yarn.lock index 4be5ffa071..18d68331de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1287,7 +1287,7 @@ add-stream@^1.0.0: resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= -adm-zip@^0.4.9, adm-zip@~0.4.3: +adm-zip@^0.4.9: version "0.4.13" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw== @@ -1505,7 +1505,7 @@ async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.1.2, async@^2.6.2: +async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -2626,7 +2626,7 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2900,31 +2900,6 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.1: - version "1.15.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.15.0.tgz#8884928ec7e40a79e3c9bc812d37d10c8b24cc57" - integrity sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.0" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.6.0" - object-keys "^1.1.1" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -3651,13 +3626,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" @@ -3953,11 +3921,6 @@ is-builtin-module@3.0.0: dependencies: builtin-modules "^3.0.0" -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -3979,11 +3942,6 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -4105,25 +4063,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - is-text-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" @@ -4350,7 +4294,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jszip@^3.1.3, jszip@^3.1.5: +jszip@^3.1.3: version "3.2.2" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== @@ -4390,15 +4334,6 @@ karma-requirejs@1.1.0: resolved "https://registry.yarnpkg.com/karma-requirejs/-/karma-requirejs-1.1.0.tgz#fddae2cb87d7ebc16fb0222893564d7fee578798" integrity sha1-/driy4fX68FvsCIok1ZNf+5Xh5g= -karma-sauce-launcher@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-2.0.2.tgz#dbf98e70d86bf287b03a537cf637eb7aefa975c3" - integrity sha512-jLUFaJhHMcKpxFWUesyWYihzM5FvQiJsDwGcCtKeOy2lsWhkVw0V0Byqb1d+wU6myU1mribBtsIcub23HS4kWA== - dependencies: - sauce-connect-launcher "^1.2.4" - saucelabs "^1.5.0" - selenium-webdriver "^4.0.0-alpha.1" - karma-sourcemap-loader@0.3.7: version "0.3.7" resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" @@ -4573,7 +4508,7 @@ lodash@4.17.14: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -lodash@^4.14.14, lodash@^4.16.6, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.2.1: +lodash@^4.14.14, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -5161,12 +5096,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.11, object-keys@^1.0.12: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -5188,14 +5118,6 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -6199,17 +6121,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sauce-connect-launcher@^1.2.4: - version "1.2.7" - resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.2.7.tgz#c7f8b3d4eb354d07a9922b4cd67356f527192556" - integrity sha512-v07+QhFrxgz3seMFuRSonu3gW1s6DbcLQlFhjsRrmKUauzPbbudHdnn91WYgEwhoZVdPNzeZpAEJwcQyd9xnTA== - dependencies: - adm-zip "~0.4.3" - async "^2.1.2" - https-proxy-agent "^2.2.1" - lodash "^4.16.6" - rimraf "^2.5.4" - saucelabs@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" @@ -6241,16 +6152,6 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: tmp "0.0.30" xml2js "^0.4.17" -selenium-webdriver@^4.0.0-alpha.1: - version "4.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.5.tgz#e4683b3dbf827d70df09a7e43bf02ebad20fa7c1" - integrity sha512-hktl3DSrhzM59yLhWzDGHIX9o56DvA+cVK7Dw6FcJR6qQ4CGzkaHeXQPcdrslkWMTeq0Ci9AmCxq0EMOvm2Rkg== - dependencies: - jszip "^3.1.5" - rimraf "^2.6.3" - tmp "0.0.30" - xml2js "^0.4.19" - semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" @@ -6700,22 +6601,6 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.trimleft@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" - integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - -string.prototype.trimright@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" - integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -7252,14 +7137,6 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -7491,20 +7368,6 @@ xml2js@^0.4.17: sax ">=0.6.0" xmlbuilder "~9.0.1" -xml2js@^0.4.19: - version "0.4.22" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" - integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw== - dependencies: - sax ">=0.6.0" - util.promisify "~1.0.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - xmlbuilder@~9.0.1: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"