diff --git a/.eslintrc.json b/.eslintrc.json index ec6aa589c..fd8df59ac 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,7 @@ { "root": true, "extends": [ + "plugin:compat/recommended", "plugin:import/errors", "plugin:import/warnings", "plugin:unicorn/recommended", diff --git a/build/.eslintrc.json b/build/.eslintrc.json index 679bd26f7..e0556caab 100644 --- a/build/.eslintrc.json +++ b/build/.eslintrc.json @@ -8,6 +8,7 @@ }, "extends": "../.eslintrc.json", "rules": { + "compat/compat": "off", "no-console": "off", "strict": "error" } diff --git a/js/src/carousel.js b/js/src/carousel.js index 9c6fb53ee..2fd7b14ab 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -119,8 +119,9 @@ class Carousel extends BaseComponent { this._config = this._getConfig(config) this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element) - this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0 - this._pointerEvent = Boolean(window.PointerEvent) + /* eslint-disable-next-line compat/compat */ + this._touchSupported = 'ontouchstart' in document.documentElement || (('maxTouchPoints' in navigator) && (navigator.maxTouchPoints > 0)) + this._pointerEvent = PointerEvent in window this._addEventListeners() } diff --git a/package-lock.json b/package-lock.json index d2936dace..ec88d349a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1524,6 +1524,12 @@ "dev": true, "optional": true }, + "ast-metadata-inferer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.4.0.tgz", + "integrity": "sha512-tKHdBe8N/Vq2nLAm4YPBVREVZjMux6KrqyPfNQgIbDl0t7HaNSmy8w4OyVHYg/cvyn5BW7o7pVwpjPte89Zhcg==", + "dev": true + }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -2458,6 +2464,12 @@ "quick-lru": "^4.0.1" } }, + "caniuse-db": { + "version": "1.0.30001164", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001164.tgz", + "integrity": "sha512-IbIthrNouxc17oTlwskmg3M1wUVjobS11fBGsym6EnTBZit6vtax2iDyZiSPHCRA1BRO9pO+IDhES8YyXNbaoQ==", + "dev": true + }, "caniuse-lite": { "version": "1.0.30001164", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001164.tgz", @@ -3926,6 +3938,36 @@ "pkg-dir": "^2.0.0" } }, + "eslint-plugin-compat": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-3.8.0.tgz", + "integrity": "sha512-5CuWUSZXZkXLCQJBriEpndn/YWrvggDSHTpRJq++kR8GVcsWbTdp8Eh+nBA7JlrNi7ZJ/+kniOVXmn3bpnxuRA==", + "dev": true, + "requires": { + "ast-metadata-inferer": "^0.4.0", + "browserslist": "^4.12.2", + "caniuse-db": "^1.0.30001090", + "core-js": "^3.6.5", + "find-up": "^4.1.0", + "lodash.memoize": "4.1.2", + "mdn-browser-compat-data": "^1.0.28", + "semver": "7.3.2" + }, + "dependencies": { + "core-js": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.0.tgz", + "integrity": "sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, "eslint-plugin-import": { "version": "2.22.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", @@ -6604,6 +6646,12 @@ "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=", "dev": true }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6837,6 +6885,15 @@ "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", "dev": true }, + "mdn-browser-compat-data": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-1.1.2.tgz", + "integrity": "sha512-uBNX2P4iu3PZcXP20rL+n7fxN9PWZLj0y43QMe/1aXzqP3H6HbVOeePS0cBZCtMwcfr2Tugf1OHj+/wLam+dUg==", + "dev": true, + "requires": { + "extend": "3.0.2" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", diff --git a/package.json b/package.json index 7d737a1ac..5d7e4c703 100644 --- a/package.json +++ b/package.json @@ -105,6 +105,7 @@ "cross-env": "^7.0.3", "eslint": "^7.14.0", "eslint-config-xo": "^0.33.1", + "eslint-plugin-compat": "^3.8.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-unicorn": "^23.0.0", "find-unused-sass-variables": "^3.0.0",