Repository: browserslist/browserslist (language: javascript)

Issue:
Move from Jest to uvu
https://github.com/lukeed/uvu


Discussion / hints:

Fix patch:
diff --git a/cli.js b/cli.js
index 3cf04949..5e806622 100755
--- a/cli.js
+++ b/cli.js
@@ -39,6 +39,7 @@ if (isArg('--help') || isArg('-h')) {
 } else if (isArg('--version') || isArg('-v')) {
   process.stdout.write('browserslist ' + pkg.version + '\n')
 } else if (isArg('--update-db')) {
+  /* c8 ignore next 3 */
   updateDb(function (str) {
     process.stdout.write(str)
   })
@@ -76,8 +77,10 @@ if (isArg('--help') || isArg('-h')) {
     } else if (name === '--json') {
       mode = 'json'
     } else if (name === '--mobile-to-desktop') {
+      /* c8 ignore next */
       opts.mobileToDesktop = true
     } else if (name === '--ignore-unknown-versions') {
+      /* c8 ignore next */
       opts.ignoreUnknownVersions = true
     } else {
       error('Unknown arguments ' + args[i] + '.\n\n' + USAGE)
@@ -90,9 +93,9 @@ if (isArg('--help') || isArg('-h')) {
   } catch (e) {
     if (e.name === 'BrowserslistError') {
       error(e.message)
-    } else {
+    } else /* c8 ignore start */ {
       throw e
-    }
+    } /* c8 ignore end */
   }
 
   var coverage
diff --git a/package.json b/package.json
index e860f93c..1eaa56b9 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,8 @@
   "license": "MIT",
   "repository": "browserslist/browserslist",
   "scripts": {
-    "test": "jest --coverage && eslint . && size-limit"
+    "test": "c8 yarn unit && eslint . && size-limit",
+    "unit": "NODE_ENV=test uvu test .test.js"
   },
   "dependencies": {
     "caniuse-lite": "^1.0.30001282",
@@ -34,6 +35,7 @@
   "devDependencies": {
     "@logux/eslint-config": "^46.1.0",
     "@size-limit/preset-small-lib": "^7.0.0",
+    "c8": "^7.10.0",
     "clean-publish": "^3.4.3",
     "cross-spawn": "^7.0.3",
     "eslint": "^8.2.0",
@@ -44,9 +46,9 @@
     "eslint-plugin-prefer-let": "^3.0.1",
     "eslint-plugin-promise": "^5.1.1",
     "fs-extra": "^8.1.0",
-    "jest": "^25.5.4",
     "nanoid": "^3.1.30",
-    "size-limit": "^7.0.0"
+    "size-limit": "^7.0.0",
+    "uvu": "^0.5.2"
   },
   "browser": {
     "./node.js": "./browser.js",
@@ -55,16 +57,12 @@
   "clean-publish": {
     "cleanDocs": true
   },
-  "jest": {
-    "testEnvironment": "node",
-    "coverageThreshold": {
-      "global": {
-        "statements": 100
-      }
-    },
-    "modulePathIgnorePatterns": [
-      "<rootDir>/test/fixtures"
-    ]
+  "c8": {
+    "exclude": [
+      "**/*.test.*"
+    ],
+    "lines": 100,
+    "check-coverage": true
   },
   "size-limit": [
     {
@@ -103,15 +101,6 @@
           "es5/no-spread": "off",
           "es5/no-for-of": "off",
           "no-console": "off"
-        },
-        "globals": {
-          "beforeEach": "readonly",
-          "afterEach": "readonly",
-          "beforeAll": "readonly",
-          "afterAll": "readonly",
-          "expect": "readonly",
-          "jest": "readonly",
-          "it": "readonly"
         }
       }
     ]
diff --git a/update-db.js b/update-db.js
index b02e0412..a15e0933 100644
--- a/update-db.js
+++ b/update-db.js
@@ -262,7 +262,7 @@ function updatePackageManually(print, lock, latest) {
   )
   try {
     childProcess.execSync(install + ' caniuse-lite')
-  } catch (e) /* istanbul ignore next */ {
+  } catch (e) /* c8 ignore start */ {
     print(
       pico.red(
         '\n' +
@@ -275,7 +275,7 @@ function updatePackageManually(print, lock, latest) {
       )
     )
     process.exit(1)
-  }
+  } /* c8 ignore end */
 
   var del = lock.mode === 'yarn' ? 'yarn remove -W' : lock.mode + ' uninstall'
   print(
@@ -309,7 +309,7 @@ module.exports = function updateDB(print) {
     )
     try {
       childProcess.execSync(update + ' caniuse-lite')
-    } catch (e) /* istanbul ignore next */ {
+    } catch (e) /* c8 ignore start */ {
       print(
         pico.red(
           '\n' +
@@ -322,7 +322,7 @@ module.exports = function updateDB(print) {
         )
       )
       process.exit(1)
-    }
+    } /* c8 ignore end */
   } else {
     updatePackageManually(print, lock, latest)
   }
@@ -333,9 +333,9 @@ module.exports = function updateDB(print) {
   if (!browsersListRetrievalError) {
     try {
       currentBrowsersList = getBrowsersList()
-    } catch (e) /* istanbul ignore next */ {
+    } catch (e) /* c8 ignore start */ {
       browsersListRetrievalError = e
-    }
+    } /* c8 ignore end */
   }
 
   if (browsersListRetrievalError) {
diff --git a/yarn.lock b/yarn.lock
index c7cbcba5..6527522c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,300 +2,11 @@
 # yarn lockfile v1
 
 
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
-  integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
-  dependencies:
-    "@babel/highlight" "^7.16.0"
-
-"@babel/compat-data@^7.16.0":
-  version "7.16.4"
-  resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e"
-  integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==
-
-"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4"
-  integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==
-  dependencies:
-    "@babel/code-frame" "^7.16.0"
-    "@babel/generator" "^7.16.0"
-    "@babel/helper-compilation-targets" "^7.16.0"
-    "@babel/helper-module-transforms" "^7.16.0"
-    "@babel/helpers" "^7.16.0"
-    "@babel/parser" "^7.16.0"
-    "@babel/template" "^7.16.0"
-    "@babel/traverse" "^7.16.0"
-    "@babel/types" "^7.16.0"
-    convert-source-map "^1.7.0"
-    debug "^4.1.0"
-    gensync "^1.0.0-beta.2"
-    json5 "^2.1.2"
-    semver "^6.3.0"
-    source-map "^0.5.0"
-
-"@babel/generator@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2"
-  integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==
-  dependencies:
-    "@babel/types" "^7.16.0"
-    jsesc "^2.5.1"
-    source-map "^0.5.0"
-
-"@babel/helper-compilation-targets@^7.16.0":
-  version "7.16.3"
-  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0"
-  integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==
-  dependencies:
-    "@babel/compat-data" "^7.16.0"
-    "@babel/helper-validator-option" "^7.14.5"
-    browserslist "^4.17.5"
-    semver "^6.3.0"
-
-"@babel/helper-function-name@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481"
-  integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==
-  dependencies:
-    "@babel/helper-get-function-arity" "^7.16.0"
-    "@babel/template" "^7.16.0"
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-get-function-arity@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa"
-  integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-hoist-variables@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a"
-  integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-member-expression-to-functions@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4"
-  integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-module-imports@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3"
-  integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-module-transforms@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5"
-  integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==
-  dependencies:
-    "@babel/helper-module-imports" "^7.16.0"
-    "@babel/helper-replace-supers" "^7.16.0"
-    "@babel/helper-simple-access" "^7.16.0"
-    "@babel/helper-split-export-declaration" "^7.16.0"
-    "@babel/helper-validator-identifier" "^7.15.7"
-    "@babel/template" "^7.16.0"
-    "@babel/traverse" "^7.16.0"
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-optimise-call-expression@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338"
-  integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0":
-  version "7.14.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
-  integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
-
-"@babel/helper-replace-supers@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17"
-  integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==
-  dependencies:
-    "@babel/helper-member-expression-to-functions" "^7.16.0"
-    "@babel/helper-optimise-call-expression" "^7.16.0"
-    "@babel/traverse" "^7.16.0"
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-simple-access@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517"
-  integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-split-export-declaration@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438"
-  integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==
-  dependencies:
-    "@babel/types" "^7.16.0"
-
-"@babel/helper-validator-identifier@^7.15.7":
-  version "7.15.7"
-  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
-  integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
-
-"@babel/helper-validator-option@^7.14.5":
-  version "7.14.5"
-  resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
-  integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==
-
-"@babel/helpers@^7.16.0":
-  version "7.16.3"
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c"
-  integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==
-  dependencies:
-    "@babel/template" "^7.16.0"
-    "@babel/traverse" "^7.16.3"
-    "@babel/types" "^7.16.0"
-
-"@babel/highlight@^7.16.0":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a"
-  integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==
-  dependencies:
-    "@babel/helper-validator-identifier" "^7.15.7"
-    chalk "^2.0.0"
-    js-tokens "^4.0.0"
-
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3":
-  version "7.16.4"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e"
-  integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==
-
-"@babel/plugin-syntax-async-generators@^7.8.4":
-  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.8.0"
-
-"@babel/plugin-syntax-bigint@^7.8.3":
-  version "7.8.3"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
-  integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-class-properties@^7.8.3":
-  version "7.12.13"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
-  integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.12.13"
-
-"@babel/plugin-syntax-import-meta@^7.8.3":
-  version "7.10.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
-  integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-json-strings@^7.8.3":
-  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.8.0"
-
-"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
-  version "7.10.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
-  integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
-  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.8.0"
-
-"@babel/plugin-syntax-numeric-separator@^7.8.3":
-  version "7.10.4"
-  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
-  integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.10.4"
-
-"@babel/plugin-syntax-object-rest-spread@^7.8.3":
-  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.8.0"
-
-"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
-  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-plugin-utils" "^7.8.0"
-
-"@babel/plugin-syntax-optional-chaining@^7.8.3":
-  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.8.0"
-
-"@babel/template@^7.16.0", "@babel/template@^7.3.3":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6"
-  integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==
-  dependencies:
-    "@babel/code-frame" "^7.16.0"
-    "@babel/parser" "^7.16.0"
-    "@babel/types" "^7.16.0"
-
-"@babel/traverse@^7.1.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3":
-  version "7.16.3"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787"
-  integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==
-  dependencies:
-    "@babel/code-frame" "^7.16.0"
-    "@babel/generator" "^7.16.0"
-    "@babel/helper-function-name" "^7.16.0"
-    "@babel/helper-hoist-variables" "^7.16.0"
-    "@babel/helper-split-export-declaration" "^7.16.0"
-    "@babel/parser" "^7.16.3"
-    "@babel/types" "^7.16.0"
-    debug "^4.1.0"
-    globals "^11.1.0"
-
-"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
-  version "7.16.0"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba"
-  integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==
-  dependencies:
-    "@babel/helper-validator-identifier" "^7.15.7"
-    to-fast-properties "^2.0.0"
-
 "@bcoe/v8-coverage@^0.2.3":
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
   integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
 
-"@cnakazawa/watch@^1.0.3":
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
-  integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
-  dependencies:
-    exec-sh "^0.3.2"
-    minimist "^1.2.0"
-
 "@eslint/eslintrc@^1.0.4":
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31"
@@ -325,190 +36,11 @@
   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
   integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
 
-"@istanbuljs/load-nyc-config@^1.0.0":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
-  integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
-  dependencies:
-    camelcase "^5.3.1"
-    find-up "^4.1.0"
-    get-package-type "^0.1.0"
-    js-yaml "^3.13.1"
-    resolve-from "^5.0.0"
-
 "@istanbuljs/schema@^0.1.2":
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
   integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
 
-"@jest/console@^25.5.0":
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb"
-  integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    chalk "^3.0.0"
-    jest-message-util "^25.5.0"
-    jest-util "^25.5.0"
-    slash "^3.0.0"
-
-"@jest/core@^25.5.4":
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4"
-  integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==
-  dependencies:
-    "@jest/console" "^25.5.0"
-    "@jest/reporters" "^25.5.1"
-    "@jest/test-result" "^25.5.0"
-    "@jest/transform" "^25.5.1"
-    "@jest/types" "^25.5.0"
-    ansi-escapes "^4.2.1"
-    chalk "^3.0.0"
-    exit "^0.1.2"
-    graceful-fs "^4.2.4"
-    jest-changed-files "^25.5.0"
-    jest-config "^25.5.4"
-    jest-haste-map "^25.5.1"
-    jest-message-util "^25.5.0"
-    jest-regex-util "^25.2.6"
-    jest-resolve "^25.5.1"
-    jest-resolve-dependencies "^25.5.4"
-    jest-runner "^25.5.4"
-    jest-runtime "^25.5.4"
-    jest-snapshot "^25.5.1"
-    jest-util "^25.5.0"
-    jest-validate "^25.5.0"
-    jest-watcher "^25.5.0"
-    micromatch "^4.0.2"
-    p-each-series "^2.1.0"
-    realpath-native "^2.0.0"
-    rimraf "^3.0.0"
-    slash "^3.0.0"
-    strip-ansi "^6.0.0"
-
-"@jest/environment@^25.5.0":
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37"
-  integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==
-  dependencies:
-    "@jest/fake-timers" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    jest-mock "^25.5.0"
-
-"@jest/fake-timers@^25.5.0":
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185"
-  integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    jest-message-util "^25.5.0"
-    jest-mock "^25.5.0"
-    jest-util "^25.5.0"
-    lolex "^5.0.0"
-
-"@jest/globals@^25.5.2":
-  version "25.5.2"
-  resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88"
-  integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==
-  dependencies:
-    "@jest/environment" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    expect "^25.5.0"
-
-"@jest/reporters@^25.5.1":
-  version "25.5.1"
-  resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b"
-  integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==
-  dependencies:
-    "@bcoe/v8-coverage" "^0.2.3"
-    "@jest/console" "^25.5.0"
-    "@jest/test-result" "^25.5.0"
-    "@jest/transform" "^25.5.1"
-    "@jest/types" "^25.5.0"
-    chalk "^3.0.0"
-    collect-v8-coverage "^1.0.0"
-    exit "^0.1.2"
-    glob "^7.1.2"
-    graceful-fs "^4.2.4"
-    istanbul-lib-coverage "^3.0.0"
-    istanbul-lib-instrument "^4.0.0"
-    istanbul-lib-report "^3.0.0"
-    istanbul-lib-source-maps "^4.0.0"
-    istanbul-reports "^3.0.2"
-    jest-haste-map "^25.5.1"
-    jest-resolve "^25.5.1"
-    jest-util "^25.5.0"
-    jest-worker "^25.5.0"
-    slash "^3.0.0"
-    source-map "^0.6.0"
-    string-length "^3.1.0"
-    terminal-link "^2.0.0"
-    v8-to-istanbul "^4.1.3"
-  optionalDependencies:
-    node-notifier "^6.0.0"
-
-"@jest/source-map@^25.5.0":
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b"
-  integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==
-  dependencies:
-    callsites "^3.0.0"
-    graceful-fs "^4.2.4"
-    source-map "^0.6.0"
-
-"@jest/test-result@^25.5.0":
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c"
-  integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==
-  dependencies:
-    "@jest/console" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    "@types/istanbul-lib-coverage" "^2.0.0"
-    collect-v8-coverage "^1.0.0"
-
-"@jest/test-sequencer@^25.5.4":
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737"
-  integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==
-  dependencies:
-    "@jest/test-result" "^25.5.0"
-    graceful-fs "^4.2.4"
-    jest-haste-map "^25.5.1"
-    jest-runner "^25.5.4"
-    jest-runtime "^25.5.4"
-
-"@jest/transform@^25.5.1":
-  version "25.5.1"
-  resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3"
-  integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==
-  dependencies:
-    "@babel/core" "^7.1.0"
-    "@jest/types" "^25.5.0"
-    babel-plugin-istanbul "^6.0.0"
-    chalk "^3.0.0"
-    convert-source-map "^1.4.0"
-    fast-json-stable-stringify "^2.0.0"
-    graceful-fs "^4.2.4"
-    jest-haste-map "^25.5.1"
-    jest-regex-util "^25.2.6"
-    jest-util "^25.5.0"
-    micromatch "^4.0.2"
-    pirates "^4.0.1"
-    realpath-native "^2.0.0"
-    slash "^3.0.0"
-    source-map "^0.6.1"
-    write-file-atomic "^3.0.0"
-
-"@jest/types@^25.5.0":
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
-  integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
-  dependencies:
-    "@types/istanbul-lib-coverage" "^2.0.0"
-    "@types/istanbul-reports" "^1.1.1"
-    "@types/yargs" "^15.0.0"
-    chalk "^3.0.0"
-
 "@logux/eslint-config@^46.1.0":
   version "46.1.0"
   resolved "https://registry.yarnpkg.com/@logux/eslint-config/-/eslint-config-46.1.0.tgz#26921037e20ace9e8811bfe8672cede991ecb11c"
@@ -535,13 +67,6 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@sinonjs/commons@^1.7.0":
-  version "1.8.3"
-  resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
-  integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==
-  dependencies:
-    type-detect "4.0.8"
-
 "@size-limit/esbuild@7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@size-limit/esbuild/-/esbuild-7.0.0.tgz#dfc015b9c9d311d11cf7ae83c9244559950d9d98"
@@ -565,142 +90,27 @@
     "@size-limit/esbuild" "7.0.0"
     "@size-limit/file" "7.0.0"
 
-"@types/babel__core@^7.1.7":
-  version "7.1.16"
-  resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702"
-  integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==
-  dependencies:
-    "@babel/parser" "^7.1.0"
-    "@babel/types" "^7.0.0"
-    "@types/babel__generator" "*"
-    "@types/babel__template" "*"
-    "@types/babel__traverse" "*"
-
-"@types/babel__generator@*":
-  version "7.6.3"
-  resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5"
-  integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==
-  dependencies:
-    "@babel/types" "^7.0.0"
-
-"@types/babel__template@*":
-  version "7.4.1"
-  resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969"
-  integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==
-  dependencies:
-    "@babel/parser" "^7.1.0"
-    "@babel/types" "^7.0.0"
-
-"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
-  version "7.14.2"
-  resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43"
-  integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==
-  dependencies:
-    "@babel/types" "^7.3.0"
-
-"@types/graceful-fs@^4.1.2":
-  version "4.1.5"
-  resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
-  integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
-  dependencies:
-    "@types/node" "*"
-
-"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
+"@types/istanbul-lib-coverage@^2.0.1":
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
   integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
 
-"@types/istanbul-lib-report@*":
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686"
-  integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==
-  dependencies:
-    "@types/istanbul-lib-coverage" "*"
-
-"@types/istanbul-reports@^1.1.1":
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
-  integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
-  dependencies:
-    "@types/istanbul-lib-coverage" "*"
-    "@types/istanbul-lib-report" "*"
-
 "@types/json5@^0.0.29":
   version "0.0.29"
   resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
   integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
 
-"@types/node@*":
-  version "16.11.7"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42"
-  integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==
-
-"@types/normalize-package-data@^2.4.0":
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
-  integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
-
-"@types/prettier@^1.19.0":
-  version "1.19.1"
-  resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f"
-  integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==
-
-"@types/stack-utils@^1.0.1":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
-  integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
-
-"@types/yargs-parser@*":
-  version "20.2.1"
-  resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
-  integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==
-
-"@types/yargs@^15.0.0":
-  version "15.0.14"
-  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06"
-  integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==
-  dependencies:
-    "@types/yargs-parser" "*"
-
-abab@^2.0.0:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
-  integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
-
-acorn-globals@^4.3.2:
-  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"
-
 acorn-jsx@^5.3.1:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
   integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
 
-acorn-walk@^6.0.1:
-  version "6.2.0"
-  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
-  integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
-
-acorn@^6.0.1:
-  version "6.4.2"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
-  integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
-
-acorn@^7.1.0:
-  version "7.4.1"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
-  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-
 acorn@^8.5.0:
   version "8.5.0"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"
   integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
 
-ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4:
+ajv@^6.10.0, ajv@^6.12.4:
   version "6.12.6"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
   integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -715,30 +125,11 @@ ansi-colors@^4.1.1:
   resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
   integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
 
-ansi-escapes@^4.2.1:
-  version "4.3.2"
-  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
-  integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
-  dependencies:
-    type-fest "^0.21.3"
-
-ansi-regex@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
-  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-
-ansi-regex@^5.0.0, ansi-regex@^5.0.1:
+ansi-regex@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
   integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
 
-ansi-styles@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
-  integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
-  dependencies:
-    color-convert "^1.9.0"
-
 ansi-styles@^4.0.0, ansi-styles@^4.1.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
@@ -746,15 +137,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
   dependencies:
     color-convert "^2.0.1"
 
-anymatch@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
-  integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
-  dependencies:
-    micromatch "^3.1.4"
-    normalize-path "^2.1.1"
-
-anymatch@^3.0.3, anymatch@~3.1.2:
+anymatch@~3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
   integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
@@ -762,38 +145,11 @@ anymatch@^3.0.3, anymatch@~3.1.2:
     normalize-path "^3.0.0"
     picomatch "^2.0.4"
 
-argparse@^1.0.7:
-  version "1.0.10"
-  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
-  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
-  dependencies:
-    sprintf-js "~1.0.2"
-
 argparse@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
   integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
 
-arr-diff@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
-  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-
-arr-flatten@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
-  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-
-array-equal@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
-  integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
-
 array-includes@^3.1.4:
   version "3.1.4"
   resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
@@ -810,11 +166,6 @@ array-union@^2.1.0:
   resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
   integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
 
-array-unique@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
-  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-
 array.prototype.flat@^1.2.5:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"
@@ -824,132 +175,11 @@ array.prototype.flat@^1.2.5:
     define-properties "^1.1.3"
     es-abstract "^1.19.0"
 
-asn1@~0.2.3:
-  version "0.2.6"
-  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
-  integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
-  dependencies:
-    safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-
-assign-symbols@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
-  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-
-astral-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
-  integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
-
-asynckit@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-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==
-
-aws-sign2@~0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-  integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-
-aws4@^1.8.0:
-  version "1.11.0"
-  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
-  integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
-
-babel-jest@^25.5.1:
-  version "25.5.1"
-  resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853"
-  integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==
-  dependencies:
-    "@jest/transform" "^25.5.1"
-    "@jest/types" "^25.5.0"
-    "@types/babel__core" "^7.1.7"
-    babel-plugin-istanbul "^6.0.0"
-    babel-preset-jest "^25.5.0"
-    chalk "^3.0.0"
-    graceful-fs "^4.2.4"
-    slash "^3.0.0"
-
-babel-plugin-istanbul@^6.0.0:
-  version "6.1.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
-  integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
-  dependencies:
-    "@babel/helper-plugin-utils" "^7.0.0"
-    "@istanbuljs/load-nyc-config" "^1.0.0"
-    "@istanbuljs/schema" "^0.1.2"
-    istanbul-lib-instrument "^5.0.4"
-    test-exclude "^6.0.0"
-
-babel-plugin-jest-hoist@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677"
-  integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==
-  dependencies:
-    "@babel/template" "^7.3.3"
-    "@babel/types" "^7.3.3"
-    "@types/babel__traverse" "^7.0.6"
-
-babel-preset-current-node-syntax@^0.1.2:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615"
-  integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==
-  dependencies:
-    "@babel/plugin-syntax-async-generators" "^7.8.4"
-    "@babel/plugin-syntax-bigint" "^7.8.3"
-    "@babel/plugin-syntax-class-properties" "^7.8.3"
-    "@babel/plugin-syntax-import-meta" "^7.8.3"
-    "@babel/plugin-syntax-json-strings" "^7.8.3"
-    "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
-    "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
-    "@babel/plugin-syntax-numeric-separator" "^7.8.3"
-    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
-    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
-    "@babel/plugin-syntax-optional-chaining" "^7.8.3"
-
-babel-preset-jest@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49"
-  integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==
-  dependencies:
-    babel-plugin-jest-hoist "^25.5.0"
-    babel-preset-current-node-syntax "^0.1.2"
-
 balanced-match@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
   integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
 
-base@^0.11.1:
-  version "0.11.2"
-  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
-  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
-  dependencies:
-    cache-base "^1.0.1"
-    class-utils "^0.3.5"
-    component-emitter "^1.2.1"
-    define-property "^1.0.0"
-    isobject "^3.0.1"
-    mixin-deep "^1.2.0"
-    pascalcase "^0.1.1"
-
-bcrypt-pbkdf@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
-  integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
-  dependencies:
-    tweetnacl "^0.14.3"
-
 binary-extensions@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -963,22 +193,6 @@ brace-expansion@^1.1.7:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
-braces@^2.3.1:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
-  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
-  dependencies:
-    arr-flatten "^1.1.0"
-    array-unique "^0.3.2"
-    extend-shallow "^2.0.1"
-    fill-range "^4.0.0"
-    isobject "^3.0.1"
-    repeat-element "^1.1.2"
-    snapdragon "^0.8.1"
-    snapdragon-node "^2.0.1"
-    split-string "^3.0.2"
-    to-regex "^3.0.1"
-
 braces@^3.0.1, braces@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -986,60 +200,28 @@ braces@^3.0.1, braces@~3.0.2:
   dependencies:
     fill-range "^7.0.1"
 
-browser-process-hrtime@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
-  integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
-
-browser-resolve@^1.11.3:
-  version "1.11.3"
-  resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
-  integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
-  dependencies:
-    resolve "1.1.7"
-
-browserslist@^4.17.5:
-  version "4.18.1"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f"
-  integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==
-  dependencies:
-    caniuse-lite "^1.0.30001280"
-    electron-to-chromium "^1.3.896"
-    escalade "^3.1.1"
-    node-releases "^2.0.1"
-    picocolors "^1.0.0"
-
-bser@2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
-  integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
-  dependencies:
-    node-int64 "^0.4.0"
-
-buffer-from@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
-  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
 bytes-iec@^3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/bytes-iec/-/bytes-iec-3.1.1.tgz#94cd36bf95c2c22a82002c247df8772d1d591083"
   integrity sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==
 
-cache-base@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
-  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
-  dependencies:
-    collection-visit "^1.0.0"
-    component-emitter "^1.2.1"
-    get-value "^2.0.6"
-    has-value "^1.0.0"
-    isobject "^3.0.1"
-    set-value "^2.0.0"
-    to-object-path "^0.3.0"
-    union-value "^1.0.0"
-    unset-value "^1.0.0"
+c8@^7.10.0:
+  version "7.10.0"
+  resolved "https://registry.yarnpkg.com/c8/-/c8-7.10.0.tgz#c539ebb15d246b03b0c887165982c49293958a73"
+  integrity sha512-OAwfC5+emvA6R7pkYFVBTOtI5ruf9DahffGmIqUc9l6wEh0h7iAFP6dt/V9Ioqlr2zW5avX9U9/w1I4alTRHkA==
+  dependencies:
+    "@bcoe/v8-coverage" "^0.2.3"
+    "@istanbuljs/schema" "^0.1.2"
+    find-up "^5.0.0"
+    foreground-child "^2.0.0"
+    istanbul-lib-coverage "^3.0.1"
+    istanbul-lib-report "^3.0.0"
+    istanbul-reports "^3.0.2"
+    rimraf "^3.0.0"
+    test-exclude "^6.0.0"
+    v8-to-istanbul "^8.0.0"
+    yargs "^16.2.0"
+    yargs-parser "^20.2.7"
 
 call-bind@^1.0.0, call-bind@^1.0.2:
   version "1.0.2"
@@ -1054,45 +236,11 @@ callsites@^3.0.0:
   resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
   integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
 
-camelcase@^5.0.0, camelcase@^5.3.1:
-  version "5.3.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
-  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-caniuse-lite@^1.0.30001280, caniuse-lite@^1.0.30001282:
+caniuse-lite@^1.0.30001282:
   version "1.0.30001282"
   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz#38c781ee0a90ccfe1fe7fefd00e43f5ffdcb96fd"
   integrity sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==
 
-capture-exit@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
-  integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
-  dependencies:
-    rsvp "^4.8.4"
-
-caseless@~0.12.0:
-  version "0.12.0"
-  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-  integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-
-chalk@^2.0.0:
-  version "2.4.2"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
-  integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
-  dependencies:
-    ansi-styles "^3.2.1"
-    escape-string-regexp "^1.0.5"
-    supports-color "^5.3.0"
-
-chalk@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
-  integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
-  dependencies:
-    ansi-styles "^4.1.0"
-    supports-color "^7.1.0"
-
 chalk@^4.0.0:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
@@ -1116,26 +264,11 @@ chokidar@^3.5.2:
   optionalDependencies:
     fsevents "~2.3.2"
 
-ci-info@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
-  integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
-
 ci-job-number@^1.2.2:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/ci-job-number/-/ci-job-number-1.2.2.tgz#f4e5918fcaeeda95b604f214be7d7d4a961fe0c0"
   integrity sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==
 
-class-utils@^0.3.5:
-  version "0.3.6"
-  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
-  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
-  dependencies:
-    arr-union "^3.1.0"
-    define-property "^0.2.5"
-    isobject "^3.0.0"
-    static-extend "^0.1.1"
-
 clean-publish@^3.4.3:
   version "3.4.3"
   resolved "https://registry.yarnpkg.com/clean-publish/-/clean-publish-3.4.3.tgz#1b12ac1d26549098bf49d0c17fdc9e86824d66be"
@@ -1147,39 +280,14 @@ clean-publish@^3.4.3:
     hosted-git-info "^4.0.2"
     lilconfig "^2.0.3"
 
-cliui@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
-  integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+cliui@^7.0.2:
+  version "7.0.4"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+  integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
   dependencies:
     string-width "^4.2.0"
     strip-ansi "^6.0.0"
-    wrap-ansi "^6.2.0"
-
-co@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-
-collect-v8-coverage@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
-  integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
-
-collection-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
-  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
-  dependencies:
-    map-visit "^1.0.0"
-    object-visit "^1.0.0"
-
-color-convert@^1.9.0:
-  version "1.9.3"
-  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
-  integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
-  dependencies:
-    color-name "1.1.3"
+    wrap-ansi "^7.0.0"
 
 color-convert@^2.0.1:
   version "2.0.1"
@@ -1188,61 +296,23 @@ color-convert@^2.0.1:
   dependencies:
     color-name "~1.1.4"
 
-color-name@1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
 color-name@~1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
   integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 
-combined-stream@^1.0.6, combined-stream@~1.0.6:
-  version "1.0.8"
-  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
-  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
-  dependencies:
-    delayed-stream "~1.0.0"
-
-component-emitter@^1.2.1:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
-  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
-
 concat-map@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
   integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
 
-convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+convert-source-map@^1.6.0:
   version "1.8.0"
   resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
   integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
   dependencies:
     safe-buffer "~5.1.1"
 
-copy-descriptor@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
-  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-
-core-util-is@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-cross-spawn@^6.0.0:
-  version "6.0.5"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
-  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
-  dependencies:
-    nice-try "^1.0.4"
-    path-key "^2.0.1"
-    semver "^5.5.0"
-    shebang-command "^1.2.0"
-    which "^1.2.9"
-
 cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
   version "7.0.3"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -1252,40 +322,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
     shebang-command "^2.0.0"
     which "^2.0.1"
 
-cssom@^0.4.1:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
-  integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
-
-cssom@~0.3.6:
-  version "0.3.8"
-  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
-  integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
-
-cssstyle@^2.0.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
-  integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
-  dependencies:
-    cssom "~0.3.6"
-
-dashdash@^1.12.0:
-  version "1.14.1"
-  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
-  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
-  dependencies:
-    assert-plus "^1.0.0"
-
-data-urls@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
-  integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
-  dependencies:
-    abab "^2.0.0"
-    whatwg-mimetype "^2.2.0"
-    whatwg-url "^7.0.0"
-
-debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
+debug@^2.6.9:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -1299,33 +336,18 @@ debug@^3.2.7:
   dependencies:
     ms "^2.1.1"
 
-debug@^4.1.0, debug@^4.1.1, debug@^4.3.2:
+debug@^4.1.1, debug@^4.3.2:
   version "4.3.2"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
   integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
   dependencies:
     ms "2.1.2"
 
-decamelize@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-
-decode-uri-component@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
-  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
-deep-is@^0.1.3, deep-is@~0.1.3:
+deep-is@^0.1.3:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
   integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
 
-deepmerge@^4.2.2:
-  version "4.2.2"
-  resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
-  integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
-
 define-properties@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -1333,42 +355,15 @@ define-properties@^1.1.3:
   dependencies:
     object-keys "^1.0.12"
 
-define-property@^0.2.5:
-  version "0.2.5"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
-  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
-  dependencies:
-    is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
-  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
-  dependencies:
-    is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
+dequal@^2.0.0:
   version "2.0.2"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
-  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
-  dependencies:
-    is-descriptor "^1.0.2"
-    isobject "^3.0.1"
-
-delayed-stream@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-detect-newline@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
-  integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+  resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d"
+  integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==
 
-diff-sequences@^25.2.6:
-  version "25.2.6"
-  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
-  integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
+diff@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
+  integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
 
 dir-glob@^3.0.1:
   version "3.0.1"
@@ -1391,22 +386,7 @@ doctrine@^3.0.0:
   dependencies:
     esutils "^2.0.2"
 
-domexception@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
-  integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
-  dependencies:
-    webidl-conversions "^4.0.2"
-
-ecc-jsbn@~0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
-  integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
-  dependencies:
-    jsbn "~0.1.0"
-    safer-buffer "^2.1.0"
-
-electron-to-chromium@^1.3.896, electron-to-chromium@^1.3.901:
+electron-to-chromium@^1.3.901:
   version "1.3.901"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.901.tgz#ce2c3157d61bce9f42f1e83225c17358ae9f4918"
   integrity sha512-ToJdV2vzwT2jeAsw8zIggTFllJ4Kxvwghk39AhJEHHlIxor10wsFI3wo69p8nFc0s/ATWBqugPv/k3nW4Y9Mww==
@@ -1416,13 +396,6 @@ emoji-regex@^8.0.0:
   resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
   integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
 
-end-of-stream@^1.1.0:
-  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"
-
 enquirer@^2.3.5:
   version "2.3.6"
   resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
@@ -1430,13 +403,6 @@ enquirer@^2.3.5:
   dependencies:
     ansi-colors "^4.1.1"
 
-error-ex@^1.3.1:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
-  integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
-  dependencies:
-    is-arrayish "^0.2.1"
-
 es-abstract@^1.19.0, es-abstract@^1.19.1:
   version "1.19.1"
   resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
@@ -1585,33 +551,11 @@ escalade@^3.1.1:
   resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
   integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
 
-escape-string-regexp@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-escape-string-regexp@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
-  integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
-
 escape-string-regexp@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
   integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
 
-escodegen@^1.11.1:
-  version "1.14.3"
-  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
-  integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
-  dependencies:
-    esprima "^4.0.1"
-    estraverse "^4.2.0"
-    esutils "^2.0.2"
-    optionator "^0.8.1"
-  optionalDependencies:
-    source-map "~0.6.1"
-
 eslint-config-standard@^16.0.3:
   version "16.0.3"
   resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"
@@ -1780,11 +724,6 @@ espree@^9.0.0:
     acorn-jsx "^5.3.1"
     eslint-visitor-keys "^3.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==
-
 esquery@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
@@ -1799,11 +738,6 @@ esrecurse@^4.3.0:
   dependencies:
     estraverse "^5.2.0"
 
-estraverse@^4.2.0:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
-  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-
 estraverse@^5.1.0, estraverse@^5.2.0:
   version "5.3.0"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
@@ -1814,118 +748,10 @@ esutils@^2.0.2:
   resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
   integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
 
-exec-sh@^0.3.2:
-  version "0.3.6"
-  resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc"
-  integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==
-
-execa@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
-  integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
-  dependencies:
-    cross-spawn "^6.0.0"
-    get-stream "^4.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
-execa@^3.2.0:
-  version "3.4.0"
-  resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
-  integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==
-  dependencies:
-    cross-spawn "^7.0.0"
-    get-stream "^5.0.0"
-    human-signals "^1.1.1"
-    is-stream "^2.0.0"
-    merge-stream "^2.0.0"
-    npm-run-path "^4.0.0"
-    onetime "^5.1.0"
-    p-finally "^2.0.0"
-    signal-exit "^3.0.2"
-    strip-final-newline "^2.0.0"
-
-exit@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
-  integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
-
-expand-brackets@^2.1.4:
-  version "2.1.4"
-  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
-  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
-  dependencies:
-    debug "^2.3.3"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    posix-character-classes "^0.1.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-expect@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba"
-  integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    ansi-styles "^4.0.0"
-    jest-get-type "^25.2.6"
-    jest-matcher-utils "^25.5.0"
-    jest-message-util "^25.5.0"
-    jest-regex-util "^25.2.6"
-
-extend-shallow@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
-  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
-  dependencies:
-    is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
-  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
-  dependencies:
-    assign-symbols "^1.0.0"
-    is-extendable "^1.0.1"
-
-extend@~3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
-  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-extglob@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
-  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
-  dependencies:
-    array-unique "^0.3.2"
-    define-property "^1.0.0"
-    expand-brackets "^2.1.4"
-    extend-shallow "^2.0.1"
-    fragment-cache "^0.2.1"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-extsprintf@1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
-
-extsprintf@^1.2.0:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
-  integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
-
-fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
-  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
 
 fast-glob@^3.1.1, fast-glob@^3.2.7:
   version "3.2.7"
@@ -1943,7 +769,7 @@ fast-json-stable-stringify@^2.0.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.6, fast-levenshtein@~2.0.6:
+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=
@@ -1955,13 +781,6 @@ fastq@^1.6.0:
   dependencies:
     reusify "^1.0.4"
 
-fb-watchman@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
-  integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
-  dependencies:
-    bser "2.1.1"
-
 file-entry-cache@^6.0.1:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@@ -1969,16 +788,6 @@ file-entry-cache@^6.0.1:
   dependencies:
     flat-cache "^3.0.4"
 
-fill-range@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
-  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-    to-regex-range "^2.1.0"
-
 fill-range@^7.0.1:
   version "7.0.1"
   resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@@ -1993,12 +802,12 @@ find-up@^2.1.0:
   dependencies:
     locate-path "^2.0.0"
 
-find-up@^4.0.0, find-up@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
-  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+find-up@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+  integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
   dependencies:
-    locate-path "^5.0.0"
+    locate-path "^6.0.0"
     path-exists "^4.0.0"
 
 flat-cache@^3.0.4:
@@ -2014,31 +823,13 @@ flatted@^3.1.0:
   resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2"
   integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==
 
-for-in@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-
-forever-agent@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-  integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
-
-form-data@~2.3.2:
-  version "2.3.3"
-  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
-  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
-  dependencies:
-    asynckit "^0.4.0"
-    combined-stream "^1.0.6"
-    mime-types "^2.1.12"
-
-fragment-cache@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
-  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+foreground-child@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53"
+  integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==
   dependencies:
-    map-cache "^0.2.2"
+    cross-spawn "^7.0.0"
+    signal-exit "^3.0.2"
 
 fs-extra@^10.0.0:
   version "10.0.0"
@@ -2063,7 +854,7 @@ fs.realpath@^1.0.0:
   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
   integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
 
-fsevents@^2.1.2, fsevents@~2.3.2:
+fsevents@~2.3.2:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
   integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
@@ -2078,12 +869,7 @@ functional-red-black-tree@^1.0.1:
   resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
   integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
 
-gensync@^1.0.0-beta.2:
-  version "1.0.0-beta.2"
-  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
-  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-
-get-caller-file@^2.0.1:
+get-caller-file@^2.0.5:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
   integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
@@ -2097,25 +883,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
     has "^1.0.3"
     has-symbols "^1.0.1"
 
-get-package-type@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
-  integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
-
-get-stream@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
-  integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
-  dependencies:
-    pump "^3.0.0"
-
-get-stream@^5.0.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
-  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
-  dependencies:
-    pump "^3.0.0"
-
 get-symbol-description@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
@@ -2124,18 +891,6 @@ get-symbol-description@^1.0.0:
     call-bind "^1.0.2"
     get-intrinsic "^1.1.1"
 
-get-value@^2.0.3, get-value@^2.0.6:
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
-
-getpass@^0.1.1:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
-  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
-  dependencies:
-    assert-plus "^1.0.0"
-
 glob-parent@^5.1.2, glob-parent@~5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -2150,7 +905,7 @@ glob-parent@^6.0.1:
   dependencies:
     is-glob "^4.0.3"
 
-glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+glob@^7.1.3, glob@^7.1.4:
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
   integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
@@ -2162,11 +917,6 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-globals@^11.1.0:
-  version "11.12.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
-  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
 globals@^13.6.0, globals@^13.9.0:
   version "13.12.0"
   resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e"
@@ -2186,39 +936,16 @@ globby@^11.0.4:
     merge2 "^1.3.0"
     slash "^3.0.0"
 
-graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
+graceful-fs@^4.1.6, graceful-fs@^4.2.0:
   version "4.2.8"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
   integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
 
-growly@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
-  integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
-
-har-schema@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-  integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-
-har-validator@~5.1.3:
-  version "5.1.5"
-  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
-  integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
-  dependencies:
-    ajv "^6.12.3"
-    har-schema "^2.0.0"
-
 has-bigints@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
   integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
 
-has-flag@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-  integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
 has-flag@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
@@ -2236,37 +963,6 @@ has-tostringtag@^1.0.0:
   dependencies:
     has-symbols "^1.0.2"
 
-has-value@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
-  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
-  dependencies:
-    get-value "^2.0.3"
-    has-values "^0.1.4"
-    isobject "^2.0.0"
-
-has-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
-  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
-  dependencies:
-    get-value "^2.0.6"
-    has-values "^1.0.0"
-    isobject "^3.0.0"
-
-has-values@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
-  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
-
-has-values@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
-  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
-  dependencies:
-    is-number "^3.0.0"
-    kind-of "^4.0.0"
-
 has@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
@@ -2274,11 +970,6 @@ has@^1.0.3:
   dependencies:
     function-bind "^1.1.1"
 
-hosted-git-info@^2.1.4:
-  version "2.8.9"
-  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
-  integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
-
 hosted-git-info@^4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961"
@@ -2286,39 +977,11 @@ hosted-git-info@^4.0.2:
   dependencies:
     lru-cache "^6.0.0"
 
-html-encoding-sniffer@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
-  integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
-  dependencies:
-    whatwg-encoding "^1.0.1"
-
 html-escaper@^2.0.0:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
   integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
 
-http-signature@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
-  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
-  dependencies:
-    assert-plus "^1.0.0"
-    jsprim "^1.2.2"
-    sshpk "^1.7.0"
-
-human-signals@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
-  integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
-
-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==
-  dependencies:
-    safer-buffer ">= 2.1.2 < 3"
-
 ignore@^4.0.6:
   version "4.0.6"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -2337,14 +1000,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1:
     parent-module "^1.0.0"
     resolve-from "^4.0.0"
 
-import-local@^3.0.2:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0"
-  integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==
-  dependencies:
-    pkg-dir "^4.2.0"
-    resolve-cwd "^3.0.0"
-
 imurmurhash@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -2372,30 +1027,6 @@ internal-slot@^1.0.3:
     has "^1.0.3"
     side-channel "^1.0.4"
 
-ip-regex@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
-  integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
-
-is-accessor-descriptor@^0.1.6:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
-  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
-  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
-  dependencies:
-    kind-of "^6.0.0"
-
-is-arrayish@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
-
 is-bigint@^1.0.1:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
@@ -2418,23 +1049,11 @@ is-boolean-object@^1.1.0:
     call-bind "^1.0.2"
     has-tostringtag "^1.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"
-  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
 is-callable@^1.1.4, is-callable@^1.2.4:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
   integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
 
-is-ci@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
-  integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
-  dependencies:
-    ci-info "^2.0.0"
-
 is-core-module@^2.2.0, is-core-module@^2.8.0:
   version "2.8.0"
   resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548"
@@ -2442,20 +1061,6 @@ is-core-module@^2.2.0, is-core-module@^2.8.0:
   dependencies:
     has "^1.0.3"
 
-is-data-descriptor@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
-  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
-  dependencies:
-    kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
-  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
-  dependencies:
-    kind-of "^6.0.0"
-
 is-date-object@^1.0.1:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
@@ -2463,41 +1068,6 @@ is-date-object@^1.0.1:
   dependencies:
     has-tostringtag "^1.0.0"
 
-is-descriptor@^0.1.0:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
-  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
-  dependencies:
-    is-accessor-descriptor "^0.1.6"
-    is-data-descriptor "^0.1.4"
-    kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
-  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
-  dependencies:
-    is-accessor-descriptor "^1.0.0"
-    is-data-descriptor "^1.0.0"
-    kind-of "^6.0.2"
-
-is-docker@^2.0.0:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
-  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-
-is-extendable@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
-  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
-  dependencies:
-    is-plain-object "^2.0.4"
-
 is-extglob@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -2508,11 +1078,6 @@ is-fullwidth-code-point@^3.0.0:
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
   integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 
-is-generator-fn@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
-  integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
-
 is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@@ -2532,25 +1097,11 @@ is-number-object@^1.0.4:
   dependencies:
     has-tostringtag "^1.0.0"
 
-is-number@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
-  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
-  dependencies:
-    kind-of "^3.0.2"
-
 is-number@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
   integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
 
-is-plain-object@^2.0.3, is-plain-object@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
-  integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
-  dependencies:
-    isobject "^3.0.1"
-
 is-regex@^1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -2564,16 +1115,6 @@ is-shared-array-buffer@^1.0.1:
   resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
   integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
 
-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-stream@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
-  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-
 is-string@^1.0.5, is-string@^1.0.7:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
@@ -2588,11 +1129,6 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
   dependencies:
     has-symbols "^1.0.2"
 
-is-typedarray@^1.0.0, is-typedarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-
 is-weakref@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2"
@@ -2600,71 +1136,16 @@ is-weakref@^1.0.1:
   dependencies:
     call-bind "^1.0.0"
 
-is-windows@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
-  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-is-wsl@^2.1.1:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
-  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
-  dependencies:
-    is-docker "^2.0.0"
-
-isarray@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
 isexe@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
   integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
 
-isobject@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
-  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
-  dependencies:
-    isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
-  integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-
-isstream@~0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-  integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-
-istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.1:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
   integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
 
-istanbul-lib-instrument@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
-  integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
-  dependencies:
-    "@babel/core" "^7.7.5"
-    "@istanbuljs/schema" "^0.1.2"
-    istanbul-lib-coverage "^3.0.0"
-    semver "^6.3.0"
-
-istanbul-lib-instrument@^5.0.4:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a"
-  integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==
-  dependencies:
-    "@babel/core" "^7.12.3"
-    "@babel/parser" "^7.14.7"
-    "@istanbuljs/schema" "^0.1.2"
-    istanbul-lib-coverage "^3.2.0"
-    semver "^6.3.0"
-
 istanbul-lib-report@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
@@ -2674,15 +1155,6 @@ istanbul-lib-report@^3.0.0:
     make-dir "^3.0.0"
     supports-color "^7.1.0"
 
-istanbul-lib-source-maps@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551"
-  integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==
-  dependencies:
-    debug "^4.1.1"
-    istanbul-lib-coverage "^3.0.0"
-    source-map "^0.6.1"
-
 istanbul-reports@^3.0.2:
   version "3.0.5"
   resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384"
@@ -2691,383 +1163,6 @@ istanbul-reports@^3.0.2:
     html-escaper "^2.0.0"
     istanbul-lib-report "^3.0.0"
 
-jest-changed-files@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c"
-  integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    execa "^3.2.0"
-    throat "^5.0.0"
-
-jest-cli@^25.5.4:
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d"
-  integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==
-  dependencies:
-    "@jest/core" "^25.5.4"
-    "@jest/test-result" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    chalk "^3.0.0"
-    exit "^0.1.2"
-    graceful-fs "^4.2.4"
-    import-local "^3.0.2"
-    is-ci "^2.0.0"
-    jest-config "^25.5.4"
-    jest-util "^25.5.0"
-    jest-validate "^25.5.0"
-    prompts "^2.0.1"
-    realpath-native "^2.0.0"
-    yargs "^15.3.1"
-
-jest-config@^25.5.4:
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c"
-  integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==
-  dependencies:
-    "@babel/core" "^7.1.0"
-    "@jest/test-sequencer" "^25.5.4"
-    "@jest/types" "^25.5.0"
-    babel-jest "^25.5.1"
-    chalk "^3.0.0"
-    deepmerge "^4.2.2"
-    glob "^7.1.1"
-    graceful-fs "^4.2.4"
-    jest-environment-jsdom "^25.5.0"
-    jest-environment-node "^25.5.0"
-    jest-get-type "^25.2.6"
-    jest-jasmine2 "^25.5.4"
-    jest-regex-util "^25.2.6"
-    jest-resolve "^25.5.1"
-    jest-util "^25.5.0"
-    jest-validate "^25.5.0"
-    micromatch "^4.0.2"
-    pretty-format "^25.5.0"
-    realpath-native "^2.0.0"
-
-jest-diff@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
-  integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
-  dependencies:
-    chalk "^3.0.0"
-    diff-sequences "^25.2.6"
-    jest-get-type "^25.2.6"
-    pretty-format "^25.5.0"
-
-jest-docblock@^25.3.0:
-  version "25.3.0"
-  resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef"
-  integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==
-  dependencies:
-    detect-newline "^3.0.0"
-
-jest-each@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516"
-  integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    chalk "^3.0.0"
-    jest-get-type "^25.2.6"
-    jest-util "^25.5.0"
-    pretty-format "^25.5.0"
-
-jest-environment-jsdom@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834"
-  integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==
-  dependencies:
-    "@jest/environment" "^25.5.0"
-    "@jest/fake-timers" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    jest-mock "^25.5.0"
-    jest-util "^25.5.0"
-    jsdom "^15.2.1"
-
-jest-environment-node@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1"
-  integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==
-  dependencies:
-    "@jest/environment" "^25.5.0"
-    "@jest/fake-timers" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    jest-mock "^25.5.0"
-    jest-util "^25.5.0"
-    semver "^6.3.0"
-
-jest-get-type@^25.2.6:
-  version "25.2.6"
-  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
-  integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
-
-jest-haste-map@^25.5.1:
-  version "25.5.1"
-  resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943"
-  integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    "@types/graceful-fs" "^4.1.2"
-    anymatch "^3.0.3"
-    fb-watchman "^2.0.0"
-    graceful-fs "^4.2.4"
-    jest-serializer "^25.5.0"
-    jest-util "^25.5.0"
-    jest-worker "^25.5.0"
-    micromatch "^4.0.2"
-    sane "^4.0.3"
-    walker "^1.0.7"
-    which "^2.0.2"
-  optionalDependencies:
-    fsevents "^2.1.2"
-
-jest-jasmine2@^25.5.4:
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968"
-  integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==
-  dependencies:
-    "@babel/traverse" "^7.1.0"
-    "@jest/environment" "^25.5.0"
-    "@jest/source-map" "^25.5.0"
-    "@jest/test-result" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    chalk "^3.0.0"
-    co "^4.6.0"
-    expect "^25.5.0"
-    is-generator-fn "^2.0.0"
-    jest-each "^25.5.0"
-    jest-matcher-utils "^25.5.0"
-    jest-message-util "^25.5.0"
-    jest-runtime "^25.5.4"
-    jest-snapshot "^25.5.1"
-    jest-util "^25.5.0"
-    pretty-format "^25.5.0"
-    throat "^5.0.0"
-
-jest-leak-detector@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb"
-  integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==
-  dependencies:
-    jest-get-type "^25.2.6"
-    pretty-format "^25.5.0"
-
-jest-matcher-utils@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867"
-  integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==
-  dependencies:
-    chalk "^3.0.0"
-    jest-diff "^25.5.0"
-    jest-get-type "^25.2.6"
-    pretty-format "^25.5.0"
-
-jest-message-util@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea"
-  integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@jest/types" "^25.5.0"
-    "@types/stack-utils" "^1.0.1"
-    chalk "^3.0.0"
-    graceful-fs "^4.2.4"
-    micromatch "^4.0.2"
-    slash "^3.0.0"
-    stack-utils "^1.0.1"
-
-jest-mock@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a"
-  integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==
-  dependencies:
-    "@jest/types" "^25.5.0"
-
-jest-pnp-resolver@^1.2.1:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
-  integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
-
-jest-regex-util@^25.2.6:
-  version "25.2.6"
-  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964"
-  integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==
-
-jest-resolve-dependencies@^25.5.4:
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7"
-  integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    jest-regex-util "^25.2.6"
-    jest-snapshot "^25.5.1"
-
-jest-resolve@^25.5.1:
-  version "25.5.1"
-  resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829"
-  integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    browser-resolve "^1.11.3"
-    chalk "^3.0.0"
-    graceful-fs "^4.2.4"
-    jest-pnp-resolver "^1.2.1"
-    read-pkg-up "^7.0.1"
-    realpath-native "^2.0.0"
-    resolve "^1.17.0"
-    slash "^3.0.0"
-
-jest-runner@^25.5.4:
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d"
-  integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==
-  dependencies:
-    "@jest/console" "^25.5.0"
-    "@jest/environment" "^25.5.0"
-    "@jest/test-result" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    chalk "^3.0.0"
-    exit "^0.1.2"
-    graceful-fs "^4.2.4"
-    jest-config "^25.5.4"
-    jest-docblock "^25.3.0"
-    jest-haste-map "^25.5.1"
-    jest-jasmine2 "^25.5.4"
-    jest-leak-detector "^25.5.0"
-    jest-message-util "^25.5.0"
-    jest-resolve "^25.5.1"
-    jest-runtime "^25.5.4"
-    jest-util "^25.5.0"
-    jest-worker "^25.5.0"
-    source-map-support "^0.5.6"
-    throat "^5.0.0"
-
-jest-runtime@^25.5.4:
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab"
-  integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==
-  dependencies:
-    "@jest/console" "^25.5.0"
-    "@jest/environment" "^25.5.0"
-    "@jest/globals" "^25.5.2"
-    "@jest/source-map" "^25.5.0"
-    "@jest/test-result" "^25.5.0"
-    "@jest/transform" "^25.5.1"
-    "@jest/types" "^25.5.0"
-    "@types/yargs" "^15.0.0"
-    chalk "^3.0.0"
-    collect-v8-coverage "^1.0.0"
-    exit "^0.1.2"
-    glob "^7.1.3"
-    graceful-fs "^4.2.4"
-    jest-config "^25.5.4"
-    jest-haste-map "^25.5.1"
-    jest-message-util "^25.5.0"
-    jest-mock "^25.5.0"
-    jest-regex-util "^25.2.6"
-    jest-resolve "^25.5.1"
-    jest-snapshot "^25.5.1"
-    jest-util "^25.5.0"
-    jest-validate "^25.5.0"
-    realpath-native "^2.0.0"
-    slash "^3.0.0"
-    strip-bom "^4.0.0"
-    yargs "^15.3.1"
-
-jest-serializer@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b"
-  integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==
-  dependencies:
-    graceful-fs "^4.2.4"
-
-jest-snapshot@^25.5.1:
-  version "25.5.1"
-  resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f"
-  integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==
-  dependencies:
-    "@babel/types" "^7.0.0"
-    "@jest/types" "^25.5.0"
-    "@types/prettier" "^1.19.0"
-    chalk "^3.0.0"
-    expect "^25.5.0"
-    graceful-fs "^4.2.4"
-    jest-diff "^25.5.0"
-    jest-get-type "^25.2.6"
-    jest-matcher-utils "^25.5.0"
-    jest-message-util "^25.5.0"
-    jest-resolve "^25.5.1"
-    make-dir "^3.0.0"
-    natural-compare "^1.4.0"
-    pretty-format "^25.5.0"
-    semver "^6.3.0"
-
-jest-util@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0"
-  integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    chalk "^3.0.0"
-    graceful-fs "^4.2.4"
-    is-ci "^2.0.0"
-    make-dir "^3.0.0"
-
-jest-validate@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a"
-  integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    camelcase "^5.3.1"
-    chalk "^3.0.0"
-    jest-get-type "^25.2.6"
-    leven "^3.1.0"
-    pretty-format "^25.5.0"
-
-jest-watcher@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456"
-  integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==
-  dependencies:
-    "@jest/test-result" "^25.5.0"
-    "@jest/types" "^25.5.0"
-    ansi-escapes "^4.2.1"
-    chalk "^3.0.0"
-    jest-util "^25.5.0"
-    string-length "^3.1.0"
-
-jest-worker@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1"
-  integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==
-  dependencies:
-    merge-stream "^2.0.0"
-    supports-color "^7.0.0"
-
-jest@^25.5.4:
-  version "25.5.4"
-  resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db"
-  integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==
-  dependencies:
-    "@jest/core" "^25.5.4"
-    import-local "^3.0.2"
-    jest-cli "^25.5.4"
-
-js-tokens@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
-  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-js-yaml@^3.13.1:
-  version "3.14.1"
-  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
-  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
-  dependencies:
-    argparse "^1.0.7"
-    esprima "^4.0.0"
-
 js-yaml@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
@@ -3075,73 +1170,16 @@ js-yaml@^4.1.0:
   dependencies:
     argparse "^2.0.1"
 
-jsbn@~0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-
-jsdom@^15.2.1:
-  version "15.2.1"
-  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5"
-  integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==
-  dependencies:
-    abab "^2.0.0"
-    acorn "^7.1.0"
-    acorn-globals "^4.3.2"
-    array-equal "^1.0.0"
-    cssom "^0.4.1"
-    cssstyle "^2.0.0"
-    data-urls "^1.1.0"
-    domexception "^1.0.1"
-    escodegen "^1.11.1"
-    html-encoding-sniffer "^1.0.2"
-    nwsapi "^2.2.0"
-    parse5 "5.1.0"
-    pn "^1.1.0"
-    request "^2.88.0"
-    request-promise-native "^1.0.7"
-    saxes "^3.1.9"
-    symbol-tree "^3.2.2"
-    tough-cookie "^3.0.1"
-    w3c-hr-time "^1.0.1"
-    w3c-xmlserializer "^1.1.2"
-    webidl-conversions "^4.0.2"
-    whatwg-encoding "^1.0.5"
-    whatwg-mimetype "^2.3.0"
-    whatwg-url "^7.0.0"
-    ws "^7.0.0"
-    xml-name-validator "^3.0.0"
-
-jsesc@^2.5.1:
-  version "2.5.2"
-  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
-  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-
-json-parse-even-better-errors@^2.3.0:
-  version "2.3.1"
-  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
-  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
-
 json-schema-traverse@^0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
   integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
 
-json-schema@0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-
 json-stable-stringify-without-jsonify@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
   integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
 
-json-stringify-safe@~5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
 json5@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -3149,13 +1187,6 @@ json5@^1.0.1:
   dependencies:
     minimist "^1.2.0"
 
-json5@^2.1.2:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
-  integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
-  dependencies:
-    minimist "^1.2.5"
-
 jsonfile@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
@@ -3172,49 +1203,10 @@ jsonfile@^6.0.1:
   optionalDependencies:
     graceful-fs "^4.1.6"
 
-jsprim@^1.2.2:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
-  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
-  dependencies:
-    assert-plus "1.0.0"
-    extsprintf "1.3.0"
-    json-schema "0.2.3"
-    verror "1.10.0"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
-  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
-  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2:
-  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==
-
-kleur@^3.0.3:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
-  integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-
-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==
+kleur@^4.0.3:
+  version "4.1.4"
+  resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d"
+  integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==
 
 levn@^0.4.1:
   version "0.4.1"
@@ -3224,24 +1216,11 @@ levn@^0.4.1:
     prelude-ls "^1.2.1"
     type-check "~0.4.0"
 
-levn@~0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
-  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
-  dependencies:
-    prelude-ls "~1.1.2"
-    type-check "~0.3.2"
-
 lilconfig@^2.0.3:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082"
   integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==
 
-lines-and-columns@^1.1.6:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
-  integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
-
 locate-path@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -3250,35 +1229,18 @@ locate-path@^2.0.0:
     p-locate "^2.0.0"
     path-exists "^3.0.0"
 
-locate-path@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
-  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+locate-path@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+  integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
   dependencies:
-    p-locate "^4.1.0"
+    p-locate "^5.0.0"
 
 lodash.merge@^4.6.2:
   version "4.6.2"
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
   integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
 
-lodash.sortby@^4.7.0:
-  version "4.7.0"
-  resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
-  integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-
-lodash@^4.17.19:
-  version "4.17.21"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
-  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-lolex@^5.0.0:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367"
-  integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==
-  dependencies:
-    "@sinonjs/commons" "^1.7.0"
-
 lru-cache@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -3293,55 +1255,12 @@ make-dir@^3.0.0:
   dependencies:
     semver "^6.0.0"
 
-makeerror@1.0.12:
-  version "1.0.12"
-  resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
-  integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==
-  dependencies:
-    tmpl "1.0.5"
-
-map-cache@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
-
-map-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
-  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
-  dependencies:
-    object-visit "^1.0.0"
-
-merge-stream@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
-  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
 merge2@^1.3.0:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
   integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
 
-micromatch@^3.1.4:
-  version "3.1.10"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
-  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    braces "^2.3.1"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    extglob "^2.0.4"
-    fragment-cache "^0.2.1"
-    kind-of "^6.0.2"
-    nanomatch "^1.2.9"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.2"
-
-micromatch@^4.0.2, micromatch@^4.0.4:
+micromatch@^4.0.4:
   version "4.0.4"
   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
   integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
@@ -3349,23 +1268,6 @@ micromatch@^4.0.2, micromatch@^4.0.4:
     braces "^3.0.1"
     picomatch "^2.2.3"
 
-mime-db@1.51.0:
-  version "1.51.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
-  integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
-
-mime-types@^2.1.12, mime-types@~2.1.19:
-  version "2.1.34"
-  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
-  integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
-  dependencies:
-    mime-db "1.51.0"
-
-mimic-fn@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
-  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
 minimatch@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -3373,24 +1275,21 @@ minimatch@^3.0.4:
   dependencies:
     brace-expansion "^1.1.7"
 
-minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
+minimist@^1.2.0:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
   integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
 
-mixin-deep@^1.2.0:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
-  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
-  dependencies:
-    for-in "^1.0.2"
-    is-extendable "^1.0.1"
-
 mkdirp@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
   integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
 
+mri@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
+  integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
+
 ms@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -3411,23 +1310,6 @@ nanoid@^3.1.30:
   resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362"
   integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==
 
-nanomatch@^1.2.9:
-  version "1.2.13"
-  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
-  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    fragment-cache "^0.2.1"
-    is-windows "^1.0.2"
-    kind-of "^6.0.2"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
 nanospinner@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/nanospinner/-/nanospinner-0.4.0.tgz#f544f71fb990423528b8f6dd6c26134cf9f21659"
@@ -3440,92 +1322,16 @@ natural-compare@^1.4.0:
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
   integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
 
-nice-try@^1.0.4:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
-  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-node-int64@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
-  integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
-
-node-modules-regexp@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
-  integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
-
-node-notifier@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12"
-  integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==
-  dependencies:
-    growly "^1.3.0"
-    is-wsl "^2.1.1"
-    semver "^6.3.0"
-    shellwords "^0.1.1"
-    which "^1.3.1"
-
 node-releases@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5"
   integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==
 
-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"
-  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
-  dependencies:
-    hosted-git-info "^2.1.4"
-    resolve "^1.10.0"
-    semver "2 || 3 || 4 || 5"
-    validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
-  integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
-  dependencies:
-    remove-trailing-separator "^1.0.1"
-
 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==
 
-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"
-  integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
-  dependencies:
-    path-key "^2.0.0"
-
-npm-run-path@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
-  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
-  dependencies:
-    path-key "^3.0.0"
-
-nwsapi@^2.2.0:
-  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"
-  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
-  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-
-object-copy@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
-  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
-  dependencies:
-    copy-descriptor "^0.1.0"
-    define-property "^0.2.5"
-    kind-of "^3.0.3"
-
 object-inspect@^1.11.0, object-inspect@^1.9.0:
   version "1.11.0"
   resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
@@ -3536,13 +1342,6 @@ object-keys@^1.0.12, object-keys@^1.1.1:
   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
   integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
 
-object-visit@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
-  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
-  dependencies:
-    isobject "^3.0.0"
-
 object.assign@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
@@ -3553,13 +1352,6 @@ object.assign@^4.1.2:
     has-symbols "^1.0.1"
     object-keys "^1.1.1"
 
-object.pick@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
-  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
-  dependencies:
-    isobject "^3.0.1"
-
 object.values@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
@@ -3569,32 +1361,13 @@ object.values@^1.1.5:
     define-properties "^1.1.3"
     es-abstract "^1.19.1"
 
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
+once@^1.3.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
   integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
   dependencies:
     wrappy "1"
 
-onetime@^5.1.0:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
-  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
-  dependencies:
-    mimic-fn "^2.1.0"
-
-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.9.1:
   version "0.9.1"
   resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
@@ -3607,21 +1380,6 @@ optionator@^0.9.1:
     type-check "^0.4.0"
     word-wrap "^1.2.3"
 
-p-each-series@^2.1.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"
-  integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==
-
-p-finally@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-  integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-
-p-finally@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
-  integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
-
 p-limit@^1.1.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
@@ -3629,12 +1387,12 @@ p-limit@^1.1.0:
   dependencies:
     p-try "^1.0.0"
 
-p-limit@^2.2.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
-  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
   dependencies:
-    p-try "^2.0.0"
+    yocto-queue "^0.1.0"
 
 p-locate@^2.0.0:
   version "2.0.0"
@@ -3643,23 +1401,18 @@ p-locate@^2.0.0:
   dependencies:
     p-limit "^1.1.0"
 
-p-locate@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
-  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+p-locate@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+  integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
   dependencies:
-    p-limit "^2.2.0"
+    p-limit "^3.0.2"
 
 p-try@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
   integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
 
-p-try@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
-  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
 parent-module@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -3667,26 +1420,6 @@ parent-module@^1.0.0:
   dependencies:
     callsites "^3.0.0"
 
-parse-json@^5.0.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
-  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    error-ex "^1.3.1"
-    json-parse-even-better-errors "^2.3.0"
-    lines-and-columns "^1.1.6"
-
-parse5@5.1.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
-  integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
-
-pascalcase@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
-  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-
 path-exists@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@@ -3702,12 +1435,7 @@ path-is-absolute@^1.0.0:
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
   integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
 
-path-key@^2.0.0, path-key@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-
-path-key@^3.0.0, path-key@^3.1.0:
+path-key@^3.1.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
   integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
@@ -3722,11 +1450,6 @@ path-type@^4.0.0:
   resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
   integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
 
-performance-now@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-
 picocolors@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
@@ -3737,13 +1460,6 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
   integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
 
-pirates@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
-  integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
-  dependencies:
-    node-modules-regexp "^1.0.0"
-
 pkg-dir@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
@@ -3751,108 +1467,26 @@ pkg-dir@^2.0.0:
   dependencies:
     find-up "^2.1.0"
 
-pkg-dir@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
-  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
-  dependencies:
-    find-up "^4.0.0"
-
-pn@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
-  integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
-
-posix-character-classes@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
-  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
-
 prelude-ls@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
   integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
 
-prelude-ls@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
-
-pretty-format@^25.5.0:
-  version "25.5.0"
-  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
-  integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
-  dependencies:
-    "@jest/types" "^25.5.0"
-    ansi-regex "^5.0.0"
-    ansi-styles "^4.0.0"
-    react-is "^16.12.0"
-
 progress@^2.0.0:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
   integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
 
-prompts@^2.0.1:
-  version "2.4.2"
-  resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
-  integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
-  dependencies:
-    kleur "^3.0.3"
-    sisteransi "^1.0.5"
-
-psl@^1.1.28:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
-  integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
-
-pump@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
-  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
-  dependencies:
-    end-of-stream "^1.1.0"
-    once "^1.3.1"
-
-punycode@^2.1.0, punycode@^2.1.1:
+punycode@^2.1.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
   integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
 
-qs@~6.5.2:
-  version "6.5.2"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
-  integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
 queue-microtask@^1.2.2:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
   integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
 
-react-is@^16.12.0:
-  version "16.13.1"
-  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
-  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-read-pkg-up@^7.0.1:
-  version "7.0.1"
-  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
-  integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
-  dependencies:
-    find-up "^4.1.0"
-    read-pkg "^5.2.0"
-    type-fest "^0.8.1"
-
-read-pkg@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
-  integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
-  dependencies:
-    "@types/normalize-package-data" "^2.4.0"
-    normalize-package-data "^2.5.0"
-    parse-json "^5.0.0"
-    type-fest "^0.6.0"
-
 readdirp@~3.6.0:
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
@@ -3860,124 +1494,27 @@ readdirp@~3.6.0:
   dependencies:
     picomatch "^2.2.1"
 
-realpath-native@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
-  integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==
-
-regex-not@^1.0.0, regex-not@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
-  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
-  dependencies:
-    extend-shallow "^3.0.2"
-    safe-regex "^1.1.0"
-
 regexpp@^3.0.0, regexpp@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
   integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
 
-remove-trailing-separator@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
-  integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-
-repeat-element@^1.1.2:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
-  integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
-
-repeat-string@^1.6.1:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-
-request-promise-core@1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
-  integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
-  dependencies:
-    lodash "^4.17.19"
-
-request-promise-native@^1.0.7:
-  version "1.0.9"
-  resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
-  integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
-  dependencies:
-    request-promise-core "1.1.4"
-    stealthy-require "^1.1.1"
-    tough-cookie "^2.3.3"
-
-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"
   integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
 
-require-main-filename@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
-  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
 requireindex@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef"
   integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==
 
-resolve-cwd@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
-  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
-  dependencies:
-    resolve-from "^5.0.0"
-
 resolve-from@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
   integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
 
-resolve-from@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
-  integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
-
-resolve-url@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-
-resolve@1.1.7:
-  version "1.1.7"
-  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-  integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
-
-resolve@^1.10.0, resolve@^1.10.1, resolve@^1.17.0, resolve@^1.20.0:
+resolve@^1.10.1, resolve@^1.20.0:
   version "1.20.0"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
   integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
@@ -3985,11 +1522,6 @@ resolve@^1.10.0, resolve@^1.10.1, resolve@^1.17.0, resolve@^1.20.0:
     is-core-module "^2.2.0"
     path-parse "^1.0.6"
 
-ret@~0.1.10:
-  version "0.1.15"
-  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
-  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
 reusify@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -4002,11 +1534,6 @@ rimraf@^3.0.0, rimraf@^3.0.2:
   dependencies:
     glob "^7.1.3"
 
-rsvp@^4.8.4:
-  version "4.8.5"
-  resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
-  integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
-
 run-parallel@^1.1.9:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -4014,55 +1541,18 @@ run-parallel@^1.1.9:
   dependencies:
     queue-microtask "^1.2.2"
 
-safe-buffer@^5.0.1, safe-buffer@^5.1.2:
-  version "5.2.1"
-  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
-  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+sade@^1.7.3:
+  version "1.7.4"
+  resolved "https://registry.yarnpkg.com/sade/-/sade-1.7.4.tgz#ea681e0c65d248d2095c90578c03ca0bb1b54691"
+  integrity sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==
+  dependencies:
+    mri "^1.1.0"
 
 safe-buffer@~5.1.1:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
-safe-regex@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
-  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
-  dependencies:
-    ret "~0.1.10"
-
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sane@^4.0.3:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
-  integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
-  dependencies:
-    "@cnakazawa/watch" "^1.0.3"
-    anymatch "^2.0.0"
-    capture-exit "^2.0.0"
-    exec-sh "^0.3.2"
-    execa "^1.0.0"
-    fb-watchman "^2.0.0"
-    micromatch "^3.1.4"
-    minimist "^1.1.1"
-    walker "~1.0.5"
-
-saxes@^3.1.9:
-  version "3.1.11"
-  resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b"
-  integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==
-  dependencies:
-    xmlchars "^2.1.1"
-
-"semver@2 || 3 || 4 || 5", semver@^5.5.0:
-  version "5.7.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
-  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
 semver@7.3.5, semver@^7.2.1:
   version "7.3.5"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
@@ -4070,33 +1560,11 @@ semver@7.3.5, semver@^7.2.1:
   dependencies:
     lru-cache "^6.0.0"
 
-semver@^6.0.0, semver@^6.1.0, semver@^6.3.0:
+semver@^6.0.0, semver@^6.1.0:
   version "6.3.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 
-set-blocking@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-
-set-value@^2.0.0, set-value@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
-  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.3"
-    split-string "^3.0.1"
-
-shebang-command@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
-  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
-  dependencies:
-    shebang-regex "^1.0.0"
-
 shebang-command@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -4104,21 +1572,11 @@ shebang-command@^2.0.0:
   dependencies:
     shebang-regex "^3.0.0"
 
-shebang-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
-
 shebang-regex@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
   integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
 
-shellwords@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
-  integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
-
 side-channel@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
@@ -4128,16 +1586,11 @@ side-channel@^1.0.4:
     get-intrinsic "^1.0.2"
     object-inspect "^1.9.0"
 
-signal-exit@^3.0.0, signal-exit@^3.0.2:
+signal-exit@^3.0.2:
   version "3.0.5"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f"
   integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==
 
-sisteransi@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
-  integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
-
 size-limit@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-7.0.0.tgz#813e26e3496d3403f12f25fdf1233421c038a3e5"
@@ -4157,156 +1610,11 @@ slash@^3.0.0:
   resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
   integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
 
-snapdragon-node@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
-  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
-  dependencies:
-    define-property "^1.0.0"
-    isobject "^3.0.0"
-    snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
-  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
-  dependencies:
-    kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
-  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
-  dependencies:
-    base "^0.11.1"
-    debug "^2.2.0"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    map-cache "^0.2.2"
-    source-map "^0.5.6"
-    source-map-resolve "^0.5.0"
-    use "^3.1.0"
-
-source-map-resolve@^0.5.0:
-  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.2"
-    decode-uri-component "^0.2.0"
-    resolve-url "^0.2.1"
-    source-map-url "^0.4.0"
-    urix "^0.1.0"
-
-source-map-support@^0.5.6:
-  version "0.5.20"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9"
-  integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==
-  dependencies:
-    buffer-from "^1.0.0"
-    source-map "^0.6.0"
-
-source-map-url@^0.4.0:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
-  integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-
-source-map@^0.5.0, source-map@^0.5.6:
-  version "0.5.7"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
 source-map@^0.7.3:
   version "0.7.3"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
   integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
 
-spdx-correct@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
-  integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
-  dependencies:
-    spdx-expression-parse "^3.0.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
-  integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
-
-spdx-expression-parse@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
-  integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
-  dependencies:
-    spdx-exceptions "^2.1.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
-  version "3.0.11"
-  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
-  integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==
-
-split-string@^3.0.1, split-string@^3.0.2:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
-  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
-  dependencies:
-    extend-shallow "^3.0.0"
-
-sprintf-js@~1.0.2:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-
-sshpk@^1.7.0:
-  version "1.16.1"
-  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
-  integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
-  dependencies:
-    asn1 "~0.2.3"
-    assert-plus "^1.0.0"
-    bcrypt-pbkdf "^1.0.0"
-    dashdash "^1.12.0"
-    ecc-jsbn "~0.1.1"
-    getpass "^0.1.1"
-    jsbn "~0.1.0"
-    safer-buffer "^2.0.2"
-    tweetnacl "~0.14.0"
-
-stack-utils@^1.0.1:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b"
-  integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==
-  dependencies:
-    escape-string-regexp "^2.0.0"
-
-static-extend@^0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
-  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
-  dependencies:
-    define-property "^0.2.5"
-    object-copy "^0.1.0"
-
-stealthy-require@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
-  integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
-
-string-length@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
-  integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==
-  dependencies:
-    astral-regex "^1.0.0"
-    strip-ansi "^5.2.0"
-
 string-width@^4.1.0, string-width@^4.2.0:
   version "4.2.3"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -4332,13 +1640,6 @@ string.prototype.trimstart@^1.0.4:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
 
-strip-ansi@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
-  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
-  dependencies:
-    ansi-regex "^4.1.0"
-
 strip-ansi@^6.0.0, strip-ansi@^6.0.1:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -4351,61 +1652,18 @@ strip-bom@^3.0.0:
   resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
   integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
 
-strip-bom@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
-  integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
-
-strip-eof@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-  integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
-
-strip-final-newline@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
-  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-
 strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
 
-supports-color@^5.3.0:
-  version "5.5.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
-  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
-  dependencies:
-    has-flag "^3.0.0"
-
-supports-color@^7.0.0, supports-color@^7.1.0:
+supports-color@^7.1.0:
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
   integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
   dependencies:
     has-flag "^4.0.0"
 
-supports-hyperlinks@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb"
-  integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==
-  dependencies:
-    has-flag "^4.0.0"
-    supports-color "^7.0.0"
-
-symbol-tree@^3.2.2:
-  version "3.2.4"
-  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
-  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
-
-terminal-link@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
-  integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
-  dependencies:
-    ansi-escapes "^4.2.1"
-    supports-hyperlinks "^2.0.0"
-
 test-exclude@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
@@ -4420,36 +1678,6 @@ text-table@^0.2.0:
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
   integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
 
-throat@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
-  integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
-
-tmpl@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
-  integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
-
-to-fast-properties@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
-  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
-
-to-object-path@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
-  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
-  dependencies:
-    kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
-  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
-  dependencies:
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-
 to-regex-range@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -4457,39 +1685,10 @@ to-regex-range@^5.0.1:
   dependencies:
     is-number "^7.0.0"
 
-to-regex@^3.0.1, to-regex@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
-  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
-  dependencies:
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    regex-not "^1.0.2"
-    safe-regex "^1.1.0"
-
-tough-cookie@^2.3.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==
-  dependencies:
-    psl "^1.1.28"
-    punycode "^2.1.1"
-
-tough-cookie@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
-  integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
-  dependencies:
-    ip-regex "^2.1.0"
-    psl "^1.1.28"
-    punycode "^2.1.1"
-
-tr46@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
-  integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
-  dependencies:
-    punycode "^2.1.0"
+totalist@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/totalist/-/totalist-2.0.0.tgz#db6f1e19c0fa63e71339bbb8fba89653c18c7eec"
+  integrity sha512-+Y17F0YzxfACxTyjfhnJQEe7afPA0GSpYlFkl2VFMxYP7jshQf9gXV7cH47EfToBumFThfKBvfAcoUn6fdNeRQ==
 
 tsconfig-paths@^3.11.0:
   version "3.11.0"
@@ -4501,18 +1700,6 @@ tsconfig-paths@^3.11.0:
     minimist "^1.2.0"
     strip-bom "^3.0.0"
 
-tunnel-agent@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
-  integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
-  dependencies:
-    safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
-  version "0.14.5"
-  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
-
 type-check@^0.4.0, type-check@~0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -4520,45 +1707,11 @@ type-check@^0.4.0, type-check@~0.4.0:
   dependencies:
     prelude-ls "^1.2.1"
 
-type-check@~0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
-  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
-  dependencies:
-    prelude-ls "~1.1.2"
-
-type-detect@4.0.8:
-  version "4.0.8"
-  resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
-  integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-
 type-fest@^0.20.2:
   version "0.20.2"
   resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
   integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
 
-type-fest@^0.21.3:
-  version "0.21.3"
-  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
-  integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
-
-type-fest@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
-  integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
-
-type-fest@^0.8.1:
-  version "0.8.1"
-  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
-  integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-
-typedarray-to-buffer@^3.1.5:
-  version "3.1.5"
-  resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
-  integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
-  dependencies:
-    is-typedarray "^1.0.0"
-
 unbox-primitive@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
@@ -4569,16 +1722,6 @@ unbox-primitive@^1.0.1:
     has-symbols "^1.0.2"
     which-boxed-primitive "^1.0.2"
 
-union-value@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
-  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
-  dependencies:
-    arr-union "^3.1.0"
-    get-value "^2.0.6"
-    is-extendable "^0.1.1"
-    set-value "^2.0.1"
-
 universalify@^0.1.0:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -4589,14 +1732,6 @@ universalify@^2.0.0:
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
   integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
 
-unset-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
-  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
-  dependencies:
-    has-value "^0.3.1"
-    isobject "^3.0.0"
-
 uri-js@^4.2.2:
   version "4.4.1"
   resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -4604,101 +1739,31 @@ uri-js@^4.2.2:
   dependencies:
     punycode "^2.1.0"
 
-urix@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-
-use@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
-  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
-uuid@^3.3.2:
-  version "3.4.0"
-  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
-  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+uvu@^0.5.2:
+  version "0.5.2"
+  resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.2.tgz#c145e7f4b5becf80099cf22fd8a4a05f0112b2c0"
+  integrity sha512-m2hLe7I2eROhh+tm3WE5cTo/Cv3WQA7Oc9f7JB6uWv+/zVKvfAm53bMyOoGOSZeQ7Ov2Fu9pLhFr7p07bnT20w==
+  dependencies:
+    dequal "^2.0.0"
+    diff "^5.0.0"
+    kleur "^4.0.3"
+    sade "^1.7.3"
+    totalist "^2.0.0"
 
 v8-compile-cache@^2.0.3:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
   integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
 
-v8-to-istanbul@^4.1.3:
-  version "4.1.4"
-  resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6"
-  integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==
+v8-to-istanbul@^8.0.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz#0aeb763894f1a0a1676adf8a8b7612a38902446c"
+  integrity sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==
   dependencies:
     "@types/istanbul-lib-coverage" "^2.0.1"
     convert-source-map "^1.6.0"
     source-map "^0.7.3"
 
-validate-npm-package-license@^3.0.1:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
-  integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
-  dependencies:
-    spdx-correct "^3.0.0"
-    spdx-expression-parse "^3.0.0"
-
-verror@1.10.0:
-  version "1.10.0"
-  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
-  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
-  dependencies:
-    assert-plus "^1.0.0"
-    core-util-is "1.0.2"
-    extsprintf "^1.2.0"
-
-w3c-hr-time@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
-  integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
-  dependencies:
-    browser-process-hrtime "^1.0.0"
-
-w3c-xmlserializer@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794"
-  integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==
-  dependencies:
-    domexception "^1.0.1"
-    webidl-conversions "^4.0.2"
-    xml-name-validator "^3.0.0"
-
-walker@^1.0.7, walker@~1.0.5:
-  version "1.0.8"
-  resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
-  integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
-  dependencies:
-    makeerror "1.0.12"
-
-webidl-conversions@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
-  integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
-
-whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
-  integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
-  dependencies:
-    iconv-lite "0.4.24"
-
-whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
-  integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
-
-whatwg-url@^7.0.0:
-  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"
-    webidl-conversions "^4.0.2"
-
 which-boxed-primitive@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -4710,34 +1775,22 @@ which-boxed-primitive@^1.0.2:
     is-string "^1.0.5"
     is-symbol "^1.0.3"
 
-which-module@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
-  integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-
-which@^1.2.9, which@^1.3.1:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
-  integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
-  dependencies:
-    isexe "^2.0.0"
-
-which@^2.0.1, which@^2.0.2:
+which@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
   integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
   dependencies:
     isexe "^2.0.0"
 
-word-wrap@^1.2.3, word-wrap@~1.2.3:
+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==
 
-wrap-ansi@^6.2.0:
-  version "6.2.0"
-  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
-  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+wrap-ansi@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
   dependencies:
     ansi-styles "^4.0.0"
     string-width "^4.1.0"
@@ -4748,62 +1801,35 @@ wrappy@1:
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
   integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
 
-write-file-atomic@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
-  integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
-  dependencies:
-    imurmurhash "^0.1.4"
-    is-typedarray "^1.0.0"
-    signal-exit "^3.0.2"
-    typedarray-to-buffer "^3.1.5"
-
-ws@^7.0.0:
-  version "7.5.5"
-  resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881"
-  integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==
-
-xml-name-validator@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
-  integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-
-xmlchars@^2.1.1:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
-  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
-
-y18n@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
-  integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
+y18n@^5.0.5:
+  version "5.0.8"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
 
 yallist@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
   integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
 
-yargs-parser@^18.1.2:
-  version "18.1.3"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
-  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
-  dependencies:
-    camelcase "^5.0.0"
-    decamelize "^1.2.0"
+yargs-parser@^20.2.2, yargs-parser@^20.2.7:
+  version "20.2.9"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+  integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
 
-yargs@^15.3.1:
-  version "15.4.1"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
-  integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+yargs@^16.2.0:
+  version "16.2.0"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+  integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
   dependencies:
-    cliui "^6.0.0"
-    decamelize "^1.2.0"
-    find-up "^4.1.0"
-    get-caller-file "^2.0.1"
+    cliui "^7.0.2"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
     require-directory "^2.1.1"
-    require-main-filename "^2.0.0"
-    set-blocking "^2.0.0"
     string-width "^4.2.0"
-    which-module "^2.0.0"
-    y18n "^4.0.0"
-    yargs-parser "^18.1.2"
+    y18n "^5.0.5"
+    yargs-parser "^20.2.2"
+
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==


Test patch:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 36fd3999..ccafed69 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -44,6 +44,6 @@ jobs:
       - name: Install dependencies
         run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts
       - name: Run unit tests
-        run: npx jest test/*.test.js
+        run: yarn unit
         env:
           FORCE_COLOR: 2
diff --git a/test/and.test.js b/test/and.test.js
index 17a84fc5..2391cab7 100644
--- a/test/and.test.js
+++ b/test/and.test.js
@@ -1,39 +1,51 @@
+let { test } = require('uvu')
+let { is, equal } = require('uvu/assert')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let PACKAGE = join(__dirname, 'fixtures', 'package2')
 
-it('query composition with AND operator', () => {
-  expect(browserslist('ie >= 6, ie <= 7')).toEqual([
-    'ie 11',
-    'ie 10',
-    'ie 9',
-    'ie 8',
-    'ie 7',
-    'ie 6',
-    'ie 5.5'
-  ])
-
-  expect(browserslist('ie >= 6 and ie <= 7')).toEqual(['ie 7', 'ie 6'])
-
-  expect(browserslist('ie < 11 and not ie 7')).toEqual([
-    'ie 10',
-    'ie 9',
-    'ie 8',
-    'ie 6',
-    'ie 5.5'
-  ])
+test('query composition with AND operator', () => {
+  equal(
+    browserslist('ie >= 6, ie <= 7'),
+    [
+      'ie 11',
+      'ie 10',
+      'ie 9',
+      'ie 8',
+      'ie 7',
+      'ie 6',
+      'ie 5.5'
+    ]
+  )
+
+  equal(browserslist('ie >= 6 and ie <= 7'), ['ie 7', 'ie 6'])
+
+  equal(
+    browserslist('ie < 11 and not ie 7'),
+    [
+      'ie 10',
+      'ie 9',
+      'ie 8',
+      'ie 6',
+      'ie 5.5'
+    ]
+  )
 })
 
-it('correctly works with not and one-version browsers as AND query', () => {
-  expect(browserslist('last 1 Baidu version and not <2% in AT')).toHaveLength(0)
+test('correctly works with not and one-version browsers as AND query', () => {
+  is(browserslist('last 1 Baidu version and not <2% in AT').length, 0)
 })
 
-it('reads config from package.json', () => {
-  expect(browserslist.findConfig(PACKAGE)).toEqual({
-    defaults: 'ie > 6 and ie 9 or ie 10'
-  })
+test('reads config from package.json', () => {
+  equal(
+    browserslist.findConfig(PACKAGE),
+    { defaults: 'ie > 6 and ie 9 or ie 10' }
+  )
 
-  expect(browserslist(null, { path: PACKAGE })).toEqual(['ie 10', 'ie 9'])
+  equal(browserslist(null, { path: PACKAGE }), ['ie 10', 'ie 9'])
 })
+
+test.run()
diff --git a/test/browser.test.js b/test/browser.test.js
index d886cb3d..0c9f440d 100644
--- a/test/browser.test.js
+++ b/test/browser.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { is, equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-let originData = browserslist.data
+let originData = { ...browserslist.data }
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.data = {
     ie: {
       name: 'ie',
@@ -17,33 +21,38 @@ beforeEach(() => {
       releaseDate: {}
     }
   }
-})
+});
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.data = originData
 })
 
-it('selects versions of browser', () => {
-  expect(browserslist('last 2 ie versions')).toEqual(['ie 11', 'ie 10'])
+test('selects versions of browser', () => {
+  equal(browserslist('last 2 ie versions'), ['ie 11', 'ie 10'])
 })
 
-it('does not include unreleased versions', () => {
+test('does not include unreleased versions', () => {
   browserslist.data = originData
-  expect(browserslist('last 2 safari versions')).not.toContain('safari TP')
+  is(browserslist('last 2 safari versions').indexOf('safari TP'), -1)
 })
 
-it('supports pluralization', () => {
-  expect(browserslist('last 1 ie version')).toEqual(['ie 11'])
+test('supports pluralization', () => {
+  equal(browserslist('last 1 ie version'), ['ie 11'])
 })
 
-it('has case insensitive aliases', () => {
-  expect(browserslist('Last 01 Explorer Version')).toEqual(['ie 11'])
+test('has case insensitive aliases', () => {
+  equal(browserslist('Last 01 Explorer Version'), ['ie 11'])
 })
 
-it('has special logic for android', () => {
-  expect(browserslist('last 4 android versions')).toEqual(['android 67'])
-  expect(browserslist('last 31 android versions')).toEqual([
-    'android 67',
-    'android 4.4.3-4.4.4'
-  ])
+test('has special logic for android', () => {
+  equal(browserslist('last 4 android versions'), ['android 67'])
+  equal(
+    browserslist('last 31 android versions'),
+    [
+      'android 67',
+      'android 4.4.3-4.4.4'
+    ]
+  )
 })
+
+test.run()
diff --git a/test/cache.test.js b/test/cache.test.js
index 926ec0ff..d66b4ee1 100644
--- a/test/cache.test.js
+++ b/test/cache.test.js
@@ -1,40 +1,43 @@
+let { test } = require('uvu')
+let { equal, not } = require('uvu/assert')
 let { writeFile, remove, mkdir } = require('fs-extra')
 let { tmpdir } = require('os')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let DIR = join(tmpdir(), 'browserslist-' + Math.random())
 let CONFIG = join(DIR, 'browserslist')
 
-beforeAll(async () => {
+test.before(async () => {
   await mkdir(DIR)
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.clearCaches()
   delete process.env.BROWSERSLIST_DISABLE_CACHE
 })
 
-afterAll(async () => {
+test.after(async () => {
   await Promise.all([remove(CONFIG), remove(DIR)])
 })
 
-it('caches configuration but the cache is clearable', async () => {
+test('caches configuration but the cache is clearable', async () => {
   await writeFile(CONFIG, 'ie 8', 'UTF-8')
   let result1 = browserslist.findConfig(DIR)
 
   await writeFile(CONFIG, 'chrome 56', 'UTF-8')
   let result2 = browserslist.findConfig(DIR)
 
-  expect(result1).toEqual(result2)
+  equal(result1, result2)
 
   browserslist.clearCaches()
   let result3 = browserslist.findConfig(DIR)
-  expect(result1).not.toEqual(result3)
+  not.equal(result1, result3)
 })
 
-it('does not use cache when ENV variable set', async () => {
+test('does not use cache when ENV variable set', async () => {
   process.env.BROWSERSLIST_DISABLE_CACHE = '1'
 
   await writeFile(CONFIG, 'ie 8', 'UTF-8')
@@ -43,5 +46,7 @@ it('does not use cache when ENV variable set', async () => {
   await writeFile(CONFIG, 'chrome 56', 'UTF-8')
   let result2 = browserslist.findConfig(DIR)
 
-  expect(result1).not.toEqual(result2)
+  not.equal(result1, result2)
 })
+
+test.run()
diff --git a/test/cli.test.js b/test/cli.test.js
index 1886cca5..702f2391 100644
--- a/test/cli.test.js
+++ b/test/cli.test.js
@@ -1,3 +1,7 @@
+delete require.cache[require.resolve('..')]
+
+let { test } = require('uvu')
+let { is, equal, match } = require('uvu/assert')
 let { join } = require('path')
 let spawn = require('cross-spawn')
 
@@ -31,15 +35,15 @@ function run(args) {
 
 async function err(...args) {
   let { code, stdout, stderr } = await run(args)
-  expect(stdout).toEqual('')
-  expect(code).not.toEqual(0)
+  is(stdout, '')
+  is.not(code, 0)
   return stderr
 }
 
 async function out(...args) {
   let { code, stdout, stderr } = await run(args)
-  expect(stderr).toEqual('')
-  expect(code).toEqual(0)
+  is(stderr, '')
+  is(code, 0)
   return stdout
 }
 
@@ -57,110 +61,121 @@ function ie8cov(area) {
   return coverage(['ie 8'], area)
 }
 
-it('returns help', async () => {
-  expect(await out('--help')).toContain('Usage:')
-  expect(await out('-h')).toContain('Usage:')
+test('returns help', async () => {
+  match(await out('--help'), 'Usage:')
+  match(await out('-h'), 'Usage:')
 })
 
-it('returns version', async () => {
+test('returns version', async () => {
   let result = pkg.name + ' ' + pkg.version + '\n'
-  expect(await out('--version')).toEqual(result)
-  expect(await out('-v')).toEqual(result)
+  is(await out('--version'), result)
+  is(await out('-v'), result)
 })
 
-it('returns error: `unknown arguments`', async () => {
-  expect(await err('--unknown')).toContain('Unknown arguments')
+test('returns error: `unknown arguments`', async () => {
+  match(await err('--unknown'), 'Unknown arguments')
 })
 
-it('selects last 2 versions', async () => {
-  expect(await arr('last 2 versions')).toEqual(browserslist('last 2 versions'))
+test('selects last 2 versions', async () => {
+  equal(await arr('last 2 versions'), browserslist('last 2 versions'))
 })
 
-it('uses case insensitive aliases', async () => {
-  expect(await arr('Explorer > 10')).toEqual(browserslist('Explorer > 10'))
+test('uses case insensitive aliases', async () => {
+  equal(await arr('Explorer > 10'), browserslist('Explorer > 10'))
 })
 
-it('returns error `unknown browser query`', async () => {
-  expect(await err('unknow')).toEqual(
+test('returns error `unknown browser query`', async () => {
+  is(
+    await err('unknow'),
     'browserslist: Unknown browser query `unknow`. ' +
       'Maybe you are using old Browserslist or made typo in query.\n'
   )
 })
 
-it('returns usage in specified country', async () => {
-  expect(await out('--coverage=US', 'ie 8')).toContain(
+test('returns usage in specified country', async () => {
+  match(
+    await out('--coverage=US', 'ie 8'),
     `These browsers account for ${ie8cov('US')}% of all users in the US`
   )
 })
 
-it('returns usage in specified ares', async () => {
+test('returns usage in specified ares', async () => {
   let post = '% of all users '
-  expect(await out('--coverage=US,alt-AS,global', 'ie 8')).toContain(
+  match(
+    await out('--coverage=US,alt-AS,global', 'ie 8'),
     `These browsers account for ${ie8cov('US') + post}in the US\n` +
       `                           ${ie8cov('alt-AS') + post}in the ALT-AS\n` +
       `                           ${ie8cov() + post}globally\n`
   )
 })
 
-it('returns error: `unknown browser query to get coverage`', async () => {
-  expect(await err('--coverage=UK', 'ie8')).toEqual(
+test('returns error: `unknown browser query to get coverage`', async () => {
+  is(
+    await err('--coverage=UK', 'ie8'),
     'browserslist: Unknown browser query `ie8`. ' +
       'Maybe you are using old Browserslist or made typo in query.\n'
   )
 })
 
-it('reads browserslist config', async () => {
-  expect(await arr(CONF)).toEqual(['ie 11', 'ie 10'])
+test('reads browserslist config', async () => {
+  equal(await arr(CONF), ['ie 11', 'ie 10'])
 })
 
-it('reads browserslist config from current directory', async () => {
+test('reads browserslist config from current directory', async () => {
   let cwd = join(__dirname, 'fixtures')
-  expect(await arr({ cwd })).toEqual(['ie 11', 'ie 10'])
+  equal(await arr({ cwd }), ['ie 11', 'ie 10'])
 })
 
-it('returns error browserslist config', async () => {
-  expect(await err('--config="./unknown_path"')).toEqual(
+test('returns error browserslist config', async () => {
+  is(
+    await err('--config="./unknown_path"'),
     "browserslist: Can't read ./unknown_path config\n"
   )
 })
 
-it('reads browserslist config: env production', async () => {
-  expect(await arr(CONF, '--env="production"')).toEqual(['ie 9', 'opera 41'])
+test('reads browserslist config: env production', async () => {
+  equal(await arr(CONF, '--env="production"'), ['ie 9', 'opera 41'])
 })
 
-it('returns usage from config', async () => {
+test('returns usage from config', async () => {
   let result = coverage(['ie 11', 'ie 10'])
-  expect(await out(CONF, '--coverage')).toContain(`${result}`)
+  match(await out(CONF, '--coverage'), `${result}`)
 })
 
-it('supports custom stats', async () => {
-  expect(await arr(STATS, '> 5% in my stats')).toEqual(['ie 11', 'ie 10'])
+test('supports custom stats', async () => {
+  equal(await arr(STATS, '> 5% in my stats'), ['ie 11', 'ie 10'])
 })
 
-it('supports custom stats in coverage', async () => {
-  expect(await out('--coverage', STATS, '> 5% in my stats')).toEqual(
+test('supports custom stats in coverage', async () => {
+  is(
+    await out('--coverage', STATS, '> 5% in my stats'),
     'These browsers account for 15.7% of all users in custom statistics\n'
   )
 })
 
-it('shows Browserslist error', async () => {
-  expect(await err({ cwd: join(__dirname, 'fixtures', 'wrong1') })).toEqual(
+test('shows Browserslist error', async () => {
+  is(
+    await err({ cwd: join(__dirname, 'fixtures', 'wrong1') }),
     'browserslist: Browserslist config ' +
       'should be a string or an array of strings with browser queries\n'
   )
 })
 
-it('supports JSON', async () => {
-  expect(await out('--json', '"ie 8"')).toEqual(
+test('supports JSON', async () => {
+  is(
+    await out('--json', '"ie 8"'),
     '{\n  "browsers": [\n    "ie 8"\n  ]\n}\n'
   )
 })
 
-it('supports JSON with coverage', async () => {
-  expect(await out('--json', '--coverage=US', '"ie 8"')).toEqual(
+test('supports JSON with coverage', async () => {
+  is(
+    await out('--json', '--coverage=US', '"ie 8"'),
     '{\n' +
       '  "browsers": [\n    "ie 8"\n  ],\n' +
       `  "coverage": {\n    "US": ${ie8cov('US')}\n  }\n` +
       '}\n'
   )
 })
+
+test.run()
diff --git a/test/config-query.test.js b/test/config-query.test.js
index f29500ed..7d7d47c0 100644
--- a/test/config-query.test.js
+++ b/test/config-query.test.js
@@ -1,14 +1,20 @@
+let { test } = require('uvu')
+let {  equal } = require('uvu/assert')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let FILE = join(__dirname, 'fixtures', 'env-config', 'test.css')
 
-it('supports config query', () => {
-  expect(
+test('supports config query', () => {
+  equal(
     browserslist('browserslist config, not chrome >0', {
       path: FILE,
       env: 'development'
-    })
-  ).toEqual(['firefox 50'])
+    }),
+    ['firefox 50']
+  )
 })
+
+test.run()
diff --git a/test/config.test.js b/test/config.test.js
index edf3aa2d..9711334b 100644
--- a/test/config.test.js
+++ b/test/config.test.js
@@ -1,5 +1,8 @@
+let { test } = require('uvu')
+let { is, equal, throws } = require('uvu/assert')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let RC = join(__dirname, 'fixtures', 'rc', 'test.css')
@@ -14,116 +17,107 @@ let BROKEN = join(__dirname, 'fixtures', 'broken', 'test.css')
 let STRING = join(__dirname, 'fixtures', 'string', 'test.css')
 let PACKAGE = join(__dirname, 'fixtures', 'package', 'test.css')
 
+let originWarn = console.warn
+let warnCallCount = 0
+test.before.each(() => {
+  warnCallCount = 0
+  console.warn = () => {
+    warnCallCount++
+    return true
+  }
+})
+
 let originCwd = process.cwd()
-afterEach(() => {
+test.after.each(() => {
   process.chdir(originCwd)
+  console.warn = originWarn
 })
 
-it('parses queries', () => {
-  expect(browserslist.parseConfig('ie 10\n> 1%')).toEqual({
-    defaults: ['ie 10', '> 1%']
-  })
+test('parses queries', () => {
+  equal(
+    browserslist.parseConfig('ie 10\n> 1%'),
+    { defaults: ['ie 10', '> 1%'] }
+  )
 })
 
-it('parses comma', () => {
-  expect(browserslist.parseConfig('ie 10, > 1%')).toEqual({
-    defaults: ['ie 10', '> 1%']
-  })
+test('parses comma', () => {
+  equal(
+    browserslist.parseConfig('ie 10, > 1%'),
+    { defaults: ['ie 10', '> 1%'] }
+  )
 })
 
-it('removes comments', () => {
+test('removes comments', () => {
   let config = '# support list\nie 10#bad\n> 1%'
-  expect(browserslist.parseConfig(config)).toEqual({
-    defaults: ['ie 10', '> 1%']
-  })
+  equal(
+    browserslist.parseConfig(config),
+    { defaults: ['ie 10', '> 1%'] }
+  )
 })
 
-it('supports sections', () => {
-  expect(browserslist.parseConfig('ie 10\n[test]\nie 11')).toEqual({
-    defaults: ['ie 10'],
-    test: ['ie 11']
-  })
+test('supports sections', () => {
+  equal(
+    browserslist.parseConfig('ie 10\n[test]\nie 11'),
+    { defaults: ['ie 10'], test: ['ie 11'] }
+  )
 })
 
-it('throws on duplicate sections', () => {
+test('throws on duplicate sections', () => {
   let config = '[test]\nie 10\n[production test]\nie 11'
-  expect(() => {
-    browserslist.parseConfig(config)
-  }).toThrow(/Duplicate section test in Browserslist config/)
+  throws(() => { browserslist.parseConfig(config) }, /Duplicate section test in Browserslist config/)
 })
 
-it('trims whitespaces', () => {
-  expect(browserslist.parseConfig('ie 9\n\n [ test] \n \n  > 1%\n')).toEqual({
-    defaults: ['ie 9'],
-    test: ['> 1%']
-  })
+test('trims whitespaces', () => {
+  equal(
+    browserslist.parseConfig('ie 9\n\n [ test] \n \n  > 1%\n'),
+    { defaults: ['ie 9'], test: ['> 1%'] }
+  )
 })
 
-it('returns undefined on no config', () => {
-  expect(browserslist.findConfig(__dirname)).not.toBeDefined()
+test('returns undefined on no config', () => {
+  equal(browserslist.findConfig(__dirname), undefined)
 })
 
-it('reads config', () => {
-  expect(browserslist.findConfig(FILE)).toEqual({
-    defaults: ['ie 11', 'ie 10']
-  })
+test('reads config', () => {
+  equal(browserslist.findConfig(FILE), { defaults: ['ie 11', 'ie 10'] })
 })
 
-it('reads .browserslistrc config', () => {
-  expect(browserslist.findConfig(RC)).toEqual({
-    defaults: ['ie 11']
-  })
+test('reads .browserslistrc config', () => {
+  equal(browserslist.findConfig(RC), { defaults: ['ie 11'] })
 })
 
-it('reads config from package.json', () => {
-  expect(browserslist.findConfig(PACKAGE)).toEqual({
-    defaults: ['ie 9', 'ie 10']
-  })
+test('reads config from package.json', () => {
+  equal(browserslist.findConfig(PACKAGE), { defaults: ['ie 9', 'ie 10'] })
 })
 
-it('shows warning on broken package.json', () => {
-  jest.spyOn(console, 'warn').mockImplementation(() => true)
-  expect(browserslist.findConfig(BROKEN)).toEqual({
-    defaults: ['ie 11', 'ie 10']
-  })
-  expect(console.warn).toHaveBeenCalledTimes(1)
+test('shows warning on broken package.json', () => {
+  equal(browserslist.findConfig(BROKEN), { defaults: ['ie 11', 'ie 10'] })
+  is(warnCallCount, 1)
 })
 
-it('shows error on key typo', () => {
-  expect(() => {
-    browserslist.findConfig(TYPO)
-  }).toThrow(/browserlist/)
+test('shows error on key typo', () => {
+  throws(() => { browserslist.findConfig(TYPO) }, /browserlist/)
 })
 
-it('reads from dir wich contains both browserslist and package.json', () => {
-  expect(() => {
-    browserslist.findConfig(BOTH1)
-  }).toThrow(/contains both browserslist and package\.json/)
+test('reads from dir wich contains both browserslist and package.json', () => {
+  throws(() => { browserslist.findConfig(BOTH1) }, /contains both browserslist and package\.json/)
 })
 
-it('reads from dir wich contains both .browserslistrc and package.json', () => {
-  expect(() => {
-    browserslist.findConfig(BOTH2)
-  }).toThrow(/contains both .browserslistrc and package\.json/)
+test('reads from dir wich contains both .browserslistrc and package.json', () => {
+  throws(() => { browserslist.findConfig(BOTH2) }, /contains both .browserslistrc and package\.json/)
 })
 
-it('reads from dir wich contains both .browserslistrc and browserslist', () => {
-  expect(() => {
-    browserslist.findConfig(BOTH3)
-  }).toThrow(/contains both .browserslistrc and browserslist/)
+test('reads from dir wich contains both .browserslistrc and browserslist', () => {
+  throws(() => { browserslist.findConfig(BOTH3) }, /contains both .browserslistrc and browserslist/)
 })
 
-it('checks config format', () => {
-  expect(() => {
-    browserslist.findConfig(WRONG1)
-  }).toThrow(/Browserslist config should/)
-  expect(() => {
-    browserslist.findConfig(WRONG2)
-  }).toThrow(/Browserslist config should/)
+test('checks config format', () => {
+  throws(() => { browserslist.findConfig(WRONG1) }, /Browserslist config should/)
+  throws(() => { browserslist.findConfig(WRONG2) }, /Browserslist config should/)
 })
 
-it('reads config with one string', () => {
-  expect(browserslist.findConfig(STRING)).toEqual({
-    defaults: 'ie 9, ie 8'
-  })
+test('reads config with one string', () => {
+  equal(browserslist.findConfig(STRING), { defaults: 'ie 9, ie 8' })
 })
+
+test.run()
diff --git a/test/country.test.js b/test/country.test.js
index 443cf52b..bcb20169 100644
--- a/test/country.test.js
+++ b/test/country.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { is, equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let originUsage = browserslist.usage
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.usage = {
     US: {
       'ie 8': 1,
@@ -22,55 +26,60 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.usage = originUsage
 })
 
-it('selects browsers by popularity', () => {
-  expect(browserslist('> 10% in US')).toEqual(['ie 11', 'ie 10'])
+test('selects browsers by popularity', () => {
+  equal(browserslist('> 10% in US'), ['ie 11', 'ie 10'])
 })
 
-it('selects popularity by more or equal', () => {
-  expect(browserslist('>= 5% in US')).toEqual(['ie 11', 'ie 10', 'ie 9'])
+test('selects popularity by more or equal', () => {
+  equal(browserslist('>= 5% in US'), ['ie 11', 'ie 10', 'ie 9'])
 })
 
-it('selects browsers by unpopularity', () => {
-  expect(browserslist('< 5% in US')).toEqual(['ie 8'])
+test('selects browsers by unpopularity', () => {
+  equal(browserslist('< 5% in US'), ['ie 8'])
 })
 
-it('selects unpopularity by less or equal', () => {
-  expect(browserslist('<= 5% in US')).toEqual(['ie 9', 'ie 8'])
+test('selects unpopularity by less or equal', () => {
+  equal(browserslist('<= 5% in US'), ['ie 9', 'ie 8'])
 })
 
-it('works with float', () => {
-  expect(browserslist('> 10.2% in US')).toEqual(['ie 11'])
+test('works with float', () => {
+  equal(browserslist('> 10.2% in US'), ['ie 11'])
 })
 
-it('works with float that has a leading dot', () => {
-  expect(browserslist('> .2% in US')).toEqual([
-    'ie 11',
-    'ie 10',
-    'ie 9',
-    'ie 8'
-  ])
+test('works with float that has a leading dot', () => {
+  equal(
+    browserslist('> .2% in US'),
+    [
+      'ie 11',
+      'ie 10',
+      'ie 9',
+      'ie 8'
+    ]
+  )
 })
 
-it('fixes country case', () => {
-  expect(browserslist('> 10.2% in us')).toEqual(['ie 11'])
+test('fixes country case', () => {
+  equal(browserslist('> 10.2% in us'), ['ie 11'])
 })
 
-it('loads country from Can I Use', () => {
-  expect(browserslist('> 1% in RU').length > 0).toBe(true)
+test('loads country from Can I Use', () => {
+  is(browserslist('> 1% in RU').length > 0, true)
 })
 
-it('loads continents from Can I Use', () => {
-  expect(browserslist('> 1% in alt-AS').length > 0).toBe(true)
+test('loads continents from Can I Use', () => {
+  is(browserslist('> 1% in alt-AS').length > 0, true)
 })
 
-it('allows omission of the space between the > and the percentage', () => {
-  expect(browserslist('>10% in US').length > 0).toBe(true)
+test('allows omission of the space between the > and the percentage', () => {
+  is(browserslist('>10% in US').length > 0, true)
 })
 
-it('normalize incorrect caniuse versions for and_*', () => {
-  expect(browserslist('> 50% in XX')).toEqual(['and_chr 80'])
+test('normalize incorrect caniuse versions for and_*', () => {
+  equal(browserslist('> 50% in XX'), ['and_chr 80'])
 })
+
+test.run()
diff --git a/test/cover.test.js b/test/cover.test.js
index 68667a3f..c37aeb58 100644
--- a/test/cover.test.js
+++ b/test/cover.test.js
@@ -1,12 +1,15 @@
+let { test } = require('uvu')
+let { equal, throws } = require('uvu/assert')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let CUSTOM_STATS = join(__dirname, 'fixtures', 'stats.json')
 
 let originUsage = browserslist.usage
 
-beforeEach(() => {
+test.before.each(() => {
   process.env.BROWSERSLIST_STATS = CUSTOM_STATS
   browserslist.usage = {
     'global': {
@@ -23,57 +26,60 @@ beforeEach(() => {
     }
   }
 })
-afterEach(() => {
+test.after.each(() => {
   delete process.env.BROWSERSLIST_STATS
   browserslist.usage = originUsage
 })
 
-it('adds at least one browser', () => {
-  expect(browserslist('cover 1% in my stats')).toEqual(['ie 11'])
+test('adds at least one browser', () => {
+  equal(browserslist('cover 1% in my stats'), ['ie 11'])
 })
 
-it('is case insensitive for custom stat', () => {
-  expect(browserslist('Cover 1% In My Stats')).toEqual(['ie 11'])
+test('is case insensitive for custom stat', () => {
+  equal(browserslist('Cover 1% In My Stats'), ['ie 11'])
 })
 
-it('global coverage', () => {
-  expect(browserslist('cover 0.1%')).toEqual(['ie 5'])
+test('global coverage', () => {
+  equal(browserslist('cover 0.1%'), ['ie 5'])
 })
 
-it('is case insensitive for global coverage', () => {
-  expect(browserslist('Cover 0.1%')).toEqual(['ie 5'])
+test('is case insensitive for global coverage', () => {
+  equal(browserslist('Cover 0.1%'), ['ie 5'])
 })
 
-it('country coverage', () => {
-  expect(browserslist('cover 0.1% in US')).toEqual(['ie 9'])
+test('country coverage', () => {
+  equal(browserslist('cover 0.1% in US'), ['ie 9'])
 })
 
-it('country coverage alt', () => {
-  expect(browserslist('cover 0.1% in alt-us')).toEqual(['ie 8'])
+test('country coverage alt', () => {
+  equal(browserslist('cover 0.1% in alt-us'), ['ie 8'])
 })
 
-it('is case insensitive for country coverage', () => {
-  expect(browserslist('Cover 0.1% in us')).toEqual(['ie 9'])
-  expect(browserslist('Cover 0.1% in Alt-US')).toEqual(['ie 8'])
+test('is case insensitive for country coverage', () => {
+  equal(browserslist('Cover 0.1% in us'), ['ie 9'])
+  equal(browserslist('Cover 0.1% in Alt-US'), ['ie 8'])
 })
 
-it('adds browsers by popularity', () => {
-  expect(browserslist('cover 20% in my stats')).toEqual([
-    'chrome 37',
-    'chrome 36',
-    'ie 11',
-    'ie 10'
-  ])
+test('adds browsers by popularity', () => {
+  equal(
+    browserslist('cover 20% in my stats'),
+    [
+      'chrome 37',
+      'chrome 36',
+      'ie 11',
+      'ie 10'
+    ]
+  )
 })
 
-it('does not add zero-popularity', () => {
+test('does not add zero-popularity', () => {
   let stats = { stats: { ie: { 11: 10, 10: 0 } } }
-  expect(browserslist('cover 20% in my stats', stats)).toEqual(['ie 11'])
+  equal(browserslist('cover 20% in my stats', stats), ['ie 11'])
 })
 
-it('throws error on no stats', () => {
+test('throws error on no stats', () => {
   delete process.env.BROWSERSLIST_STATS
-  expect(() => {
-    browserslist('cover 70% in my stats')
-  }).toThrow(/statistics was not provided/)
+  throws(() => browserslist('cover 70% in my stats'), /statistics was not provided/)
 })
+
+test.run()
diff --git a/test/coverage.test.js b/test/coverage.test.js
index 35e0a79b..7f7dff75 100644
--- a/test/coverage.test.js
+++ b/test/coverage.test.js
@@ -1,5 +1,8 @@
+let { test } = require('uvu')
+let { equal, is, throws } = require('uvu/assert')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let STATS = join(__dirname, 'fixtures', 'browserslist-stats.json')
@@ -14,7 +17,7 @@ let custom = {
 
 let originUsage = browserslist.usage
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.usage = {
     global: {
       'ie 8': 5,
@@ -30,64 +33,64 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   delete process.env.BROWSERSLIST_STATS
   browserslist.usage = originUsage
 })
 
-it('returns browsers coverage', () => {
-  expect(browserslist.coverage(['ie 8', 'ie 9'])).toEqual(15.1)
+test('returns browsers coverage', () => {
+  equal(browserslist.coverage(['ie 8', 'ie 9']), 15.1)
 })
 
-it('returns zero coverage on empty browsers', () => {
-  expect(browserslist.coverage([])).toEqual(0)
+test('returns zero coverage on empty browsers', () => {
+  equal(browserslist.coverage([]), 0)
 })
 
-it('returns zero coverage on missed data', () => {
-  expect(browserslist.coverage(['ie 12'])).toEqual(0)
+test('returns zero coverage on missed data', () => {
+  equal(browserslist.coverage(['ie 12']), 0)
 })
 
-it('returns usage in specified country', () => {
-  expect(browserslist.coverage(['ie 9'], 'UK')).toEqual(4.4)
+test('returns usage in specified country', () => {
+  equal(browserslist.coverage(['ie 9'], 'UK'), 4.4)
 })
 
-it('accepts country in any case', () => {
-  expect(browserslist.coverage(['ie 9'], 'uk')).toEqual(4.4)
+test('accepts country in any case', () => {
+  equal(browserslist.coverage(['ie 9'], 'uk'), 4.4)
 })
 
-it('accepts mystats to load from custom stats', () => {
+test('accepts mystats to load from custom stats', () => {
   process.env.BROWSERSLIST_STATS = STATS
-  expect(browserslist.coverage(['ie 8'], 'my stats')).toEqual(6)
+  equal(browserslist.coverage(['ie 8'], 'my stats'), 6)
 })
 
-it('accepts mystats to load from custom stats with dataByBrowser', () => {
+test('accepts mystats to load from custom stats with dataByBrowser', () => {
   process.env.BROWSERSLIST_STATS = CUSTOM_STATS
-  expect(browserslist.coverage(['ie 8'], 'my stats')).toEqual(0.1)
+  equal(browserslist.coverage(['ie 8'], 'my stats'), 0.1)
 })
 
-it('throws when no custom stats', () => {
-  expect(() => {
-    browserslist.coverage(['ie 8'], 'my stats')
-  }).toThrow(/statistics was not provided/)
+test('throws when no custom stats', () => {
+  throws(() =>  browserslist.coverage(['ie 8'], 'my stats'), /statistics was not provided/)
 })
 
-it('loads country usage data from Can I Use', () => {
-  expect(browserslist.coverage(['ie 8', 'ie 9'], 'US') > 0).toBe(true)
+test('loads country usage data from Can I Use', () => {
+  is(browserslist.coverage(['ie 8', 'ie 9'], 'US') > 0, true)
 })
 
-it('loads continents usage data from Can I Use', () => {
-  expect(browserslist.coverage(['ie 8', 'ie 9'], 'alt-AS') > 0).toBe(true)
+test('loads continents usage data from Can I Use', () => {
+  is(browserslist.coverage(['ie 8', 'ie 9'], 'alt-AS') > 0, true)
 })
 
-it('fixes statistics of 0 version', () => {
-  expect(browserslist.coverage(['ie 9'], 'RU')).toEqual(2)
+test('fixes statistics of 0 version', () => {
+  is(browserslist.coverage(['ie 9'], 'RU'), 2)
 })
 
-it('fixes statistics of all version', () => {
-  expect(browserslist.coverage(['ie all'], 'RU')).toEqual(2)
+test('fixes statistics of all version', () => {
+  is(browserslist.coverage(['ie all'], 'RU'), 2)
 })
 
-it('supports custom statistics', () => {
-  expect(browserslist.coverage(['ie 9'], custom)).toEqual(10)
-  expect(browserslist.coverage(['ie 9'], { dataByBrowser: custom })).toEqual(10)
+test('supports custom statistics', () => {
+  is(browserslist.coverage(['ie 9'], custom), 10)
+  is(browserslist.coverage(['ie 9'], { dataByBrowser: custom }), 10)
 })
+
+test.run()
diff --git a/test/custom.test.js b/test/custom.test.js
index 02ab9731..56270309 100644
--- a/test/custom.test.js
+++ b/test/custom.test.js
@@ -1,91 +1,91 @@
+let { test } = require('uvu')
+let { equal, is, throws, match } = require('uvu/assert')
 let { readFile } = require('fs-extra')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
+let originData = { ...browserslist.data }
+
+
 let CUSTOM_STATS = join(__dirname, 'fixtures', 'stats.json')
 let ANDROID = join(__dirname, 'fixtures', 'android-stats.json')
 let STATS = join(__dirname, 'fixtures', 'browserslist-stats.json')
 
-afterEach(() => {
+test.after.each(() => {
   delete process.env.BROWSERSLIST_STATS
+  browserslist.data = originData
 })
 
-it('throws error on invalid file', () => {
-  expect(() => {
-    browserslist('', { stats: 'no.json' })
-  }).toThrow("Can't read no.json")
+test('throws error on invalid file', () => {
+  throws(() => browserslist('', { stats: 'no.json' }), "Can't read no.json")
 })
 
-it('takes stats file from environment variable', () => {
+test('takes stats file from environment variable', () => {
   process.env.BROWSERSLIST_STATS = CUSTOM_STATS
-  expect(browserslist('> 10% in my stats')).toEqual(['ie 11'])
+  equal(browserslist('> 10% in my stats'), ['ie 11'])
 })
 
-it('takes stats by path', () => {
-  expect(browserslist('> 10% in my stats', { stats: CUSTOM_STATS })).toEqual([
-    'ie 11'
-  ])
+test('takes stats by path', () => {
+  equal(browserslist('> 10% in my stats', { stats: CUSTOM_STATS }), ['ie 11'])
 })
 
-it('selects popularity by more or equal', () => {
-  expect(browserslist('>= 5.3% in my stats', { stats: CUSTOM_STATS })).toEqual([
-    'ie 11',
-    'ie 10'
-  ])
+test('selects popularity by more or equal', () => {
+  equal(
+    browserslist('>= 5.3% in my stats', { stats: CUSTOM_STATS }),
+    ['ie 11', 'ie 10']
+  )
 })
 
-it('selects browsers by unpopularity', () => {
-  expect(browserslist('< 0.5% in my stats', { stats: CUSTOM_STATS })).toEqual([
-    'chrome 34',
-    'ie 8'
-  ])
+test('selects browsers by unpopularity', () => {
+  equal(
+    browserslist('< 0.5% in my stats', { stats: CUSTOM_STATS }),
+    ['chrome 34', 'ie 8']
+  )
 })
 
-it('selects unpopularity by less or equal', () => {
-  expect(browserslist('<= 2.3% in my stats', { stats: CUSTOM_STATS })).toEqual([
-    'chrome 36',
-    'chrome 35',
-    'chrome 34',
-    'ie 9',
-    'ie 8'
-  ])
+test('selects unpopularity by less or equal', () => {
+  equal(
+    browserslist('<= 2.3% in my stats', { stats: CUSTOM_STATS }),
+    [
+      'chrome 36',
+      'chrome 35',
+      'chrome 34',
+      'ie 9',
+      'ie 8'
+    ]
+  )
 })
 
-it('accepts non-space query', () => {
-  expect(browserslist('>10% in my stats', { stats: CUSTOM_STATS })).toEqual([
-    'ie 11'
-  ])
+test('accepts non-space query', () => {
+  equal(browserslist('>10% in my stats', { stats: CUSTOM_STATS }), ['ie 11'])
 })
 
-it('takes stats from usage data object', async () => {
+test('takes stats from usage data object', async () => {
   let data = JSON.parse((await readFile(CUSTOM_STATS)).toString())
-  expect(browserslist('> 10% in my stats', { stats: data })).toEqual(['ie 11'])
+  equal(browserslist('> 10% in my stats', { stats: data }), ['ie 11'])
 })
 
-it('works alongside global usage query', () => {
+test('works alongside global usage query', () => {
   let list = browserslist('> 10% in my stats, > 1%', { stats: CUSTOM_STATS })
-  expect(list.length > 1).toBe(true)
+  is(list.length > 1, true)
 })
 
-it('takes stats from browserslist-stats.json', () => {
-  expect(browserslist('> 5% in my stats', { path: STATS })).toEqual(['ie 8'])
+test('takes stats from browserslist-stats.json', () => {
+  equal(browserslist('> 5% in my stats', { path: STATS }), ['ie 8'])
 })
 
-it('normalizes versions', () => {
+test('normalizes versions', () => {
   let opts = { stats: ANDROID }
-  let last = browserslist(['last 1 and_chr version'])
-  expect(browserslist(['> 3% in my stats'], opts)[0]).toMatch(last[0])
-  expect(
-    browserslist(['> 3% in my stats'], { ...opts, mobileToDesktop: true })[0]
-  ).toMatch(last[0])
-  expect(browserslist(['> 3% in my stats', 'not and_chr > 0'], opts)).toEqual(
-    []
-  )
+  let last = browserslist(['last 1 and_chr version'], undefined, true)
+  match(browserslist(['> 3% in my stats'], opts)[0], last[0])
+  match(browserslist(['> 3% in my stats'], { ...opts, mobileToDesktop: true })[0], last[0])
+  equal(browserslist(['> 3% in my stats', 'not and_chr > 0'], opts), [])
 })
 
-it('throws error on no stats', () => {
-  expect(() => {
-    browserslist('> 5% in my stats')
-  }).toThrow(/statistics was not provided/)
+test('throws error on no stats', () => {
+  throws(() => browserslist('> 5% in my stats'), /statistics was not provided/)
 })
+
+test.run()
diff --git a/test/dead.test.js b/test/dead.test.js
index 808147bb..454bd80c 100644
--- a/test/dead.test.js
+++ b/test/dead.test.js
@@ -1,9 +1,15 @@
+let { test } = require('uvu')
+let { equal, is } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-it('selects dead browsers by keywords', () => {
-  expect(browserslist('dead')).toContain('ie 10')
+test('selects dead browsers by keywords', () => {
+  is.not(browserslist('dead').indexOf('ie 10'), -1)
 })
 
-it('selects dead browsers case insensitive', () => {
-  expect(browserslist('Dead')).toEqual(browserslist('dead'))
+test('selects dead browsers case insensitive', () => {
+  equal(browserslist('Dead'), browserslist('dead'))
 })
+
+test.run()
diff --git a/test/defaults.test.js b/test/defaults.test.js
index 8c852b96..8eec693a 100644
--- a/test/defaults.test.js
+++ b/test/defaults.test.js
@@ -1,17 +1,25 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-it('selects defaults by keywords', () => {
-  expect(browserslist('defaults, ie 6')).toEqual(
+test('selects defaults by keywords', () => {
+  equal(
+    browserslist('defaults, ie 6'),
     browserslist(browserslist.defaults.concat(['ie 6']))
   )
 })
 
-it('selects defaults case insensitive', () => {
-  expect(browserslist('Defaults')).toEqual(browserslist(browserslist.defaults))
+test('selects defaults case insensitive', () => {
+  equal(browserslist('Defaults'), browserslist(browserslist.defaults))
 })
 
-it('should respect options', () => {
-  expect(browserslist('defaults', { mobileToDesktop: true })).toEqual(
+test('should respect options', () => {
+  equal(
+    browserslist('defaults', { mobileToDesktop: true }),
     browserslist(browserslist.defaults, { mobileToDesktop: true })
   )
 })
+
+test.run()
diff --git a/test/direct.test.js b/test/direct.test.js
index f3629baa..c5cf1d43 100644
--- a/test/direct.test.js
+++ b/test/direct.test.js
@@ -1,88 +1,95 @@
+let { test } = require('uvu')
+let { equal, throws, is, not } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-it('selects browser by name', () => {
-  expect(browserslist('ie 10')).toEqual(['ie 10'])
+test('selects browser by name', () => {
+  equal(browserslist('ie 10'), ['ie 10'])
 })
 
-it('uses case insensitive aliases', () => {
+test('uses case insensitive aliases', () => {
   let result = browserslist('ie 10')
-  expect(browserslist('Explorer 10')).toEqual(result)
-  expect(browserslist('IE 10')).toEqual(result)
+  equal(browserslist('Explorer 10'), result)
+  equal(browserslist('IE 10'), result)
 })
 
-it('raises on unknown name', () => {
-  expect(() => {
-    browserslist('unknow 10')
-  }).toThrow('Unknown browser unknow')
+test('raises on unknown name', () => {
+  throws(() => browserslist('unknow 10'), 'Unknown browser unknow')
 })
 
-it('raises on unknown version', () => {
-  expect(() => {
-    browserslist('IE 1')
-  }).toThrow('Unknown version 1 of IE')
+test('raises on unknown version', () => {
+  throws(() => browserslist('IE 1'), 'Unknown version 1 of IE')
 })
 
-it('uses right browser name in error', () => {
-  expect(() => {
-    browserslist('chrome 70, ie 11, safari 12.2, safari 12')
-  }).toThrow('Unknown version 12.2 of safari')
+test('uses right browser name in error', () => {
+  throws(
+    () => browserslist('chrome 70, ie 11, safari 12.2, safari 12'),
+    'Unknown version 12.2 of safari'
+  )
 })
 
-it('ignores unknown versions on request', () => {
-  expect(browserslist('IE 1, IE 9', { ignoreUnknownVersions: true })).toEqual([
-    'ie 9'
-  ])
+test('ignores unknown versions on request', () => {
+  equal(browserslist('IE 1, IE 9', { ignoreUnknownVersions: true }), ['ie 9'])
 })
 
-it('works with joined versions from Can I Use', () => {
-  expect(browserslist('ios 7.0')).toEqual(['ios_saf 7.0-7.1'])
-  expect(browserslist('ios 7.1')).toEqual(['ios_saf 7.0-7.1'])
+test('works with joined versions from Can I Use', () => {
+  equal(browserslist('ios 7.0'), ['ios_saf 7.0-7.1'])
+  equal(browserslist('ios 7.1'), ['ios_saf 7.0-7.1'])
 })
 
-it('allows to miss zero in version', () => {
-  expect(browserslist('ios 7')).toEqual(['ios_saf 7.0-7.1'])
-  expect(browserslist('ios 8.0')).toEqual(['ios_saf 8'])
+test('allows to miss zero in version', () => {
+  equal(browserslist('ios 7'), ['ios_saf 7.0-7.1'])
+  equal(browserslist('ios 8.0'), ['ios_saf 8'])
 })
 
-it('supports Safari TP', () => {
-  expect(browserslist('safari tp')).toEqual(['safari TP'])
-  expect(browserslist('Safari TP')).toEqual(['safari TP'])
+test('supports Safari TP', () => {
+  equal(browserslist('safari tp'), ['safari TP'])
+  equal(browserslist('Safari TP'), ['safari TP'])
 })
 
-it('supports Can I Use cutted versions', () => {
-  expect(browserslist('and_uc 10')).toHaveLength(1)
+test('supports Can I Use cutted versions', () => {
+  is(browserslist('and_uc 10').length, 1)
 })
 
-it('supports Can I Use missing mobile versions', () => {
+test('supports Can I Use missing mobile versions', () => {
   let opts = { mobileToDesktop: true }
-  expect(browserslist('chromeandroid 53', opts)).toEqual(['and_chr 53'])
-  expect(browserslist('and_ff 60', opts)).toEqual(['and_ff 60'])
-  expect(browserslist('ie_mob 9', opts)).toEqual(['ie_mob 9'])
-  expect(browserslist('op_mob 30', opts)).toEqual(['op_mob 30'])
-  expect(
-    browserslist('chromeandroid >= 52 and chromeandroid < 54', opts)
-  ).toEqual(['and_chr 53', 'and_chr 52'])
-  expect(browserslist('and_chr 52-53', opts)).toEqual([
-    'and_chr 53',
-    'and_chr 52'
-  ])
-  expect(browserslist('android 4.4-38', opts)).toEqual([
-    'android 38',
-    'android 37',
-    'android 36',
-    'android 4.4.3-4.4.4',
-    'android 4.4'
-  ])
+  equal(browserslist('chromeandroid 53', opts), ['and_chr 53'])
+  equal(browserslist('and_ff 60', opts), ['and_ff 60'])
+  equal(browserslist('ie_mob 9', opts), ['ie_mob 9'])
+  equal(browserslist('op_mob 30', opts), ['op_mob 30'])
+  equal(
+    browserslist('chromeandroid >= 52 and chromeandroid < 54', opts),
+    ['and_chr 53', 'and_chr 52']
+  )
+  equal(
+    browserslist('and_chr 52-53', opts),
+    ['and_chr 53', 'and_chr 52']
+  )
+  equal(
+    browserslist('android 4.4-38', opts),
+    [
+      'android 38',
+      'android 37',
+      'android 36',
+      'android 4.4.3-4.4.4',
+      'android 4.4'
+    ]
+  )
 })
 
-it('missing mobile versions are not aliased by default', () => {
-  expect(browserslist('chromeandroid 53')).not.toEqual(['and_chr 53'])
-  expect(browserslist('and_ff 60')).not.toEqual(['and_ff 60'])
-  expect(() => browserslist('ie_mob 9')).toThrow(/Unknown version 9 of ie_mob/)
-  expect(() => browserslist('op_mob 30')).toThrow(/Unknown version 30/)
+test('missing mobile versions are not aliased by default', () => {
+  not.equal(browserslist('chromeandroid 53'), ['and_chr 53'])
+  not.equal(browserslist('and_ff 60'), ['and_ff 60'])
+  throws(() => browserslist('ie_mob 9'), /Unknown version 9 of ie_mob/)
+  throws(() => browserslist('op_mob 30'), /Unknown version 30/)
 })
 
-it('works for all browsers', () => {
-  let first = browserslist(['> 0%', 'dead'])
-  browserslist(first, { mobileToDesktop: true })
+test('works for all browsers', () => {
+  not.throws(() => {
+    let first = browserslist(['> 0%', 'dead'])
+    browserslist(first, {mobileToDesktop: true})
+  })
 })
+
+test.run()
diff --git a/test/electron.test.js b/test/electron.test.js
index 64fa1c92..fb7ac5f1 100644
--- a/test/electron.test.js
+++ b/test/electron.test.js
@@ -1,73 +1,72 @@
+let { test } = require('uvu')
+let { equal, throws, is } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-it('converts Electron to Chrome', () => {
-  expect(browserslist('electron 1.1')).toEqual(['chrome 50'])
+test('converts Electron to Chrome', () => {
+  equal(browserslist('electron 1.1'), ['chrome 50'])
 })
 
-it('supports Electron Patch versions to Chrome', () => {
-  expect(browserslist('electron 4.0.4')).toEqual(['chrome 69'])
+test('supports Electron Patch versions to Chrome', () => {
+  equal(browserslist('electron 4.0.4'), ['chrome 69'])
 })
 
-it('supports case insensitive Electron name', () => {
-  expect(browserslist('Electron 1.1')).toEqual(['chrome 50'])
+test('supports case insensitive Electron name', () => {
+  equal(browserslist('Electron 1.1'), ['chrome 50'])
 })
 
-it('throws on unknown Electron version', () => {
-  expect(() => {
-    browserslist('electron 0.19')
-  }).toThrow(/Unknown version/)
+test('throws on unknown Electron version', () => {
+  throws(() => browserslist('electron 0.19'), /Unknown version/)
 })
 
-it('converts Electron to Chrome in ranges', () => {
-  expect(browserslist('electron 0.36-1.2')).toEqual([
-    'chrome 51',
-    'chrome 50',
-    'chrome 49',
-    'chrome 47'
-  ])
+test('converts Electron to Chrome in ranges', () => {
+  equal(
+    browserslist('electron 0.36-1.2'),
+    [
+      'chrome 51',
+      'chrome 50',
+      'chrome 49',
+      'chrome 47'
+    ]
+  )
 })
 
-it('ignores case in Electron ranges', () => {
-  expect(browserslist('Electron 0.37-1.0')).toEqual(['chrome 49'])
+test('ignores case in Electron ranges', () => {
+  equal(browserslist('Electron 0.37-1.0'), ['chrome 49'])
 })
 
-it('supports patch versions in Electron ranges', () => {
-  expect(browserslist('Electron 0.37.5-1.0.3')).toEqual(['chrome 49'])
+test('supports patch versions in Electron ranges', () => {
+  equal(browserslist('Electron 0.37.5-1.0.3'), ['chrome 49'])
 })
 
-it('throws on unknown Electron range version', () => {
-  expect(() => {
-    browserslist('electron 0.1-1.2')
-  }).toThrow(/Unknown version/)
-  expect(() => {
-    browserslist('electron 0.37-999')
-  }).toThrow(/Unknown version/)
+test('throws on unknown Electron range version', () => {
+  throws(() => browserslist('electron 0.1-1.2'), /Unknown version/)
+  throws(() => browserslist('electron 0.37-999'), /Unknown version/)
 })
 
-it('converts Electron versions to Chrome', () => {
-  expect(browserslist('electron <= 0.21')).toEqual(['chrome 41', 'chrome 39'])
+test('converts Electron versions to Chrome', () => {
+  equal(browserslist('electron <= 0.21'), ['chrome 41', 'chrome 39'])
 })
 
-it('ignores case in Electron versions', () => {
-  expect(browserslist('Electron < 0.21')).toEqual(['chrome 39'])
+test('ignores case in Electron versions', () => {
+  equal(browserslist('Electron < 0.21'), ['chrome 39'])
 })
 
-it('converts Electron patch versions to Chrome', () => {
-  expect(browserslist('Electron < 0.21.5')).toEqual(['chrome 39'])
+test('converts Electron patch versions to Chrome', () => {
+  equal(browserslist('Electron < 0.21.5'), ['chrome 39'])
 })
 
-it('supports last versions for Electron', () => {
-  expect(
-    browserslist('last 2 Electron versions').length
-  ).toBeGreaterThanOrEqual(1)
+test('supports last versions for Electron', () => {
+  is(browserslist('last 2 Electron versions').length >= 1, true)
 })
 
-it('supports last major versions for Electron', () => {
-  expect(
-    browserslist('last 2 Electron major versions').length
-  ).toBeGreaterThanOrEqual(1)
+test('supports last major versions for Electron', () => {
+  is(browserslist('last 2 Electron major versions').length >= 1, true)
 })
 
-it('supports unreleased versions for Electron', () => {
-  expect(browserslist('unreleased Electron versions')).toHaveLength(0)
+test('supports unreleased versions for Electron', () => {
+  is(browserslist('unreleased Electron versions').length, 0)
 })
+
+test.run()
diff --git a/test/error.test.js b/test/error.test.js
index ea13941a..eea1c5b6 100644
--- a/test/error.test.js
+++ b/test/error.test.js
@@ -1,17 +1,22 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
 let BrowserslistError = require('../error')
 
 let originCapture = Error.captureStackTrace
-afterEach(() => {
+test.after.each(() => {
   Error.captureStackTrace = originCapture
 })
 
-it('sets stack', () => {
+test('sets stack', () => {
   let error = new BrowserslistError('test')
-  expect(typeof error.stack).toEqual('string')
+  equal(typeof error.stack, 'string')
 })
 
-it('works in Firefox', () => {
+test('works in Firefox', () => {
   Error.captureStackTrace = undefined
   let error = new BrowserslistError('test')
-  expect(error.stack).toBeUndefined()
+  equal(error.stack, undefined)
 })
+
+test.run()
diff --git a/test/esr.test.js b/test/esr.test.js
index 9bc4d21f..3a599f30 100644
--- a/test/esr.test.js
+++ b/test/esr.test.js
@@ -1,14 +1,20 @@
+let { test } = require('uvu')
+let { equal, is } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-it('selects Firefox ESR', () => {
+test('selects Firefox ESR', () => {
   let versions = browserslist('Firefox ESR')
-  expect(versions.length).toBeGreaterThanOrEqual(1)
-  expect(versions.every(i => /^firefox \d+$/.test(i))).toBe(true)
+  is(versions.length >= 1, true)
+  is(versions.every(i => /^firefox \d+$/.test(i)), true)
 })
 
-it('uses case insensitive aliases', () => {
+test('uses case insensitive aliases', () => {
   let result = browserslist('Firefox ESR')
-  expect(browserslist('firefox esr')).toEqual(result)
-  expect(browserslist('ff esr')).toEqual(result)
-  expect(browserslist('fx esr')).toEqual(result)
+  equal(browserslist('firefox esr'), result)
+  equal(browserslist('ff esr'), result)
+  equal(browserslist('fx esr'), result)
 })
+
+test.run()
diff --git a/test/extends.test.js b/test/extends.test.js
index 7f1ebf5c..83d27f4b 100644
--- a/test/extends.test.js
+++ b/test/extends.test.js
@@ -1,6 +1,9 @@
+let { test } = require('uvu')
+let { equal, throws } = require('uvu/assert')
 let { ensureDir, writeFile, remove } = require('fs-extra')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let mocked = []
@@ -13,131 +16,138 @@ async function mock(name, exports) {
   await writeFile(join(dir, 'index.js'), content)
 }
 
-afterEach(async () => {
+test.after.each(async () => {
   await Promise.all(mocked.map(dir => remove(dir)))
   mocked = []
   delete process.env.BROWSERSLIST_DANGEROUS_EXTEND
 })
 
-it('uses package', async () => {
+test('uses package', async () => {
   await mock('browserslist-config-test', ['ie 11'])
   let result = browserslist(['extends browserslist-config-test', 'ie 6'])
-  expect(result).toEqual(['ie 11', 'ie 6'])
+  equal(result, ['ie 11', 'ie 6'])
 })
 
-it('uses file in package', async () => {
+test('uses file in package', async () => {
   await mock('browserslist-config-test/ie', ['ie 11'])
   let result = browserslist(['extends browserslist-config-test/ie'])
-  expect(result).toEqual(['ie 11'])
+  equal(result, ['ie 11'])
 })
 
-it('works with non-prefixed package with dangerousExtend', async () => {
+test('works with non-prefixed package with dangerousExtend', async () => {
   await mock('pkg', ['ie 11'])
   let result = browserslist(['extends pkg', 'edge 12'], {
     dangerousExtend: true
   })
-  expect(result).toEqual(['edge 12', 'ie 11'])
+  equal(result, ['edge 12', 'ie 11'])
 })
 
-it('supports BROWSERSLIST_DANGEROUS_EXTEND', async () => {
+test('supports BROWSERSLIST_DANGEROUS_EXTEND', async () => {
   process.env.BROWSERSLIST_DANGEROUS_EXTEND = '1'
   await mock('pkg', ['ie 11'])
   let result = browserslist(['extends pkg', 'edge 12'])
-  expect(result).toEqual(['edge 12', 'ie 11'])
+  equal(result, ['edge 12', 'ie 11'])
 })
 
-it('handles scoped packages', async () => {
+test('handles scoped packages', async () => {
   await mock('@scope/browserslist-config-test', ['ie 11'])
   let result = browserslist(['extends @scope/browserslist-config-test'])
-  expect(result).toEqual(['ie 11'])
+  equal(result, ['ie 11'])
 })
 
-it('handles scoped packages with a dot in the name', async () => {
+test('handles scoped packages with a dot in the name', async () => {
   await mock('@example.com/browserslist-config-test', ['ie 11'])
   let result = browserslist(['extends @example.com/browserslist-config-test'])
-  expect(result).toEqual(['ie 11'])
+  equal(result, ['ie 11'])
 })
 
-it('handles file in scoped packages', async () => {
+test('handles file in scoped packages', async () => {
   await mock('@scope/browserslist-config-test/ie', ['ie 11'])
   let result = browserslist(['extends @scope/browserslist-config-test/ie'])
-  expect(result).toEqual(['ie 11'])
+  equal(result, ['ie 11'])
 })
 
-it('handles file-less scoped packages', async () => {
+test('handles file-less scoped packages', async () => {
   await mock('@scope/browserslist-config', ['ie 11'])
   let result = browserslist(['extends @scope/browserslist-config'])
-  expect(result).toEqual(['ie 11'])
+  equal(result, ['ie 11'])
 })
 
-it('recursively imports configs', async () => {
+test('recursively imports configs', async () => {
   await Promise.all([
     mock('browserslist-config-a', ['extends browserslist-config-b', 'ie 9']),
     mock('browserslist-config-b', ['ie 10'])
   ])
   let result = browserslist(['extends browserslist-config-a'])
-  expect(result).toEqual(['ie 10', 'ie 9'])
+  equal(result, ['ie 10', 'ie 9'])
 })
 
-it('handles relative queries with local overrides', async () => {
+test('handles relative queries with local overrides', async () => {
   await mock('browserslist-config-rel', ['ie 9-10'])
   let result = browserslist(['extends browserslist-config-rel', 'not ie 9'])
-  expect(result).toEqual(['ie 10'])
+  equal(result, ['ie 10'])
 })
 
-it('throws on external package with empty export', async () => {
+test('throws on external package with empty export', async () => {
   await mock('browserslist-config-wrong', 'some string')
-  expect(() => {
-    browserslist(['extends browserslist-config-wrong'])
-  }).toThrow(/not an array of queries or an object/)
+  throws(
+    () => browserslist(['extends browserslist-config-wrong']),
+    /not an array of queries or an object/
+  )
 })
 
-it('throws when package does not have browserslist-config- prefix', () => {
-  expect(() => {
-    browserslist(['extends thing-without-prefix'])
-  }).toThrow(/needs `browserslist-config-` prefix/)
+test('throws when package does not have browserslist-config- prefix', () => {
+  throws(
+    () => browserslist(['extends thing-without-prefix']),
+    /needs `browserslist-config-` prefix/
+  )
 })
 
-it('throws when extends package has dot in path', () => {
-  expect(() => {
-    browserslist(['extends browserslist-config-package/../something'])
-  }).toThrow(/`.` not allowed/)
+test('throws when extends package has dot in path', () => {
+  throws(
+    () => browserslist(['extends browserslist-config-package/../something']),
+    /`.` not allowed/
+  )
 })
 
-it('throws when extends package has node_modules in path', () => {
-  expect(() => {
-    browserslist(['extends browserslist-config-test/node_modules/a'])
-  }).toThrow(/`node_modules` not allowed/)
+test('throws when extends package has node_modules in path', () => {
+  throws(
+    () => browserslist(['extends browserslist-config-test/node_modules/a']),
+    /`node_modules` not allowed/
+  )
 })
 
-it("works with shareable config doesn't contains defaults env", async () => {
+test("works with shareable config doesn't contains defaults env", async () => {
   await mock('browserslist-config-with-env-a', {
     someEnv: ['ie 10']
   })
   let result = browserslist(['extends browserslist-config-with-env-a'])
-  expect(result).toEqual([])
+  equal(result, [])
 })
 
-it('works with shareable config contains env', async () => {
+test('works with shareable config contains env', async () => {
   process.env.NODE_ENV = 'someEnv'
   await mock('browserslist-config-with-env-b', {
     someEnv: ['ie 10']
   })
   let result = browserslist(['extends browserslist-config-with-env-b'])
-  expect(result).toEqual(['ie 10'])
+  equal(result, ['ie 10'])
 })
 
-it('works with shareable config contains defaults env', async () => {
+test('works with shareable config contains defaults env', async () => {
   await mock('browserslist-config-with-defaults', {
     defaults: ['ie 10']
   })
   let result = browserslist(['extends browserslist-config-with-defaults'])
-  expect(result).toEqual(['ie 10'])
+  equal(result, ['ie 10'])
 })
 
-it('throws when external package resolve to nullable', async () => {
+test('throws when external package resolve to nullable', async () => {
   await mock('browserslist-config-null', null)
-  expect(() => {
-    browserslist(['extends browserslist-config-null'])
-  }).toThrow(/config exports not an array/)
+  throws(
+    () => browserslist(['extends browserslist-config-null']),
+    /config exports not an array/
+  )
 })
+
+test.run()
diff --git a/test/feature.test.js b/test/feature.test.js
index ff9fda33..44b91aca 100644
--- a/test/feature.test.js
+++ b/test/feature.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { equal, is } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let originCache = browserslist.cache
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.cache = {}
   browserslist.data.and_chr = {
     name: 'and_chr',
@@ -12,15 +16,15 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.cache = originCache
 })
 
-it('load features from Can I Use', () => {
-  expect(browserslist('supports objectrtc').length > 0).toBe(true)
+test('load features from Can I Use', () => {
+  is(browserslist('supports objectrtc').length > 0, true)
 })
 
-it('selects browsers by feature', () => {
+test('selects browsers by feature', () => {
   browserslist.cache = {
     rtcpeerconnection: {
       'and_chr 81': 'y',
@@ -28,10 +32,10 @@ it('selects browsers by feature', () => {
     }
   }
 
-  expect(browserslist('supports rtcpeerconnection')).toEqual(['and_chr 81'])
+  equal(browserslist('supports rtcpeerconnection'), ['and_chr 81'])
 })
 
-it('selects browsers by feature with dashes in its name', () => {
+test('selects browsers by feature with dashes in its name', () => {
   browserslist.cache = {
     'arrow-functions': {
       'and_chr 81': 'y',
@@ -39,5 +43,7 @@ it('selects browsers by feature with dashes in its name', () => {
     }
   }
 
-  expect(browserslist('supports arrow-functions')).toEqual(['and_chr 81'])
+  equal(browserslist('supports arrow-functions'), ['and_chr 81'])
 })
+
+test.run()
diff --git a/test/global.test.js b/test/global.test.js
index ce7e9a91..6d29cb93 100644
--- a/test/global.test.js
+++ b/test/global.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let originUsage = browserslist.usage
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.usage = {
     global: {
       'ie 8': 1,
@@ -13,38 +17,40 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.usage = originUsage
 })
 
-it('selects browsers by popularity', () => {
-  expect(browserslist('> 10%')).toEqual(['ie 11', 'ie 10'])
+test('selects browsers by popularity', () => {
+  equal(browserslist('> 10%'), ['ie 11', 'ie 10'])
 })
 
-it('selects popularity by more or equal', () => {
-  expect(browserslist('>= 5%')).toEqual(['ie 11', 'ie 10', 'ie 9'])
+test('selects popularity by more or equal', () => {
+  equal(browserslist('>= 5%'), ['ie 11', 'ie 10', 'ie 9'])
 })
 
-it('selects browsers by unpopularity', () => {
-  expect(browserslist('< 5%')).toEqual(['ie 8'])
+test('selects browsers by unpopularity', () => {
+  equal(browserslist('< 5%'), ['ie 8'])
 })
 
-it('selects unpopularity by less or equal', () => {
-  expect(browserslist('<= 5%')).toEqual(['ie 9', 'ie 8'])
+test('selects unpopularity by less or equal', () => {
+  equal(browserslist('<= 5%'), ['ie 9', 'ie 8'])
 })
 
-it('accepts non-space query', () => {
-  expect(browserslist('>10%')).toEqual(['ie 11', 'ie 10'])
+test('accepts non-space query', () => {
+  equal(browserslist('>10%'), ['ie 11', 'ie 10'])
 })
 
-it('works with float', () => {
-  expect(browserslist('> 10.2%')).toEqual(['ie 11'])
+test('works with float', () => {
+  equal(browserslist('> 10.2%'), ['ie 11'])
 })
 
-it('works with float that has a leading dot', () => {
-  expect(browserslist('> .2%')).toEqual(['ie 11', 'ie 10', 'ie 9', 'ie 8'])
+test('works with float that has a leading dot', () => {
+  equal(browserslist('> .2%'), ['ie 11', 'ie 10', 'ie 9', 'ie 8'])
 })
 
-it('allows omission of the space between the > and the percentage', () => {
-  expect(browserslist('>10%')).toEqual(['ie 11', 'ie 10'])
+test('allows omission of the space between the > and the percentage', () => {
+  equal(browserslist('>10%'), ['ie 11', 'ie 10'])
 })
+
+test.run()
diff --git a/test/last.test.js b/test/last.test.js
index 32eac510..cc69db14 100644
--- a/test/last.test.js
+++ b/test/last.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-let originData = browserslist.data
+let originData = { ...browserslist.data }
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.data = {
     ie: {
       name: 'ie',
@@ -43,53 +47,69 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.data = originData
 })
 
-it('selects versions of each browser', () => {
-  expect(browserslist('last 2 versions')).toEqual([
-    'android 67',
-    'bb 8',
-    'chrome 39',
-    'chrome 38',
-    'edge 12',
-    'ie 11',
-    'ie 10'
-  ])
+test('selects versions of each browser', () => {
+  let res = browserslist('last 2 versions', undefined, true)
+
+  equal(
+    res,
+    [
+      'android 67',
+      'bb 8',
+      'chrome 39',
+      'chrome 38',
+      'edge 12',
+      'ie 11',
+      'ie 10'
+    ]
+  )
 })
 
-it('has special logic for android', () => {
-  expect(browserslist('last 31 versions')).toEqual([
-    'android 67',
-    'android 4.4.3-4.4.4',
-    'bb 8',
-    'chrome 39',
-    'chrome 38',
-    'chrome 37',
-    'edge 12',
-    'ie 11',
-    'ie 10',
-    'ie 9'
-  ])
+test('has special logic for android', () => {
+  equal(
+    browserslist('last 31 versions'),
+    [
+      'android 67',
+      'android 4.4.3-4.4.4',
+      'bb 8',
+      'chrome 39',
+      'chrome 38',
+      'chrome 37',
+      'edge 12',
+      'ie 11',
+      'ie 10',
+      'ie 9'
+    ]
+  )
 })
 
-it('supports pluralization', () => {
-  expect(browserslist('last 1 version')).toEqual([
-    'android 67',
-    'bb 8',
-    'chrome 39',
-    'edge 12',
-    'ie 11'
-  ])
+test('supports pluralization', () => {
+  equal(
+    browserslist('last 1 version'),
+      [
+      'android 67',
+      'bb 8',
+      'chrome 39',
+      'edge 12',
+      'ie 11'
+    ]
+  )
 })
 
-it('is case insensitive', () => {
-  expect(browserslist('Last 01 Version')).toEqual([
-    'android 67',
-    'bb 8',
-    'chrome 39',
-    'edge 12',
-    'ie 11'
-  ])
+test('is case insensitive', () => {
+  equal(
+    browserslist('Last 01 Version'),
+    [
+      'android 67',
+      'bb 8',
+      'chrome 39',
+      'edge 12',
+      'ie 11'
+    ]
+  )
 })
+
+test.run()
diff --git a/test/main.test.js b/test/main.test.js
index 81d18417..9a94c730 100644
--- a/test/main.test.js
+++ b/test/main.test.js
@@ -1,7 +1,13 @@
+delete require.cache[require.resolve('..')]
+
+let { test } = require('uvu')
+let { equal, throws, is, type, not } = require('uvu/assert')
 let path = require('path')
 
+let { spyOn } = require('./utils')
 let browserslist = require('..')
 
+
 let IE = path.join(__dirname, 'fixtures', 'explorers')
 let FILE = path.join(__dirname, 'fixtures', 'dir', 'test.css')
 let LINK = path.join(__dirname, 'fixtures', 'symlink')
@@ -10,262 +16,252 @@ let STRING = path.join(__dirname, 'fixtures', 'string', 'package.json')
 let PACKAGE = path.join(__dirname, 'fixtures', 'env-package', 'package.json')
 
 let DEFAULTS = browserslist(browserslist.defaults)
-
-afterEach(() => {
+let origLoadConfig = browserslist.loadConfig
+test.after.each(() => {
   process.env.NODE_ENV = 'test'
   delete process.env.BROWSERSLIST
   delete process.env.BROWSERSLIST_CONFIG
   delete process.env.BROWSERSLIST_ENV
+  browserslist.loadConfig = origLoadConfig
 })
 
-it('accepts array', () => {
-  expect(browserslist(['ie 11', 'ie 10'])).toEqual(['ie 11', 'ie 10'])
+test('accepts array', () => {
+  equal(browserslist(['ie 11', 'ie 10']), ['ie 11', 'ie 10'])
 })
 
-it('accepts string', () => {
-  expect(browserslist('ie 11, ie 10')).toEqual(['ie 11', 'ie 10'])
+test('accepts string', () => {
+  equal(browserslist('ie 11, ie 10'), ['ie 11', 'ie 10'])
 })
 
-it('trims queries', () => {
-  expect(browserslist(['ie 11 ', ' ie 10'])).toEqual(['ie 11', 'ie 10'])
-  expect(browserslist('ie 11 , ie 10')).toEqual(['ie 11', 'ie 10'])
+test('trims queries', () => {
+  equal(browserslist(['ie 11 ', ' ie 10']), ['ie 11', 'ie 10'])
+  equal(browserslist('ie 11 , ie 10'), ['ie 11', 'ie 10'])
 })
 
-it('does not accept non-string and non-array parameters', () => {
-  expect(() => browserslist({})).toThrow(/an array or string. Got object/)
+test('does not accept non-string and non-array parameters', () => {
+  throws(() => browserslist({}), /an array or string. Got object/)
 })
 
-it('returns unique array', () => {
-  expect(browserslist('ie 10, ie 10')).toEqual(['ie 10'])
+test('returns unique array', () => {
+  equal(browserslist('ie 10, ie 10'), ['ie 10'])
 })
 
-it('returns empty result', () => {
-  expect(browserslist([])).toEqual([])
-  expect(browserslist('')).toEqual([])
+test('returns empty result', () => {
+  equal(browserslist([]), [])
+  equal(browserslist(''), [])
 })
 
-it('uses environment variable on empty request', () => {
+test('uses environment variable on empty request', () => {
   process.env.BROWSERSLIST = 'ie 10'
-  expect(browserslist(null, { path: FILE })).toEqual(['ie 10'])
+  equal(browserslist(null, { path: FILE }), ['ie 10'])
 })
 
-it('reads config on no variable', () => {
-  expect(browserslist(null, { path: FILE })).toEqual(['ie 11', 'ie 10'])
+test('reads config on no variable', () => {
+  equal(browserslist(null, { path: FILE }), ['ie 11', 'ie 10'])
 })
 
-it('reads config by direct path', () => {
-  expect(browserslist(null, { config: IE })).toEqual(['ie 9', 'ie 8'])
+test('reads config by direct path', () => {
+  equal(browserslist(null, { config: IE }), ['ie 9', 'ie 8'])
 })
 
-it('reads package.json config by direct path', () => {
-  expect(browserslist(null, { config: PACKAGE, env: 'development' })).toEqual([
-    'chrome 55',
-    'firefox 50'
-  ])
+test('reads package.json config by direct path', () => {
+  equal(
+    browserslist(null, { config: PACKAGE, env: 'development' }),
+    ['chrome 55', 'firefox 50']
+  )
 })
 
-it('reads package.json config with one string', () => {
-  expect(browserslist(null, { config: STRING })).toEqual(['ie 9', 'ie 8'])
+test('reads package.json config with one string', () => {
+  equal(browserslist(null, { config: STRING }), ['ie 9', 'ie 8'])
 })
 
-it('reads config by direct path in environment variable', () => {
+test('reads config by direct path in environment variable', () => {
   process.env.BROWSERSLIST_CONFIG = IE
-  expect(browserslist(null, { path: FILE })).toEqual(['ie 9', 'ie 8'])
+  equal(browserslist(null, { path: FILE }), ['ie 9', 'ie 8'])
 })
 
-it('handles undefined stats and path correctly', () => {
+test('handles undefined stats and path correctly', () => {
   let config = { stats: undefined, path: undefined }
-  expect(browserslist([], config)).toEqual([])
+  equal(browserslist([], config), [])
 })
 
-it('throw a error on wrong path to config', () => {
-  expect(() => {
-    browserslist(null, { config: IE + '2' })
-  }).toThrow(/Can't read/)
+test('throw a error on wrong path to config', () => {
+  throws(() => browserslist(null, { config: IE + '2' }), /Can't read/)
 })
 
 if (!/^win/.test(process.platform)) {
-  it('reads config by symlink', () => {
-    expect(browserslist(null, { config: LINK })).toEqual(['ie 9', 'ie 8'])
+  test('reads config by symlink', () => {
+    equal(browserslist(null, { config: LINK }), ['ie 9', 'ie 8'])
   })
 }
 
-it('has default selection', () => {
-  expect(browserslist.defaults.length > 0).toBe(true)
+test('has default selection', () => {
+  is(browserslist.defaults.length > 0, true)
 })
 
-it('uses default selection on empty request and no config', () => {
-  expect(browserslist()).toEqual(DEFAULTS)
+test('uses default selection on empty request and no config', () => {
+  equal(browserslist(), DEFAULTS)
 })
 
-it('uses current dir on undefined path', () => {
-  jest.spyOn(browserslist, 'loadConfig')
-  expect(browserslist(undefined, { path: undefined })).toEqual(DEFAULTS)
-  expect(browserslist.loadConfig).toHaveBeenCalledWith({ path: process.cwd() })
+test('uses current dir on undefined path', () => {
+  spyOn(browserslist, 'loadConfig')
+
+  equal(browserslist(undefined, { path: undefined }), DEFAULTS)
+
+  is(browserslist.loadConfig.called, true)
+  equal(browserslist.loadConfig.callArgs, [{ path: process.cwd() }])
 })
 
-it('uses default selection on disabled path', () => {
-  jest.spyOn(browserslist, 'loadConfig')
-  expect(browserslist(null, { path: false })).toEqual(DEFAULTS)
-  expect(browserslist.loadConfig).toHaveBeenCalledWith({ path: false })
+test('uses default selection on disabled path', () => {
+  spyOn(browserslist, 'loadConfig')
+
+  equal(browserslist(null, { path: false }), DEFAULTS)
+  is(browserslist.loadConfig.called, true)
+  equal(browserslist.loadConfig.callArgs, [{ path: false }])
 })
 
-it('raises on unknow query', () => {
-  expect(() => {
-    browserslist('good')
-  }).toThrow('Unknown browser query `good`')
-  expect(() => {
-    browserslist('IE === 9')
-  }).toThrow('Unknown browser query `IE === 9`')
+test('raises on unknow query', () => {
+  throws(() => browserslist('good'), 'Unknown browser query `good`')
+  throws(() => browserslist('IE === 9'), 'Unknown browser query `IE === 9`')
 })
 
-it('raises on missed version', () => {
-  expect(() => {
-    browserslist('IE')
-  }).toThrow('Specify versions in Browserslist query for browser IE')
+test('raises on missed version', () => {
+  throws(() => browserslist('IE'), 'Specify versions in Browserslist query for browser IE')
 })
 
-it('sorts browsers', () => {
-  expect(browserslist(['ff 10', 'ie 11', 'ie 6', 'ie 10', 'ff 9'])).toEqual([
-    'firefox 10',
-    'firefox 9',
-    'ie 11',
-    'ie 10',
-    'ie 6'
-  ])
+test('sorts browsers', () => {
+  equal(
+    browserslist(['ff 10', 'ie 11', 'ie 6', 'ie 10', 'ff 9']),
+    [
+      'firefox 10',
+      'firefox 9',
+      'ie 11',
+      'ie 10',
+      'ie 6'
+    ]
+  )
 })
 
-it('sorts browsers with version ranges', () => {
-  expect(browserslist(['ios_saf 7', 'ie 11', 'ie 6', 'ios_saf 10'])).toEqual([
-    'ie 11',
-    'ie 6',
-    'ios_saf 10.0-10.2',
-    'ios_saf 7.0-7.1'
-  ])
+test('sorts browsers with version ranges', () => {
+  equal(
+    browserslist(['ios_saf 7', 'ie 11', 'ie 6', 'ios_saf 10']),
+    [
+      'ie 11',
+      'ie 6',
+      'ios_saf 10.0-10.2',
+      'ios_saf 7.0-7.1'
+    ]
+  )
 })
 
-it('throws custom error', () => {
+test('throws custom error', () => {
   let error
   try {
     browserslist('wrong')
   } catch (e) {
     if (e instanceof Error) error = e
   }
-  expect(error.name).toEqual('BrowserslistError')
-  expect(typeof error.stack).toEqual('string')
+  equal(error.name, 'BrowserslistError')
+  type(error.stack, 'string')
 })
 
-it('excludes queries', () => {
-  expect(browserslist(['ie >= 9', 'not ie 11', 'not ie 10', 'ie 10'])).toEqual([
-    'ie 10',
-    'ie 9'
-  ])
+test('excludes queries', () => {
+  equal(
+    browserslist(['ie >= 9', 'not ie 11', 'not ie 10', 'ie 10']),
+    ['ie 10', 'ie 9']
+  )
 })
 
-it('excludes queries for 0 version', () => {
+test('excludes queries for 0 version', () => {
   let browsers = browserslist(['> 1% in US', 'not last 2 and_chr versions'])
   let android = browsers.filter(i => i.indexOf('and_chr ') !== -1)
-  expect(android).toHaveLength(0)
+  is(android.length, 0)
 })
 
-it('excludes queries for all version', () => {
+test('excludes queries for all version', () => {
   let browsers = browserslist(['> 0% in US', 'not last 1 op_mini versions'])
   let operaMini = browsers.filter(i => i.indexOf('op_mini ') !== -1)
-  expect(operaMini).toHaveLength(0)
+  is(operaMini.length, 0)
 })
 
-it('has actual browsers list in docs', () => {
+test('has actual browsers list in docs', () => {
   let names = browserslist(['last 1 version']).map(i => i.split(' ')[0])
-  expect(names).toEqual([
-    'and_chr',
-    'and_ff',
-    'and_qq',
-    'and_uc',
-    'android',
-    'baidu',
-    'bb',
-    'chrome',
-    'edge',
-    'firefox',
-    'ie',
-    'ie_mob',
-    'ios_saf',
-    'kaios',
-    'op_mini',
-    'op_mob',
-    'opera',
-    'safari',
-    'samsung'
-  ])
-})
-
-it('throws error on first exclude query', () => {
-  expect(() => {
-    browserslist(['not ie 11'])
-  }).toThrow(
+  equal(
+    names,
+    [
+      'and_chr',
+      'and_ff',
+      'and_qq',
+      'and_uc',
+      'android',
+      'baidu',
+      'bb',
+      'chrome',
+      'edge',
+      'firefox',
+      'ie',
+      'ie_mob',
+      'ios_saf',
+      'kaios',
+      'op_mini',
+      'op_mob',
+      'opera',
+      'safari',
+      'samsung'
+    ]
+  )
+})
+
+test('throws error on first exclude query', () => {
+  throws(
+    () => browserslist(['not ie 11']),
     'Write any browsers query (for instance, `defaults`) ' +
       'before `not ie 11`'
   )
 })
 
-it('cleans 0 version', () => {
-  expect(browserslist(['> 0%', '> 0% in FI'])).not.toContain('and_chr 0')
+test('cleans 0 version', () => {
+  not.match(browserslist(['> 0%', '> 0% in FI']), 'and_chr 0')
 })
 
-it('uses env options to browserlist config', () => {
-  expect(browserslist(null, { path: CONFIG, env: 'production' })).toEqual([
-    'ie 9',
-    'opera 41'
-  ])
+test('uses env options to browserlist config', () => {
+  equal(
+    browserslist(null, { path: CONFIG, env: 'production' }),
+    ['ie 9', 'opera 41']
+  )
 
-  expect(browserslist(null, { path: CONFIG, env: 'staging' })).toEqual([
-    'ie 9',
-    'opera 41'
-  ])
+  equal(browserslist(null, { path: CONFIG, env: 'staging' }), ['ie 9', 'opera 41'])
 
-  expect(browserslist(null, { path: CONFIG, env: 'development' })).toEqual([
-    'chrome 55',
-    'firefox 50'
-  ])
+  equal(browserslist(null, { path: CONFIG, env: 'development' }), ['chrome 55', 'firefox 50'])
 
-  expect(browserslist(null, { path: CONFIG, env: 'test' })).toEqual([
-    'ie 11',
-    'ie 10'
-  ])
+  equal(browserslist(null, { path: CONFIG, env: 'test' }), ['ie 11', 'ie 10'])
 })
 
-it('uses env options to package.json', () => {
-  expect(browserslist(null, { path: PACKAGE, env: 'production' })).toEqual([
-    'ie 9',
-    'opera 41'
-  ])
+test('uses env options to package.json', () => {
+  equal(browserslist(null, { path: PACKAGE, env: 'production' }), ['ie 9', 'opera 41'])
 
-  expect(browserslist(null, { path: PACKAGE, env: 'development' })).toEqual([
-    'chrome 55',
-    'firefox 50'
-  ])
+  equal(browserslist(null, { path: PACKAGE, env: 'development' }), ['chrome 55', 'firefox 50'])
 
-  expect(browserslist(null, { path: PACKAGE, env: 'test' })).toEqual(DEFAULTS)
+  equal(browserslist(null, { path: PACKAGE, env: 'test' }), DEFAULTS)
 })
 
-it('uses NODE_ENV to get environment', () => {
+test('uses NODE_ENV to get environment', () => {
   process.env.NODE_ENV = 'test'
-  expect(browserslist(null, { path: CONFIG })).toEqual(['ie 11', 'ie 10'])
+  equal(browserslist(null, { path: CONFIG }), ['ie 11', 'ie 10'])
 })
 
-it('uses BROWSERSLIST_ENV to get environment', () => {
+test('uses BROWSERSLIST_ENV to get environment', () => {
   process.env.BROWSERSLIST_ENV = 'development'
-  expect(browserslist(null, { path: CONFIG })).toEqual([
-    'chrome 55',
-    'firefox 50'
-  ])
+  equal(browserslist(null, { path: CONFIG }), ['chrome 55', 'firefox 50'])
 })
 
-it('uses production environment by default', () => {
+test('uses production environment by default', () => {
   delete process.env.NODE_ENV
-  expect(browserslist(null, { path: CONFIG })).toEqual(['ie 9', 'opera 41'])
+  equal(browserslist(null, { path: CONFIG }), ['ie 9', 'opera 41'])
 })
 
-it('correctly works with not and one-version browsers', () => {
-  expect(browserslist('last 1 Baidu version, not <2% in AT')).toHaveLength(0)
+test('correctly works with not and one-version browsers', () => {
+  is(browserslist('last 1 Baidu version, not <2% in AT').length, 0)
 })
+
+test.run()
diff --git a/test/major.test.js b/test/major.test.js
index 19b5a221..a66678b8 100644
--- a/test/major.test.js
+++ b/test/major.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-let originData = browserslist.data
+let originData = { ...browserslist.data }
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.data = {
     ie: {
       name: 'ie',
@@ -43,72 +47,92 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.data = originData
 })
 
-it('selects versions of each browser', () => {
-  expect(browserslist('last 2 major versions')).toEqual([
-    'android 39',
-    'bb 10',
-    'bb 8',
-    'chrome 39',
-    'chrome 38',
-    'edge 12',
-    'edge 11.1',
-    'edge 11.0.1',
-    'ie 11',
-    'ie 10'
-  ])
+test('selects versions of each browser', () => {
+  equal(
+    browserslist('last 2 major versions'),
+    [
+      'android 39',
+      'bb 10',
+      'bb 8',
+      'chrome 39',
+      'chrome 38',
+      'edge 12',
+      'edge 11.1',
+      'edge 11.0.1',
+      'ie 11',
+      'ie 10'
+    ]
+  )
 })
 
-it('supports pluralization', () => {
-  expect(browserslist('last 1 major version')).toEqual([
-    'android 39',
-    'bb 10',
-    'chrome 39',
-    'edge 12',
-    'ie 11'
-  ])
+test('supports pluralization', () => {
+  equal(
+    browserslist('last 1 major version'),
+    [
+      'android 39',
+      'bb 10',
+      'chrome 39',
+      'edge 12',
+      'ie 11'
+    ]
+  )
 })
 
-it('is case insensitive', () => {
-  expect(browserslist('Last 01 MaJoR Version')).toEqual([
-    'android 39',
-    'bb 10',
-    'chrome 39',
-    'edge 12',
-    'ie 11'
-  ])
+test('is case insensitive', () => {
+  equal(
+    browserslist('Last 01 MaJoR Version'),
+    [
+      'android 39',
+      'bb 10',
+      'chrome 39',
+      'edge 12',
+      'ie 11'
+    ]
+  )
 })
 
-it('selects versions of a single browser', () => {
-  expect(browserslist('last 2 edge major versions')).toEqual([
-    'edge 12',
-    'edge 11.1',
-    'edge 11.0.1'
-  ])
-  expect(browserslist('last 1 bb major version')).toEqual(['bb 10'])
-  expect(browserslist('last 3 Chrome major versions')).toEqual([
-    'chrome 39',
-    'chrome 38',
-    'chrome 37'
-  ])
-  expect(browserslist('last 2 android major versions')).toEqual(['android 39'])
+test('selects versions of a single browser', () => {
+  equal(
+    browserslist('last 2 edge major versions'),
+    [
+      'edge 12',
+      'edge 11.1',
+      'edge 11.0.1'
+    ]
+  )
+  equal(browserslist('last 1 bb major version'), ['bb 10'])
+  equal(
+    browserslist('last 3 Chrome major versions'),
+    [
+      'chrome 39',
+      'chrome 38',
+      'chrome 37'
+    ]
+  )
+  equal(browserslist('last 2 android major versions'), ['android 39'])
 })
 
-it('supports non-sequential version numbers', () => {
-  expect(browserslist('last 2 bb major versions')).toEqual(['bb 10', 'bb 8'])
+test('supports non-sequential version numbers', () => {
+  equal(browserslist('last 2 bb major versions'), ['bb 10', 'bb 8'])
 })
 
-it('supports more versions than have been released', () => {
-  expect(browserslist('last 3 bb major versions')).toEqual(['bb 10', 'bb 8'])
+test('supports more versions than have been released', () => {
+  equal(browserslist('last 3 bb major versions'), ['bb 10', 'bb 8'])
 })
 
-it('supports Can I Use missing mobile versions', () => {
+test('supports Can I Use missing mobile versions', () => {
   let opts = { mobileToDesktop: true }
-  expect(browserslist('last 2 android major versions', opts)).toEqual([
-    'android 39',
-    'android 38'
-  ])
+  equal(
+    browserslist('last 2 android major versions', opts),
+    [
+      'android 39',
+      'android 38'
+    ]
+  )
 })
+
+test.run()
diff --git a/test/node.test.js b/test/node.test.js
index 3d9ab21c..f5ec89cb 100644
--- a/test/node.test.js
+++ b/test/node.test.js
@@ -1,117 +1,120 @@
+let { test } = require('uvu')
+let { equal, throws, is, match } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-it('selects Node.js version', () => {
-  expect(browserslist('node 7.5.0')).toEqual(['node 7.5.0'])
+let arrayContaining = (set, subset) => subset.every(v => set.includes(v))
+
+test('selects Node.js version', () => {
+  equal(browserslist('node 7.5.0'), ['node 7.5.0'])
 })
 
-it('supports case insensitive Node.js name', () => {
-  expect(browserslist('Node 7.5.0')).toEqual(['node 7.5.0'])
+test('supports case insensitive Node.js name', () => {
+  equal(browserslist('Node 7.5.0'), ['node 7.5.0'])
 })
 
-it('throws on unknown Node.js version', () => {
-  expect(() => {
-    browserslist('node 3')
-  }).toThrow(/Unknown version/)
+test('throws on unknown Node.js version', () => {
+  throws(() => browserslist('node 3'), /Unknown version/)
 })
 
-it('throws on malformed Node.js version', () => {
-  expect(() => {
-    browserslist('node 8.a')
-  }).toThrow(/Unknown/)
-  expect(() => {
-    browserslist('node 8.8.8.8')
-  }).toThrow(/Unknown/)
-  expect(() => {
-    browserslist('node 8.01')
-  }).toThrow(/Unknown/)
-  expect(() => {
-    browserslist('node 6 - 8.a')
-  }).toThrow(/Unknown/)
+test('throws on malformed Node.js version', () => {
+  throws(() => browserslist('node 8.a'), /Unknown/)
+  throws(() => browserslist('node 8.8.8.8'), /Unknown/)
+  throws(() => browserslist('node 8.01'), /Unknown/)
+  throws(() => browserslist('node 6 - 8.a'), /Unknown/)
 })
 
-it('return empty array on unknown Node.js version with special flag', () => {
-  expect(browserslist('node 3', { ignoreUnknownVersions: true })).toEqual([])
+test('return empty array on unknown Node.js version with special flag', () => {
+  equal(browserslist('node 3', { ignoreUnknownVersions: true }), [])
 })
 
-it('supports selection of Node.js version by major.minor query', () => {
-  expect(browserslist('node 5.1')).toEqual(['node 5.1.0'])
+test('supports selection of Node.js version by major.minor query', () => {
+  equal(browserslist('node 5.1'), ['node 5.1.0'])
 })
 
-it('supports selection of Node.js version by major version only', () => {
-  expect(browserslist('node 5')).toEqual(['node 5.12.0'])
+test('supports selection of Node.js version by major version only', () => {
+  equal(browserslist('node 5'), ['node 5.12.0'])
 })
 
-it('selects maintained Node.js versions', () => {
-  expect(Array.isArray(browserslist('maintained node versions'))).toBe(true)
+test('selects maintained Node.js versions', () => {
+  is(Array.isArray(browserslist('maintained node versions')), true)
 })
 
-it('supports case insensitive query for maintained Node.js versions', () => {
-  expect(Array.isArray(browserslist('maintained Node versions'))).toBe(true)
+test('supports case insensitive query for maintained Node.js versions', () => {
+  is(Array.isArray(browserslist('maintained Node versions')), true)
 })
 
-it('supports current node version', () => {
+test('supports current node version', () => {
   let versions = browserslist('current node')
-  expect(versions).toHaveLength(1)
-  expect(versions[0]).toMatch(/node \d+\.\d+\.\d+/)
+  is(versions.length, 1)
+  match(versions[0], /node \d+\.\d+\.\d+/)
 })
 
-it('supports comparison operator', () => {
-  expect(browserslist('node <= 5')).toEqual([
-    'node 5.0.0',
-
-    'node 4.9.0',
-    'node 4.8.0',
-    'node 4.7.0',
-    'node 4.6.0',
-    'node 4.5.0',
-    'node 4.4.0',
-    'node 4.3.0',
-    'node 4.2.0',
-    'node 4.1.0',
-    'node 4.0.0',
-
-    'node 0.12.0',
-    'node 0.11.0',
-    'node 0.10.0',
-    'node 0.9.0',
-    'node 0.8.0',
-    'node 0.7.0',
-    'node 0.6.0',
-    'node 0.5.0',
-    'node 0.4.0',
-    'node 0.3.0',
-    'node 0.2.0'
-  ])
-
-  expect(browserslist('node < 5')).toEqual([
-    'node 4.9.0',
-    'node 4.8.0',
-    'node 4.7.0',
-    'node 4.6.0',
-    'node 4.5.0',
-    'node 4.4.0',
-    'node 4.3.0',
-    'node 4.2.0',
-    'node 4.1.0',
-    'node 4.0.0',
-
-    'node 0.12.0',
-    'node 0.11.0',
-    'node 0.10.0',
-    'node 0.9.0',
-    'node 0.8.0',
-    'node 0.7.0',
-    'node 0.6.0',
-    'node 0.5.0',
-    'node 0.4.0',
-    'node 0.3.0',
-    'node 0.2.0'
-  ])
-
-  expect(browserslist('Node <= 5')).toHaveLength(22)
-
-  expect(browserslist('node >= 9')).toEqual(
-    expect.arrayContaining([
+test('supports comparison operator', () => {
+  equal(
+    browserslist('node <= 5'),
+    [
+      'node 5.0.0',
+
+      'node 4.9.0',
+      'node 4.8.0',
+      'node 4.7.0',
+      'node 4.6.0',
+      'node 4.5.0',
+      'node 4.4.0',
+      'node 4.3.0',
+      'node 4.2.0',
+      'node 4.1.0',
+      'node 4.0.0',
+
+      'node 0.12.0',
+      'node 0.11.0',
+      'node 0.10.0',
+      'node 0.9.0',
+      'node 0.8.0',
+      'node 0.7.0',
+      'node 0.6.0',
+      'node 0.5.0',
+      'node 0.4.0',
+      'node 0.3.0',
+      'node 0.2.0'
+    ]
+  )
+
+  equal(
+    browserslist('node < 5'),
+    [
+      'node 4.9.0',
+      'node 4.8.0',
+      'node 4.7.0',
+      'node 4.6.0',
+      'node 4.5.0',
+      'node 4.4.0',
+      'node 4.3.0',
+      'node 4.2.0',
+      'node 4.1.0',
+      'node 4.0.0',
+
+      'node 0.12.0',
+      'node 0.11.0',
+      'node 0.10.0',
+      'node 0.9.0',
+      'node 0.8.0',
+      'node 0.7.0',
+      'node 0.6.0',
+      'node 0.5.0',
+      'node 0.4.0',
+      'node 0.3.0',
+      'node 0.2.0'
+    ]
+  )
+
+  is(browserslist('Node <= 5').length, 22)
+
+  is(arrayContaining(
+    browserslist('node >= 9'),
+    [
       'node 9.0.0',
       'node 9.1.0',
       'node 9.2.0',
@@ -153,11 +156,12 @@ it('supports comparison operator', () => {
       'node 11.8.0',
       'node 11.9.0',
       'node 11.10.0'
-    ])
-  )
+    ]
+  ), true)
 
-  expect(browserslist('node > 9')).toEqual(
-    expect.arrayContaining([
+  is(arrayContaining(
+    browserslist('node > 9'),
+    [
       'node 9.1.0',
       'node 9.2.0',
       'node 9.3.0',
@@ -198,131 +202,145 @@ it('supports comparison operator', () => {
       'node 11.8.0',
       'node 11.9.0',
       'node 11.10.0'
-    ])
-  )
+    ]
+  ), true)
 })
 
-it('supports range selection', () => {
-  expect(browserslist('node 4-6')).toEqual([
-    'node 6.17.0',
-    'node 6.16.0',
-    'node 6.15.0',
-    'node 6.14.0',
-    'node 6.13.0',
-    'node 6.12.0',
-    'node 6.11.0',
-    'node 6.10.0',
-    'node 6.9.0',
-    'node 6.8.0',
-    'node 6.7.0',
-    'node 6.6.0',
-    'node 6.5.0',
-    'node 6.4.0',
-    'node 6.3.0',
-    'node 6.2.0',
-    'node 6.1.0',
-    'node 6.0.0',
-
-    'node 5.12.0',
-    'node 5.11.0',
-    'node 5.10.0',
-    'node 5.9.0',
-    'node 5.8.0',
-    'node 5.7.0',
-    'node 5.6.0',
-    'node 5.5.0',
-    'node 5.4.0',
-    'node 5.3.0',
-    'node 5.2.0',
-    'node 5.1.0',
-    'node 5.0.0',
-
-    'node 4.9.0',
-    'node 4.8.0',
-    'node 4.7.0',
-    'node 4.6.0',
-    'node 4.5.0',
-    'node 4.4.0',
-    'node 4.3.0',
-    'node 4.2.0',
-    'node 4.1.0',
-    'node 4.0.0'
-  ])
-
-  expect(browserslist('node 4-6.0.0')).toEqual([
-    'node 6.0.0',
-
-    'node 5.12.0',
-    'node 5.11.0',
-    'node 5.10.0',
-    'node 5.9.0',
-    'node 5.8.0',
-    'node 5.7.0',
-    'node 5.6.0',
-    'node 5.5.0',
-    'node 5.4.0',
-    'node 5.3.0',
-    'node 5.2.0',
-    'node 5.1.0',
-    'node 5.0.0',
-
-    'node 4.9.0',
-    'node 4.8.0',
-    'node 4.7.0',
-    'node 4.6.0',
-    'node 4.5.0',
-    'node 4.4.0',
-    'node 4.3.0',
-    'node 4.2.0',
-    'node 4.1.0',
-    'node 4.0.0'
-  ])
-
-  expect(browserslist('node 6.5-7.5')).toEqual([
-    'node 7.5.0',
-    'node 7.4.0',
-    'node 7.3.0',
-    'node 7.2.0',
-    'node 7.1.0',
-    'node 7.0.0',
-
-    'node 6.17.0',
-    'node 6.16.0',
-    'node 6.15.0',
-    'node 6.14.0',
-    'node 6.13.0',
-    'node 6.12.0',
-    'node 6.11.0',
-    'node 6.10.0',
-    'node 6.9.0',
-    'node 6.8.0',
-    'node 6.7.0',
-    'node 6.6.0',
-    'node 6.5.0'
-  ])
-
-  expect(browserslist('node 6.6.4-7.7.5')).toEqual([
-    'node 7.7.0',
-    'node 7.6.0',
-    'node 7.5.0',
-    'node 7.4.0',
-    'node 7.3.0',
-    'node 7.2.0',
-    'node 7.1.0',
-    'node 7.0.0',
-
-    'node 6.17.0',
-    'node 6.16.0',
-    'node 6.15.0',
-    'node 6.14.0',
-    'node 6.13.0',
-    'node 6.12.0',
-    'node 6.11.0',
-    'node 6.10.0',
-    'node 6.9.0',
-    'node 6.8.0',
-    'node 6.7.0',
-    // include 6.6.0 as patch versions are ignored
-    'node 6.6.0'
-  ])
+test('supports range selection', () => {
+  equal(
+    browserslist('node 4-6'),
+    [
+      'node 6.17.0',
+      'node 6.16.0',
+      'node 6.15.0',
+      'node 6.14.0',
+      'node 6.13.0',
+      'node 6.12.0',
+      'node 6.11.0',
+      'node 6.10.0',
+      'node 6.9.0',
+      'node 6.8.0',
+      'node 6.7.0',
+      'node 6.6.0',
+      'node 6.5.0',
+      'node 6.4.0',
+      'node 6.3.0',
+      'node 6.2.0',
+      'node 6.1.0',
+      'node 6.0.0',
+
+      'node 5.12.0',
+      'node 5.11.0',
+      'node 5.10.0',
+      'node 5.9.0',
+      'node 5.8.0',
+      'node 5.7.0',
+      'node 5.6.0',
+      'node 5.5.0',
+      'node 5.4.0',
+      'node 5.3.0',
+      'node 5.2.0',
+      'node 5.1.0',
+      'node 5.0.0',
+
+      'node 4.9.0',
+      'node 4.8.0',
+      'node 4.7.0',
+      'node 4.6.0',
+      'node 4.5.0',
+      'node 4.4.0',
+      'node 4.3.0',
+      'node 4.2.0',
+      'node 4.1.0',
+      'node 4.0.0'
+    ]
+  )
+
+  equal(
+    browserslist('node 4-6.0.0'),
+    [
+      'node 6.0.0',
+
+      'node 5.12.0',
+      'node 5.11.0',
+      'node 5.10.0',
+      'node 5.9.0',
+      'node 5.8.0',
+      'node 5.7.0',
+      'node 5.6.0',
+      'node 5.5.0',
+      'node 5.4.0',
+      'node 5.3.0',
+      'node 5.2.0',
+      'node 5.1.0',
+      'node 5.0.0',
+
+      'node 4.9.0',
+      'node 4.8.0',
+      'node 4.7.0',
+      'node 4.6.0',
+      'node 4.5.0',
+      'node 4.4.0',
+      'node 4.3.0',
+      'node 4.2.0',
+      'node 4.1.0',
+      'node 4.0.0'
+    ]
+  )
+
+  equal(
+    browserslist('node 6.5-7.5'),
+    [
+      'node 7.5.0',
+      'node 7.4.0',
+      'node 7.3.0',
+      'node 7.2.0',
+      'node 7.1.0',
+      'node 7.0.0',
+
+      'node 6.17.0',
+      'node 6.16.0',
+      'node 6.15.0',
+      'node 6.14.0',
+      'node 6.13.0',
+      'node 6.12.0',
+      'node 6.11.0',
+      'node 6.10.0',
+      'node 6.9.0',
+      'node 6.8.0',
+      'node 6.7.0',
+      'node 6.6.0',
+      'node 6.5.0'
+    ]
+  )
+
+  equal(
+    browserslist('node 6.6.4-7.7.5'),
+    [
+      'node 7.7.0',
+      'node 7.6.0',
+      'node 7.5.0',
+      'node 7.4.0',
+      'node 7.3.0',
+      'node 7.2.0',
+      'node 7.1.0',
+      'node 7.0.0',
+
+      'node 6.17.0',
+      'node 6.16.0',
+      'node 6.15.0',
+      'node 6.14.0',
+      'node 6.13.0',
+      'node 6.12.0',
+      'node 6.11.0',
+      'node 6.10.0',
+      'node 6.9.0',
+      'node 6.8.0',
+      'node 6.7.0',
+      // include 6.6.0 as patch versions are ignored
+      'node 6.6.0'
+    ]
+  )
 })
+
+test.run()
diff --git a/test/opera.test.js b/test/opera.test.js
index fc12c10e..ce015acf 100644
--- a/test/opera.test.js
+++ b/test/opera.test.js
@@ -1,9 +1,15 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-it('selects opera mini', () => {
-  expect(browserslist('op_mini all')).toEqual(['op_mini all'])
+test('selects opera mini', () => {
+  equal(browserslist('op_mini all'), ['op_mini all'])
 })
 
-it('selects opera mini case insensitive', () => {
-  expect(browserslist('OperaMini All')).toEqual(['op_mini all'])
+test('selects opera mini case insensitive', () => {
+  equal(browserslist('OperaMini All'), ['op_mini all'])
 })
+
+test.run()
diff --git a/test/phantomjs.test.js b/test/phantomjs.test.js
index 6c954aec..15d54923 100644
--- a/test/phantomjs.test.js
+++ b/test/phantomjs.test.js
@@ -1,11 +1,17 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-it('converts PhantomJS to Safari', () => {
-  expect(browserslist('phantomjs 2.1')).toEqual(['safari 6'])
-  expect(browserslist('phantomjs 1.9')).toEqual(['safari 5'])
+test('converts PhantomJS to Safari', () => {
+  equal(browserslist('phantomjs 2.1'), ['safari 6'])
+  equal(browserslist('phantomjs 1.9'), ['safari 5'])
 })
 
-it('supports case insensitive PhantomJS name', () => {
-  expect(browserslist('PhantomJS 2.1')).toEqual(['safari 6'])
-  expect(browserslist('PhantomJS 1.9')).toEqual(['safari 5'])
+test('supports case insensitive PhantomJS name', () => {
+  equal(browserslist('PhantomJS 2.1'), ['safari 6'])
+  equal(browserslist('PhantomJS 1.9'), ['safari 5'])
 })
+
+test.run()
diff --git a/test/range.test.js b/test/range.test.js
index ffbc6ced..b8554eaa 100644
--- a/test/range.test.js
+++ b/test/range.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { equal, throws } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-let originData = browserslist.data
+let originData = { ...browserslist.data }
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.data = {
     ie: {
       name: 'ie',
@@ -19,29 +23,32 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.data = originData
 })
 
-it('selects a range of browsers', () => {
-  expect(browserslist('ie 8-10')).toEqual(['ie 10', 'ie 9', 'ie 8'])
+test('selects a range of browsers', () => {
+  equal(browserslist('ie 8-10'), ['ie 10', 'ie 9', 'ie 8'])
 })
 
-it('selects versions with query out of range', () => {
-  expect(browserslist('ie 1-12')).toEqual(['ie 11', 'ie 10', 'ie 9', 'ie 8'])
+test('selects versions with query out of range', () => {
+  equal(browserslist('ie 1-12'), ['ie 11', 'ie 10', 'ie 9', 'ie 8'])
 })
 
-it('selects a range of android browsers', () => {
-  expect(browserslist('android 4.3-37')).toEqual([
-    'android 37',
-    'android 4.4.3-4.4.4',
-    'android 4.4',
-    'android 4.2-4.3'
-  ])
+test('selects a range of android browsers', () => {
+  equal(
+    browserslist('android 4.3-37'),
+    [
+      'android 37',
+      'android 4.4.3-4.4.4',
+      'android 4.4',
+      'android 4.2-4.3'
+    ]
+  )
 })
 
-it('raises on an unknown browser', () => {
-  expect(() => {
-    browserslist('unknown 4-7')
-  }).toThrow('Unknown browser unknown')
+test('raises on an unknown browser', () => {
+  throws(() => browserslist('unknown 4-7'), 'Unknown browser unknown')
 })
+
+test.run()
diff --git a/test/release.test.js b/test/release.test.js
index 5f0c92a4..082f7f28 100644
--- a/test/release.test.js
+++ b/test/release.test.js
@@ -1,5 +1,10 @@
+delete require.cache[require.resolve('..')]
+
+let { test } = require('uvu')
+let { equal, is } = require('uvu/assert')
 let fs = require('fs')
 
+let { spyOn } = require('./utils')
 let browserslist = require('..')
 
 let originData = browserslist.data
@@ -81,53 +86,63 @@ function mockStatSync() {
   }
 }
 
-beforeEach(() => {
-  jest.spyOn(console, 'warn').mockImplementation(() => true)
+let originConsoleWarn = console.warn
+let originExistsSync = fs.existsSync
+let originStatSync = fs.statSync
+
+test.before.each(() => {
+  spyOn(console, 'warn', () => true)
 })
 
-afterEach(() => {
-  jest.clearAllMocks()
+test.after.each(() => {
+  console.warn = originConsoleWarn
+  fs.existsSync = originExistsSync
+  fs.statSync = originStatSync
+
   browserslist.clearCaches()
   delete process.env.BROWSERSLIST_IGNORE_OLD_DATA
 })
 
-afterAll(() => {
+test.after(() => {
   browserslist.data = originData
 })
 
-it('does not print warning', () => {
+test('does not print warning', () => {
   browserslist.data = youngerSixMonthsData
   browserslist('last 2 versions')
-  expect(console.warn).toHaveBeenCalledTimes(0)
+  is(console.warn.called, false)
 })
 
-it('shows warning', () => {
+test('shows warning', () => {
   browserslist.data = olderSixMonthsData
-  jest.spyOn(fs, 'existsSync').mockImplementation(findPackage)
-  jest.spyOn(fs, 'statSync').mockImplementation(mockStatSync)
+  spyOn(fs, 'existsSync', findPackage)
+  spyOn(fs, 'statSync', mockStatSync)
   browserslist('last 2 versions')
-  expect(console.warn).toHaveBeenCalledWith(
-    'Browserslist: caniuse-lite is outdated. Please run:\n' +
+  equal(
+    console.warn.callArgs,
+    ['Browserslist: caniuse-lite is outdated. Please run:\n' +
       '  npx browserslist@latest --update-db\n' +
       '  Why you should do it regularly: ' +
-      'https://github.com/browserslist/browserslist#browsers-data-updating'
+      'https://github.com/browserslist/browserslist#browsers-data-updating']
   )
 })
 
-it('hides warning on request', () => {
+test('hides warning on request', () => {
   process.env.BROWSERSLIST_IGNORE_OLD_DATA = 'true'
   browserslist.data = olderSixMonthsData
-  jest.spyOn(fs, 'existsSync').mockImplementation(findPackage)
-  jest.spyOn(fs, 'statSync').mockImplementation(mockStatSync)
+  spyOn(fs, 'existsSync', findPackage)
+  spyOn(fs, 'statSync', mockStatSync)
   browserslist('last 2 versions')
-  expect(console.warn).toHaveBeenCalledTimes(0)
+  is(console.warn.calledTimes, 0)
 })
 
-it('shows warning only once', () => {
+test('shows warning only once', () => {
   browserslist.data = olderSixMonthsData
-  jest.spyOn(fs, 'existsSync').mockImplementation(findPackage)
-  jest.spyOn(fs, 'statSync').mockImplementation(mockStatSync)
+  spyOn(fs, 'existsSync', findPackage)
+  spyOn(fs, 'statSync', mockStatSync)
   browserslist('last 2 versions')
   browserslist('last 2 versions')
-  expect(console.warn).toHaveBeenCalledTimes(1)
+  is(console.warn.calledTimes, 1)
 })
+
+test.run()
diff --git a/test/shareable-stats.test.js b/test/shareable-stats.test.js
index b0624fa5..9b9b750a 100644
--- a/test/shareable-stats.test.js
+++ b/test/shareable-stats.test.js
@@ -1,6 +1,9 @@
+let { test } = require('uvu')
+let { equal, throws } = require('uvu/assert')
 let { ensureDir, writeFile, remove } = require('fs-extra')
 let { join } = require('path')
 
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let STATS = join(__dirname, 'fixtures', 'browserslist-stats.json')
@@ -22,110 +25,109 @@ async function mock(name, index, stats) {
   }
 }
 
-afterEach(async () => {
+test.after.each(async () => {
   await Promise.all(mocked.map(dir => remove(dir)))
   mocked = []
   delete process.env.BROWSERSLIST_STATS
 })
 
-it('takes stats from shareable config', async () => {
+test('takes stats from shareable config', async () => {
   await mock('browserslist-config-test1', undefined, {
     dataByBrowser: { chrome: { 55: 4, 56: 6 } }
   })
-  expect(browserslist('> 5% in browserslist-config-test1 stats')).toEqual([
-    'chrome 56'
-  ])
+  equal(browserslist('> 5% in browserslist-config-test1 stats'), ['chrome 56'])
 })
 
-it('takes stats and queries from shareable config', async () => {
+test('takes stats and queries from shareable config', async () => {
   await mock(
     'browserslist-config-test2',
     ['> 1% in browserslist-config-test2 stats'],
     { ie: { 8: 1, 11: 2 } }
   )
-  expect(browserslist('extends browserslist-config-test2')).toEqual(['ie 11'])
+  equal(browserslist('extends browserslist-config-test2'), ['ie 11'])
 })
 
-it('works with non-prefixed stats with dangerousExtend', async () => {
+test('works with non-prefixed stats with dangerousExtend', async () => {
   await mock('pkg', undefined, { chrome: { 78: 6 } })
-  expect(
-    browserslist(['> 5% in pkg stats'], { dangerousExtend: true })
-  ).toEqual(['chrome 78'])
+  equal(
+    browserslist(['> 5% in pkg stats'], { dangerousExtend: true }),
+    ['chrome 78']
+  )
 })
 
-it('handles scoped stats with a dot in the name', async () => {
+test('handles scoped stats with a dot in the name', async () => {
   await mock('@example.com/browserslist-config', undefined, {
     ie: { 8: 5, 11: 4 }
   })
-  expect(
-    browserslist(['< 5% in @example.com/browserslist-config stats'])
-  ).toEqual(['ie 11'])
+  equal(
+    browserslist(['< 5% in @example.com/browserslist-config stats']),
+    ['ie 11']
+  )
 })
 
-it('handles file in scoped stats', async () => {
+test('handles file in scoped stats', async () => {
   await mock('@scope/browserslist-config/ie', undefined, {
     ie: { 8: 2, 11: 5 }
   })
-  expect(
-    browserslist(['>= 5% in @scope/browserslist-config/ie stats'])
-  ).toEqual(['ie 11'])
+  equal(
+    browserslist(['>= 5% in @scope/browserslist-config/ie stats']),
+    ['ie 11']
+  )
 })
 
-it('handles file-less scoped stats', async () => {
+test('handles file-less scoped stats', async () => {
   await mock('@scope/browserslist-config', undefined, { ie: { 8: 6, 11: 5 } })
-  expect(browserslist(['<= 5% in @scope/browserslist-config stats'])).toEqual([
-    'ie 11'
-  ])
+  equal(browserslist(['<= 5% in @scope/browserslist-config stats']), ['ie 11'])
 })
 
-it('handles scoped stats', async () => {
+test('handles scoped stats', async () => {
   await mock('@scope/browserslist-config-test', undefined, {
     ie: { 8: 2, 11: 6 }
   })
-  expect(
-    browserslist(['> 5% in @scope/browserslist-config-test stats'])
-  ).toEqual(['ie 11'])
+  equal(browserslist(['> 5% in @scope/browserslist-config-test stats']), ['ie 11'])
 })
 
-it('ignores passed stats', async () => {
-  expect(() =>
-    browserslist('> 5% in browserslist-config-test3 stats', { stats: STATS })
-  ).toThrow(/Cannot resolve module/)
+test('ignores passed stats', () => {
+  throws(
+    () => browserslist('> 5% in browserslist-config-test3 stats', { stats: STATS }),
+    /Cannot (find|resolve) module/
+  )
 })
 
-it('ignores environment variable stats', async () => {
+test('ignores environment variable stats', () => {
   process.env.BROWSERSLIST_STATS = CUSTOM_STATS
-  expect(() => browserslist('> 5% in browserslist-config-test4 stats')).toThrow(
-    /Cannot resolve module/
-  )
+  throws(() => browserslist('> 5% in browserslist-config-test4 stats'), /Cannot (find|resolve) module/)
 })
 
-it('throws when stats does not have browserslist-config- prefix', () => {
-  expect(() => {
-    browserslist(['> 5% in thing-without-prefix stats'])
-  }).toThrow(/needs `browserslist-config-` prefix/)
+test('throws when stats does not have browserslist-config- prefix', () => {
+  throws(
+    () => { browserslist(['> 5% in thing-without-prefix stats'])},
+    /needs `browserslist-config-` prefix/
+  )
 })
 
-it('throws when stats has dot in path', () => {
-  expect(() => {
-    browserslist(['> 5% in browserslist-config-package/../something stats'])
-  }).toThrow(/`.` not allowed/)
+test('throws when stats has dot in path', () => {
+  throws(() => browserslist(['> 5% in browserslist-config-package/../something stats']), /`.` not allowed/)
 })
 
-it('throws when stats has node_modules in path', () => {
-  expect(() => {
-    browserslist(['> 5% in browserslist-config-test/node_modules/a stats'])
-  }).toThrow(/`node_modules` not allowed/)
+test('throws when stats has node_modules in path', () => {
+  throws(
+    () => browserslist(['> 5% in browserslist-config-test/node_modules/a stats']),
+    /`node_modules` not allowed/
+  )
 })
 
-it('throw if stats undefined', async () => {
+test('throw if stats undefined', async () => {
   await mock(
     'browserslist-config-undefined',
     undefined,
     // @ts-expect-error
     { dataByBrowser: 'not object' }
   )
-  expect(() =>
-    browserslist(['> 5% in browserslist-config-undefined stats'])
-  ).toThrow(/statistics was not provided/)
+  throws(() =>
+    browserslist(['> 5% in browserslist-config-undefined stats']),
+    /statistics was not provided/
+  )
 })
+
+test.run()
diff --git a/test/since.test.js b/test/since.test.js
index 22263fe2..41877885 100644
--- a/test/since.test.js
+++ b/test/since.test.js
@@ -1,9 +1,13 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-let originData = browserslist.data
+let originData = { ...browserslist.data }
 let originWarn = console.warn
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.data = {
     ie: {
       name: 'ie',
@@ -31,23 +35,25 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.data = originData
   console.warn = originWarn
 })
 
-it('selects versions released on year boundaries', () => {
-  expect(browserslist('since 1970')).toEqual(['ie 3', 'ie 2', 'ie 1', 'safari 1'])
+test('selects versions released on year boundaries', () => {
+  equal(browserslist('since 1970'), ['ie 3', 'ie 2', 'ie 1', 'safari 1'])
 })
 
-it('is case insensitive', () => {
-  expect(browserslist('Since 1970')).toEqual(['ie 3', 'ie 2', 'ie 1', 'safari 1'])
+test('is case insensitive', () => {
+  equal(browserslist('Since 1970'), ['ie 3', 'ie 2', 'ie 1', 'safari 1'])
 })
 
-it('selects versions released on year and month boundaries', () => {
-  expect(browserslist('since 2017-01')).toEqual(['ie 3', 'ie 2'])
+test('selects versions released on year and month boundaries', () => {
+  equal(browserslist('since 2017-01'), ['ie 3', 'ie 2'])
 })
 
-it('selects versions released on date boundaries', () => {
-  expect(browserslist('since 2017-02-01')).toEqual(['ie 3'])
+test('selects versions released on date boundaries', () => {
+  equal(browserslist('since 2017-02-01'), ['ie 3'])
 })
+
+test.run()
diff --git a/test/unreleased.test.js b/test/unreleased.test.js
index feca7239..5dae0de9 100644
--- a/test/unreleased.test.js
+++ b/test/unreleased.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-let originData = browserslist.data
+let originData = { ...browserslist.data }
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.data = {
     ie: {
       name: 'ie',
@@ -25,19 +29,21 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.data = originData
 })
 
-it('selects unreleased versions of each browser', () => {
-  expect(browserslist('unreleased versions')).toEqual(['chrome 40', 'edge 13'])
+test('selects unreleased versions of each browser', () => {
+  equal(browserslist('unreleased versions'), ['chrome 40', 'edge 13'])
 })
 
-it('selects unreleased versions of specific browser', () => {
-  expect(browserslist('unreleased Edge versions')).toEqual(['edge 13'])
+test('selects unreleased versions of specific browser', () => {
+  equal(browserslist('unreleased Edge versions'), ['edge 13'])
 })
 
-it('is case insensitive', () => {
-  expect(browserslist('Unreleased Versions')).toEqual(['chrome 40', 'edge 13'])
-  expect(browserslist('Unreleased Chrome versions')).toEqual(['chrome 40'])
+test('is case insensitive', () => {
+  equal(browserslist('Unreleased Versions'), ['chrome 40', 'edge 13'])
+  equal(browserslist('Unreleased Chrome versions'), ['chrome 40'])
 })
+
+test.run()
diff --git a/test/update-db/index.test.js b/test/update-db/index.test.js
index bb6b8fe4..34efe055 100644
--- a/test/update-db/index.test.js
+++ b/test/update-db/index.test.js
@@ -1,20 +1,21 @@
 process.env.NO_COLOR = '1'
 
+let { test } = require('uvu')
+let { equal, match, throws } = require('uvu/assert')
 let { remove, copy, readFile, ensureDir } = require('fs-extra')
 let { execSync } = require('child_process')
 let { nanoid } = require('nanoid/non-secure')
 let { tmpdir } = require('os')
 let { join } = require('path')
 
+let { testWithTimeout } = require('../utils')
 let updateDb = require('../../update-db')
 
 const NODE_8 = process.version.startsWith('v8.')
 const NODE_10 = process.version.startsWith('v10.')
 
-jest.setTimeout(10000)
-
 let testdir
-afterEach(async () => {
+test.after.each(async () => {
   process.chdir(join(__dirname, '..'))
   await remove(testdir)
 })
@@ -50,7 +51,8 @@ function checkRunUpdateContents(installedVersions, system) {
   let addCmd = system + (system === 'yarn' ? ' add -W' : ' install')
   let rmCmd = system + (system === 'yarn' ? ' remove -W' : ' uninstall')
 
-  expect(runUpdate()).toContain(
+  match(
+    runUpdate(),
     `Latest version:     ${caniuse.version}\n` +
       'Installed version' +
       (installedVersions.indexOf(',') !== -1 ? 's:' : ': ') +
@@ -65,7 +67,8 @@ function checkRunUpdateContents(installedVersions, system) {
 }
 
 function checkRunUpdateNoChanges() {
-  expect(runUpdate()).toContain(
+  match(
+    runUpdate(),
     `Latest version:     ${caniuse.version}\n` +
       `Installed version:  ${caniuse.version}\n` +
       'caniuse-lite is up to date\n'
@@ -90,86 +93,91 @@ async function checkYarnLockfile(dir, version) {
   }
 
   let contents = (await readFile(join(dir, 'yarn.lock'))).toString()
-  expect(contents).toContain(`${yarnLockfileVersions}\n`)
-  expect(contents).toContain(`${yarnLockfileVersions}\n` + versionSyntax)
+  match(contents, `${yarnLockfileVersions}\n`)
+  match(contents, `${yarnLockfileVersions}\n` + versionSyntax)
 }
 
 let caniuse = JSON.parse(execSync('npm show caniuse-lite --json').toString())
 
-it('throws on missing package.json', async () => {
+testWithTimeout('throws on missing package.json', async () => {
   await chdir('update-missing')
-  expect(runUpdate).toThrow(
+  throws(
+    runUpdate,
     'Cannot find package.json. ' +
       'Is this the right directory to run `npx browserslist --update-db` in?'
   )
 })
 
-it('throws on missing lockfile', async () => {
+testWithTimeout('throws on missing lockfile', async () => {
   await chdir('update-missing', 'package.json')
-  expect(runUpdate).toThrow(
+  throws(
+    runUpdate,
     'No lockfile found. Run "npm install", "yarn install" or "pnpm install"'
   )
 })
 
-it('shows target browser changes', async () => {
+testWithTimeout('shows target browser changes', async () => {
   let dir = await chdir(
     'browserslist-diff',
     'package.json',
     'package-lock.json'
   )
 
-  expect(runUpdate()).toMatch(
-    // eslint-disable-next-line max-len
+  match(
+    runUpdate(),
     /(Target browser changes:\n([+-] \w+ [\d.-]+\n)+)|(No target browser changes)/
   )
 
   let lock = JSON.parse(await readFile(join(dir, 'package-lock.json')))
-  expect(lock.dependencies['caniuse-lite'].version).toEqual(caniuse.version)
+  equal(lock.dependencies['caniuse-lite'].version, caniuse.version)
 })
 
-it("shows an error when browsers list can't be retrieved", async () => {
+testWithTimeout("shows an error when browsers list can't be retrieved", async () => {
   let dir = await chdir(
     'browserslist-diff-error',
     'package.json',
     'package-lock.json'
   )
 
-  expect(runUpdate()).toContain(
+  match(
+    runUpdate(),
     'Problem with browser list retrieval.\n' +
       'Target browser changes won’t be shown.\n'
   )
 
   let lock = JSON.parse(await readFile(join(dir, 'package-lock.json')))
-  expect(lock.dependencies['caniuse-lite'].version).toEqual(caniuse.version)
+  equal(lock.dependencies['caniuse-lite'].version, caniuse.version)
 })
 
-it('updates caniuse-lite without previous version', async () => {
+testWithTimeout('updates caniuse-lite without previous version', async () => {
   let dir = await chdir('update-missing', 'package.json', 'package-lock.json')
   checkRunUpdateContents('none', 'npm')
+
   let lock = JSON.parse(await readFile(join(dir, 'package-lock.json')))
-  expect(lock.dependencies['caniuse-lite']).toBeUndefined()
+  equal(lock.dependencies['caniuse-lite'], undefined)
 })
 
-it('updates caniuse-lite for npm', async () => {
+testWithTimeout('updates caniuse-lite for npm', async () => {
   let dir = await chdir('update-npm', 'package.json', 'package-lock.json')
   checkRunUpdateContents('1.0.30001030', 'npm')
 
   let lock = JSON.parse(await readFile(join(dir, 'package-lock.json')))
-  expect(lock.dependencies['caniuse-lite'].version).toEqual(caniuse.version)
+  equal(lock.dependencies['caniuse-lite'].version, caniuse.version)
 })
 
-it('skips the npm update if caniuse-lite is up to date', async () => {
+testWithTimeout('skips the npm update if caniuse-lite is up to date', async () => {
   let dir = await chdir('update-npm', 'package.json', 'package-lock.json')
   checkRunUpdateContents('1.0.30001030', 'npm')
+
   let lock = JSON.parse(await readFile(join(dir, 'package-lock.json')))
-  expect(lock.dependencies['caniuse-lite'].version).toEqual(caniuse.version)
+  equal(lock.dependencies['caniuse-lite'].version, caniuse.version)
 
   checkRunUpdateNoChanges()
   lock = JSON.parse(await readFile(join(dir, 'package-lock.json')))
-  expect(lock.dependencies['caniuse-lite'].version).toEqual(caniuse.version)
+  equal(lock.dependencies['caniuse-lite'].version, caniuse.version)
 })
 
-it('updates caniuse-lite for npm-shrinkwrap', async () => {
+testWithTimeout('updates caniuse-lite for npm-shrinkwrap', async () => {
   let dir = await chdir(
     'update-npm-shrinkwrap',
     'package.json',
@@ -178,10 +186,10 @@ it('updates caniuse-lite for npm-shrinkwrap', async () => {
   checkRunUpdateContents('1.0.30001030', 'npm')
 
   let lock = JSON.parse(await readFile(join(dir, 'npm-shrinkwrap.json')))
-  expect(lock.dependencies['caniuse-lite'].version).toEqual(caniuse.version)
+  equal(lock.dependencies['caniuse-lite'].version, caniuse.version)
 })
 
-it('skips the npm-shrinkwrap update if caniuse-lite is up to date', async () => {
+testWithTimeout('skips the npm-shrinkwrap update if caniuse-lite is up to date', async () => {
   let dir = await chdir(
     'update-npm-shrinkwrap',
     'package.json',
@@ -189,20 +197,20 @@ it('skips the npm-shrinkwrap update if caniuse-lite is up to date', async () =>
   )
   checkRunUpdateContents('1.0.30001030', 'npm')
   let lock = JSON.parse(await readFile(join(dir, 'npm-shrinkwrap.json')))
-  expect(lock.dependencies['caniuse-lite'].version).toEqual(caniuse.version)
+  equal(lock.dependencies['caniuse-lite'].version, caniuse.version)
 
   checkRunUpdateNoChanges()
   lock = JSON.parse(await readFile(join(dir, 'npm-shrinkwrap.json')))
-  expect(lock.dependencies['caniuse-lite'].version).toEqual(caniuse.version)
+  equal(lock.dependencies['caniuse-lite'].version, caniuse.version)
 })
 
-it('updates caniuse-lite for yarn', async () => {
+testWithTimeout('updates caniuse-lite for yarn', async () => {
   let dir = await chdir('update-yarn', 'package.json', 'yarn.lock')
   checkRunUpdateContents('1.0.30001035', 'yarn')
   checkYarnLockfile(dir)
 })
 
-it('skips the yarn update if caniuse-lite is up to date', async () => {
+testWithTimeout('skips the yarn update if caniuse-lite is up to date', async () => {
   let dir = await chdir('update-yarn', 'package.json', 'yarn.lock')
   checkRunUpdateContents('1.0.30001035', 'yarn')
   checkYarnLockfile(dir)
@@ -210,17 +218,18 @@ it('skips the yarn update if caniuse-lite is up to date', async () => {
   checkYarnLockfile(dir)
 })
 
-it('updates caniuse-lite for yarn with workspaces', async () => {
+testWithTimeout('updates caniuse-lite for yarn with workspaces', async () => {
   let dir = await chdir('update-yarn-workspaces', 'package.json', 'yarn.lock')
   checkRunUpdateContents('1.0.30001156', 'yarn')
   checkYarnLockfile(dir)
 })
 
 if (!NODE_8 && !NODE_10) {
-  it('updates caniuse-lite for yarn v2', async () => {
+  testWithTimeout('updates caniuse-lite for yarn v2', async () => {
     let dir = await chdir('update-yarn-v2', 'package.json', 'yarn.lock')
     execSync('yarn set version berry')
-    expect(runUpdate()).toContain(
+    match(
+      runUpdate(),
       `Latest version:     ${caniuse.version}\n` +
         'Updating caniuse-lite version\n' +
         '$ yarn up -R caniuse-lite\n' +
@@ -233,23 +242,25 @@ if (!NODE_8 && !NODE_10) {
 
 if (!NODE_8 && !NODE_10 && isInstalled('pnpm')) {
   let versions = ['1.0.30001000', '1.0.1234', '1.0.3000', '1.0.30001035']
-  it('updates caniuse-lite for pnpm', async () => {
+  testWithTimeout('updates caniuse-lite for pnpm', async () => {
     let dir = await chdir('update-pnpm', 'package.json', 'pnpm-lock.yaml')
     checkRunUpdateContents(versions.sort().join(', '), 'pnpm')
 
     let lock = (await readFile(join(dir, 'pnpm-lock.yaml'))).toString()
-    expect(lock).toContain(`/caniuse-lite/${caniuse.version}:`)
+    match(lock, `/caniuse-lite/${caniuse.version}:`)
   })
 
-  it('skips the pnpm update if caniuse-lite is up to date', async () => {
+  testWithTimeout('skips the pnpm update if caniuse-lite is up to date', async () => {
     let dir = await chdir('update-pnpm', 'package.json', 'pnpm-lock.yaml')
 
     checkRunUpdateContents(versions.sort().join(', '), 'pnpm')
     let lock = (await readFile(join(dir, 'pnpm-lock.yaml'))).toString()
-    expect(lock).toContain(`/caniuse-lite/${caniuse.version}:`)
+    match(lock, `/caniuse-lite/${caniuse.version}:`)
 
     checkRunUpdateNoChanges()
     lock = (await readFile(join(dir, 'pnpm-lock.yaml'))).toString()
-    expect(lock).toContain(`/caniuse-lite/${caniuse.version}:`)
+    match(lock, `/caniuse-lite/${caniuse.version}:`)
   })
 }
+
+test.run()
diff --git a/test/utils/index.js b/test/utils/index.js
new file mode 100644
index 00000000..c5e03d3e
--- /dev/null
+++ b/test/utils/index.js
@@ -0,0 +1,39 @@
+const { test } = require('uvu');
+
+const MAX_TIMEOUT = 10000
+
+let testWithTimeout = (name, cb, ms) => test(name, async (...args) => {
+  let timer
+  try {
+    await Promise.race([
+      cb(...args),
+      new Promise((resolve, reject) => {
+        timer = setTimeout(() => reject(new Error('timeout')), ms || MAX_TIMEOUT)
+      })
+    ])
+  } finally {
+    clearTimeout(timer)
+  }
+})
+
+let spyOn = (obj, methodName, impl) => {
+  let origin = impl || obj[methodName]
+  let fn = (...args) => {
+    fn.called = true
+    fn.calledTimes += 1
+    fn.callArgs = args
+
+    return origin.call(obj, ...args)
+  }
+
+  fn.called = false
+  fn.calledTimes = 0
+  fn.callArgs = []
+
+  obj[methodName] = fn
+
+  return fn
+}
+
+exports.testWithTimeout = testWithTimeout
+exports.spyOn = spyOn
diff --git a/test/versions.test.js b/test/versions.test.js
index 87d2917b..e6c05efb 100644
--- a/test/versions.test.js
+++ b/test/versions.test.js
@@ -1,8 +1,12 @@
+let { test } = require('uvu')
+let { equal, throws } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
-let originData = browserslist.data
+let originData = { ...browserslist.data }
 
-beforeEach(() => {
+test.before.each(() => {
   browserslist.data = {
     ie: {
       name: 'ie',
@@ -25,45 +29,45 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   browserslist.data = originData
 })
 
-it('selects browser by more sign', () => {
-  expect(browserslist('ie > 9')).toEqual(['ie 11', 'ie 10'])
+test('selects browser by more sign', () => {
+  equal(browserslist('ie > 9'), ['ie 11', 'ie 10'])
 })
 
-it('selects browser by more or equal sign', () => {
-  expect(browserslist('ie >= 10')).toEqual(['ie 11', 'ie 10'])
+test('selects browser by more or equal sign', () => {
+  equal(browserslist('ie >= 10'), ['ie 11', 'ie 10'])
 })
 
-it('selects browser by less sign', () => {
-  expect(browserslist('ie < 10')).toEqual(['ie 9', 'ie 8'])
+test('selects browser by less sign', () => {
+  equal(browserslist('ie < 10'), ['ie 9', 'ie 8'])
 })
 
-it('selects browser by less or equal sign', () => {
-  expect(browserslist('ie <= 9')).toEqual(['ie 9', 'ie 8'])
+test('selects browser by less or equal sign', () => {
+  equal(browserslist('ie <= 9'), ['ie 9', 'ie 8'])
 })
 
-it('uses case insensitive aliases', () => {
-  expect(browserslist('Explorer > 10')).toEqual(['ie 11'])
+test('uses case insensitive aliases', () => {
+  equal(browserslist('Explorer > 10'), ['ie 11'])
 })
 
-it('raises on unknown browser', () => {
-  expect(() => {
-    browserslist('unknow > 10')
-  }).toThrow('Unknown browser unknow')
+test('raises on unknown browser', () => {
+  throws(() => { browserslist('unknow > 10') }, 'Unknown browser unknow')
 })
 
-it('works with joined versions from Can I Use', () => {
-  expect(browserslist('android >= 4.2')).toEqual(['android 4.2-4.3'])
-  expect(browserslist('android >= 4.3')).toEqual(['android 4.2-4.3'])
+test('works with joined versions from Can I Use', () => {
+  equal(browserslist('android >= 4.2'), ['android 4.2-4.3'])
+  equal(browserslist('android >= 4.3'), ['android 4.2-4.3'])
 })
 
-it('allows omission of the space around the operator', () => {
-  expect(browserslist('ie<=9')).toEqual(['ie 9', 'ie 8'])
+test('allows omission of the space around the operator', () => {
+  equal(browserslist('ie<=9'), ['ie 9', 'ie 8'])
 })
 
-it('selects browser with one version', () => {
-  expect(browserslist('and_qq > 0')).toEqual(['and_qq 1.2'])
+test('selects browser with one version', () => {
+  equal(browserslist('and_qq > 0'), ['and_qq 1.2'])
 })
+
+test.run()
diff --git a/test/webpack.test.js b/test/webpack.test.js
deleted file mode 100644
index 1199610a..00000000
--- a/test/webpack.test.js
+++ /dev/null
@@ -1,51 +0,0 @@
-jest.doMock('path', () => ({}))
-jest.doMock('../node.js', () => require('../browser'))
-
-let browserslist = require('..')
-
-it('works without path', () => {
-  expect(browserslist(undefined)).toEqual(browserslist('defaults'))
-})
-
-it('works with input file without path', () => {
-  expect(browserslist(undefined, { path: './fixtures/rc/test.css' })).toEqual(
-    browserslist('defaults')
-  )
-})
-
-it('throws on sharable config', () => {
-  expect(() => {
-    browserslist('extends browserslist-config-test')
-  }).toThrow(/Sharable configs are not supported/)
-})
-
-it('throws on country statistics', () => {
-  expect(() => {
-    browserslist('> 1% in US')
-  }).toThrow(/Country statistics are not supported/)
-})
-
-it('throws on feature statistics', () => {
-  expect(() => {
-    browserslist('supports rtcpeerconnection')
-  }).toThrow(/Supports queries are not available/)
-})
-
-it('throws on config path', () => {
-  expect(() => {
-    browserslist(undefined, { config: './config/.browserslistrc' })
-  }).toThrow(/Browserslist config are not supported/)
-})
-
-it('has config methods', () => {
-  expect(browserslist.clearCaches()).toBeUndefined()
-  expect(browserslist.parseConfig('')).toBeUndefined()
-  expect(browserslist.readConfig('')).toBeUndefined()
-  expect(browserslist.findConfig()).toBeUndefined()
-})
-
-it('supports current node version', () => {
-  let versions = browserslist('current node')
-  expect(versions).toHaveLength(1)
-  expect(versions[0]).toMatch(/node \d+\.\d+\.\d+/)
-})
diff --git a/test/years.test.js b/test/years.test.js
index d3871f7d..9db3f3f7 100644
--- a/test/years.test.js
+++ b/test/years.test.js
@@ -1,7 +1,11 @@
+let { test } = require('uvu')
+let { equal } = require('uvu/assert')
+
+delete require.cache[require.resolve('..')]
 let browserslist = require('..')
 
 let RealDate = Date
-let originData = browserslist.data
+let originData = { ...browserslist.data }
 let originWarn = console.warn
 
 function mockDate(iso) {
@@ -14,7 +18,7 @@ function mockDate(iso) {
   }
 }
 
-beforeEach(() => {
+test.before.each(() => {
   mockDate('2018-01-01T00:00:00z')
   browserslist.data = {
     ie: {
@@ -46,34 +50,42 @@ beforeEach(() => {
   }
 })
 
-afterEach(() => {
+test.after.each(() => {
   global.Date = RealDate
   browserslist.data = originData
 })
 
-it('selects versions released within last X years', () => {
-  expect(browserslist('last 2 years')).toEqual([
-    'edge 16',
-    'edge 15',
-    'edge 14'
-  ])
+test('selects versions released within last X years', () => {
+  equal(
+    browserslist('last 2 years'),
+    [
+      'edge 16',
+      'edge 15',
+      'edge 14'
+    ]
+  )
 })
 
-it('selects versions released within last year', () => {
-  expect(browserslist('last 1 year')).toEqual(['edge 16', 'edge 15'])
+test('selects versions released within last year', () => {
+  equal(browserslist('last 1 year'), ['edge 16', 'edge 15'])
 })
 
-it('supports year fraction', () => {
-  expect(browserslist('last 1.4 years')).toEqual(['edge 16', 'edge 15'])
+test('supports year fraction', () => {
+  equal(browserslist('last 1.4 years'), ['edge 16', 'edge 15'])
 })
 
-it('is case insensitive', () => {
-  expect(browserslist('Last 5 years')).toEqual([
-    'edge 16',
-    'edge 15',
-    'edge 14',
-    'edge 13',
-    'edge 12',
-    'ie 11'
-  ])
+test('is case insensitive', () => {
+  equal(
+    browserslist('Last 5 years'),
+    [
+      'edge 16',
+      'edge 15',
+      'edge 14',
+      'edge 13',
+      'edge 12',
+      'ie 11'
+    ]
+  )
 })
+
+test.run()