diff --git a/.eslintrc.js b/.eslintrc.js index 0ce1a53f..571093bc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,17 +1,27 @@ module.exports = { root: true, - extends: ["plugin:@foretagsplatsen/eslint-plugin-ftgp/main", "plugin:import/recommended"], + extends: ["plugin:@foretagsplatsen/main"], parserOptions: { ecmaVersion: 6, sourceType: "module" }, rules: { - "no-console": ["error"], "quotes": ["error", "double"], - "ftgp/require-class-comment": 0, - "import/no-absolute-path": "error", - "import/no-self-import": "error", - "import/no-useless-path-segments": "error", - "import/no-cycle": "error", + "import/no-unused-modules": [ + "error", + { + unusedExports: true, + missingExports: true, + ignoreExports: [ + // List of files exporting stuff which are not imported: + "src/widgetjs.js", + // List of files not exporting anything: + "**/.eslintrc.js", + "webpack*", + "src/router/optionalParameterSegment.js", + "src/router/staticSegment.js" + ], + }, + ] } }; diff --git a/package.json b/package.json index 0b1648ef..90a7deba 100644 --- a/package.json +++ b/package.json @@ -42,10 +42,8 @@ "test": "jasmine-browser-runner runSpecs --config=jasmine-browser.json" }, "devDependencies": { - "@foretagsplatsen/eslint-plugin-ftgp": "^2.1.1", + "@foretagsplatsen/eslint-plugin": "^3.0.0", "eslint": "^8.55.0", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-node": "^11.1.0", "jasmine": "^5.1.0", "jasmine-browser-runner": "^2.3.0", "jasmine-reporters": "^2.5.2", diff --git a/src/Widget2.js b/src/Widget2.js index 4a444082..329b77a8 100644 --- a/src/Widget2.js +++ b/src/Widget2.js @@ -1,9 +1,9 @@ -import router from "./router"; +import router from "./router.js"; import {eventCategory} from "yaem"; -import htmlCanvas from "./htmlCanvas"; +import htmlCanvas from "./htmlCanvas.js"; import jQuery from "jquery"; -import {getCurrentWidget, withCurrentWidget} from "./currentWidget"; -import {newId} from "./idGenerator"; +import {getCurrentWidget, withCurrentWidget} from "./currentWidget.js"; +import {newId} from "./idGenerator.js"; /** * Base for all widgets. A widget can keep state in variables, contain logic and diff --git a/src/currentWidget.js b/src/currentWidget.js index 85b2255f..a9c0779f 100644 --- a/src/currentWidget.js +++ b/src/currentWidget.js @@ -4,7 +4,7 @@ export function getCurrentWidget() { return currentWidget; } -export function setCurrentWidget(widget) { +function setCurrentWidget(widget) { currentWidget = widget; } diff --git a/src/router.js b/src/router.js index 09ecf22a..98bd27ed 100644 --- a/src/router.js +++ b/src/router.js @@ -1,6 +1,6 @@ -import url from "./router/url"; -import route from "./router/route"; -import router from "./router/router"; +import url from "./router/url.js"; +import route from "./router/route.js"; +import router from "./router/router.js"; var routerSingleton = router(); diff --git a/src/router/abstractSegment.js b/src/router/abstractSegment.js index c834e403..72cb2c26 100644 --- a/src/router/abstractSegment.js +++ b/src/router/abstractSegment.js @@ -10,7 +10,7 @@ import { object } from "klassified"; * @param my * @returns {abstractSegment} */ -var abstractSegment = object.subclass(function(that, my) { +const abstractSegment = object.subclass(function(that, my) { my.initialize = function(spec) { my.super(spec); diff --git a/src/router/hashLocation.js b/src/router/hashLocation.js index c677741d..d10fb54a 100644 --- a/src/router/hashLocation.js +++ b/src/router/hashLocation.js @@ -1,6 +1,6 @@ import jQuery from "jquery"; import {eventCategory} from "yaem"; -import url from "./url"; +import url from "./url.js"; import { object } from "klassified"; /** @@ -30,7 +30,7 @@ var pollInterval = 25; * @param [my] * @returns {hashLocation} */ -var hashLocation = object.subclass(function(that, my) { +const hashLocation = object.subclass(function(that, my) { var pollTimerId = null; diff --git a/src/router/optionalParameterSegment.js b/src/router/optionalParameterSegment.js index 6d1fc61b..e0402aa0 100644 --- a/src/router/optionalParameterSegment.js +++ b/src/router/optionalParameterSegment.js @@ -1,4 +1,4 @@ -import parameterSegment from "./parameterSegment"; +import parameterSegment from "./parameterSegment.js"; /** * Optional parameters can have a default value. @@ -7,7 +7,7 @@ import parameterSegment from "./parameterSegment"; * @param my * @returns {parameter} */ -var optionalParameterSegment = parameterSegment.subclass(function(that, my) { +const optionalParameterSegment = parameterSegment.subclass(function(that, my) { my.initialize = function(spec) { my.super(spec); @@ -57,5 +57,3 @@ optionalParameterSegment.class(function(that) { return segmentString.substr(0, 1) === "?"; }; }); - -export default optionalParameterSegment; diff --git a/src/router/parameterSegment.js b/src/router/parameterSegment.js index 9c92f98a..10561045 100644 --- a/src/router/parameterSegment.js +++ b/src/router/parameterSegment.js @@ -1,4 +1,4 @@ -import abstractSegment from "./abstractSegment"; +import abstractSegment from "./abstractSegment.js"; /** * Constructs validator functions from constraints parameters. @@ -40,7 +40,7 @@ function parameterValidator(constraint) { * @param [my] * @returns {parameterSegment} */ -var parameterSegment = abstractSegment.subclass(function(that, my) { +const parameterSegment = abstractSegment.subclass(function(that, my) { my.initialize = function(spec) { my.super(spec); diff --git a/src/router/route.js b/src/router/route.js index 4eecdec6..d9a218e3 100644 --- a/src/router/route.js +++ b/src/router/route.js @@ -1,7 +1,7 @@ -import routeFactory from "./routeFactory"; +import routeFactory from "./routeFactory.js"; import {eventCategory} from "yaem"; -import routeMatchResult from "./routeMatchResult"; -import url from "./url"; +import routeMatchResult from "./routeMatchResult.js"; +import url from "./url.js"; import { object } from "klassified"; import "jquery"; @@ -56,7 +56,7 @@ import "jquery"; * @param {{}} my * @returns {route} */ -var route = object.subclass(function(that, my) { +const route = object.subclass(function(that, my) { var segments; var ignoreTrailingSegments; diff --git a/src/router/routeFactory.js b/src/router/routeFactory.js index 9fe1b9e8..8e2de30a 100644 --- a/src/router/routeFactory.js +++ b/src/router/routeFactory.js @@ -1,7 +1,7 @@ -import abstractSegment from "./abstractSegment"; -import "./parameterSegment"; -import "./optionalParameterSegment"; -import "./staticSegment"; +import abstractSegment from "./abstractSegment.js"; +import "./parameterSegment.js"; +import "./optionalParameterSegment.js"; +import "./staticSegment.js"; /** * Token/Char used to separate segments in route patterns. diff --git a/src/router/routeMatchResult.js b/src/router/routeMatchResult.js index 974c59d2..566e0000 100644 --- a/src/router/routeMatchResult.js +++ b/src/router/routeMatchResult.js @@ -10,7 +10,7 @@ import { object } from "klassified"; * * @returns {routeMatchResult} */ -var routeMatchResult = object.subclass(function(that, my) { +const routeMatchResult = object.subclass(function(that, my) { var url; var route; diff --git a/src/router/router.js b/src/router/router.js index 24517f21..9b296fef 100755 --- a/src/router/router.js +++ b/src/router/router.js @@ -1,7 +1,7 @@ import {eventCategory} from "yaem"; -import route from "./route"; -import url from "./url"; -import hashLocation from "./hashLocation"; +import route from "./route.js"; +import url from "./url.js"; +import hashLocation from "./hashLocation.js"; import { object } from "klassified"; import "jquery"; @@ -33,7 +33,7 @@ function hashSingleton() { * * @returns {{}} */ -var router = object.subclass(function(that, my) { +const router = object.subclass(function(that, my) { my.initialize = function(spec) { my.super(spec); diff --git a/src/router/staticSegment.js b/src/router/staticSegment.js index 2fa27e5d..ccc4881c 100644 --- a/src/router/staticSegment.js +++ b/src/router/staticSegment.js @@ -1,4 +1,4 @@ -import abstractSegment from "./abstractSegment"; +import abstractSegment from "./abstractSegment.js"; /** * A static segment match URL segments that are identical @@ -8,7 +8,7 @@ import abstractSegment from "./abstractSegment"; * @param [my] * @returns {segment} */ -var staticSegment = abstractSegment.subclass(function(that, my) { +const staticSegment = abstractSegment.subclass(function(that, my) { /** * Static segment match if URL and route segment @@ -35,5 +35,3 @@ staticSegment.class(function(that) { return ["#", "?"].indexOf(segmentString[0]) === -1; }; }); - -export default staticSegment; diff --git a/src/router/url.js b/src/router/url.js index 2a74afb0..2baf3046 100644 --- a/src/router/url.js +++ b/src/router/url.js @@ -18,7 +18,7 @@ var urlSeparator = "/"; * @param {string} rawUrl * @returns {url} */ -var url = object.subclass(function(that, my) { +const url = object.subclass(function(that, my) { var rawUrl; var path; diff --git a/src/test/.eslintrc.js b/src/test/.eslintrc.js new file mode 100644 index 00000000..391ba9ac --- /dev/null +++ b/src/test/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + rules: { + "import/no-unused-modules": "off" + } +}; diff --git a/src/test/htmlCanvasTest.js b/src/test/htmlCanvasTest.js index e3b479a5..8f23bd59 100644 --- a/src/test/htmlCanvasTest.js +++ b/src/test/htmlCanvasTest.js @@ -1,4 +1,4 @@ -import htmlCanvas from "../htmlCanvas"; +import htmlCanvas from "../htmlCanvas.js"; import jQuery from "jquery"; function withCanvas(callback) { diff --git a/src/test/router/hashLocationTest.js b/src/test/router/hashLocationTest.js index 7983b696..61af7866 100644 --- a/src/test/router/hashLocationTest.js +++ b/src/test/router/hashLocationTest.js @@ -1,5 +1,5 @@ import jQuery from "jquery"; -import hashLocationModel from "../../router/hashLocation"; +import hashLocationModel from "../../router/hashLocation.js"; // Helpers diff --git a/src/test/router/routeTest.js b/src/test/router/routeTest.js index 8d08c270..f23f57d2 100644 --- a/src/test/router/routeTest.js +++ b/src/test/router/routeTest.js @@ -1,4 +1,4 @@ -import router from "../../router"; +import router from "../../router.js"; function assertMatch(url, route, message) { expect(router.url({rawUrl: url}).matchRoute(router.route({ pattern: route })).isMatch()).toBeTruthy(); diff --git a/src/test/router/routerTest.js b/src/test/router/routerTest.js index 8adf9a07..2c56a211 100644 --- a/src/test/router/routerTest.js +++ b/src/test/router/routerTest.js @@ -1,4 +1,4 @@ -import router from "../../router/router"; +import router from "../../router/router.js"; function delayedSteps() { var steps = Array.prototype.slice.call(arguments); diff --git a/src/test/tests.js b/src/test/tests.js index 0257765e..41fe406f 100644 --- a/src/test/tests.js +++ b/src/test/tests.js @@ -1,5 +1,5 @@ -import "./htmlCanvasTest"; -import "./widgetTest"; -import "./router/hashLocationTest"; -import "./router/routerTest"; -import "./router/routeTest"; +import "./htmlCanvasTest.js"; +import "./widgetTest.js"; +import "./router/hashLocationTest.js"; +import "./router/routerTest.js"; +import "./router/routeTest.js"; diff --git a/src/test/widgetTest.js b/src/test/widgetTest.js index f7722987..7086ded9 100644 --- a/src/test/widgetTest.js +++ b/src/test/widgetTest.js @@ -1,5 +1,5 @@ -import widget from "../widget"; -import htmlCanvas from "../htmlCanvas"; +import widget from "../widget.js"; +import htmlCanvas from "../htmlCanvas.js"; import jQuery from "jquery"; var widgetSubclass = widget.subclass(function(that, my) { diff --git a/src/widget.js b/src/widget.js index 8fcab968..5a54e589 100644 --- a/src/widget.js +++ b/src/widget.js @@ -1,11 +1,11 @@ import { object } from "klassified"; -import widgetExtensions from "./widget-extensions"; -import router from "./router"; +import widgetExtensions from "./widget-extensions.js"; +import router from "./router.js"; import {eventCategory} from "yaem"; -import htmlCanvas from "./htmlCanvas"; +import htmlCanvas from "./htmlCanvas.js"; import jQuery from "jquery"; -import {getCurrentWidget, withCurrentWidget} from "./currentWidget"; -import {newId} from "./idGenerator"; +import {getCurrentWidget, withCurrentWidget} from "./currentWidget.js"; +import {newId} from "./idGenerator.js"; /** * Base for all widgets. A widget can keep state in variables, contain logic and @@ -46,7 +46,7 @@ import {newId} from "./idGenerator"; * * @returns {widget} */ -var widget = object.subclass(function(that, my) { +const widget = object.subclass(function(that, my) { /** * Keep track of the rendered subwidgets diff --git a/src/widgetjs.js b/src/widgetjs.js index b5592019..6d6504a1 100644 --- a/src/widgetjs.js +++ b/src/widgetjs.js @@ -1,5 +1,5 @@ -export {default as htmlCanvas} from "./htmlCanvas"; -export {default as widget} from "./widget"; -export {default as Widget} from "./Widget2"; -export {default as ext} from "./widget-extensions"; -export {default as router} from "./router"; +export {default as htmlCanvas} from "./htmlCanvas.js"; +export {default as widget} from "./widget.js"; +export {default as Widget} from "./Widget2.js"; +export {default as ext} from "./widget-extensions.js"; +export {default as router} from "./router.js"; diff --git a/yarn.lock b/yarn.lock index 27edce55..d1818a6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,12 +44,13 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6" integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA== -"@foretagsplatsen/eslint-plugin-ftgp@^2.1.1": - version "2.1.1" - resolved "https://npm.pkg.github.com/download/@foretagsplatsen/eslint-plugin-ftgp/2.1.1/b5a4528aa5d6bff5eedfa51faf96a68dfbc25b8b#b5a4528aa5d6bff5eedfa51faf96a68dfbc25b8b" - integrity sha512-tng4H6j3nnBRYC1zPE2BB+z1nhXB5u6m0LEkAQ9iyl9yHYQNFihD5DH0QvVnqxZeK6/JcubFhqVXoCAVd5RN2A== +"@foretagsplatsen/eslint-plugin@^3.0.0": + version "3.0.0" + resolved "https://npm.pkg.github.com/download/@foretagsplatsen/eslint-plugin/3.0.0/27fca7db450009df3a9672279a53d2576de1f074#27fca7db450009df3a9672279a53d2576de1f074" + integrity sha512-XoNBGFEFxX9tDdAtG0g/cs/UeYTqnRfNQkMBEtBo3uUVE2edxuP0d1QcZZJU4oPotFVI4nGfe9gmXSsH4ApspQ== dependencies: - eslint-plugin-ftgp "^3.0.0" + eslint-import-resolver-exports "^1.0.0-beta.5" + eslint-plugin-import "^2.29.0" eslint-plugin-jasmine "^4.1.3" eslint-plugin-promise "^6.0.0" @@ -867,6 +868,13 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +eslint-import-resolver-exports@^1.0.0-beta.5: + version "1.0.0-beta.5" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-exports/-/eslint-import-resolver-exports-1.0.0-beta.5.tgz#d603056ee168b3e84848cceef12824e470f47b31" + integrity sha512-o6t0w7muUpXr7MkUVzD5igQoDfAQvTmcPp8HEAJdNF8eOuAO+yn6I/TTyMxz9ecCwzX7e02vzlkHURoScUuidg== + dependencies: + resolve.exports "^2.0.0" + eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" @@ -883,21 +891,6 @@ eslint-module-utils@^2.8.0: dependencies: debug "^3.2.7" -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-ftgp@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-ftgp/-/eslint-plugin-ftgp-3.0.0.tgz#a67521b1266d2a1a741eaf4b288700f25dbcb16e" - integrity sha512-zZ+lvPPaYxqcDC5SQT4p3mU/d7icYwfvDGML45egdxs0Z118R57uAid556bec34NDmnXjNhIQWE7RdOAPEWA5A== - dependencies: - requireindex "~1.2.0" - eslint-plugin-import@^2.29.0: version "2.29.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" @@ -926,18 +919,6 @@ eslint-plugin-jasmine@^4.1.3: resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-4.1.3.tgz#c4ced986a61dd5b180982bafe6da1cbac0941c52" integrity sha512-q8j8KnLH/4uwmPELFZvEyfEcuCuGxXScJaRdqHjOjz064GcfX6aoFbzy5VohZ5QYk2+WvoqMoqDSb9nRLf89GQ== -eslint-plugin-node@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - eslint-plugin-promise@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" @@ -959,18 +940,6 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" @@ -1387,7 +1356,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ignore@^5.1.1, ignore@^5.2.0: +ignore@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== @@ -1803,7 +1772,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -2129,16 +2098,6 @@ regexp.prototype.flags@^1.5.1: define-properties "^1.2.0" set-function-name "^2.0.0" -regexpp@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -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" @@ -2156,7 +2115,12 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.10.1, resolve@^1.20.0, resolve@^1.22.4: +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.20.0, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -2236,7 +2200,7 @@ selenium-webdriver@^4.12.0: tmp "^0.2.1" ws ">=8.14.2" -semver@^6.1.0, semver@^6.3.1: +semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -2358,6 +2322,7 @@ statuses@2.0.1: integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==