diff --git a/.eslintrc.js b/.eslintrc.js index 01714c04c4..03e06eb499 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,8 +2,9 @@ const restrictedGlobals = require('confusing-browser-globals'); module.exports = { root: true, + parser: '@typescript-eslint/parser', plugins: [ - '@babel', + '@typescript-eslint', 'react', 'promise', 'import', @@ -16,14 +17,6 @@ module.exports = { es2017: true, es2020: true }, - parserOptions: { - ecmaVersion: 2020, - sourceType: 'module', - ecmaFeatures: { - impliedStrict: true, - jsx: true - } - }, extends: [ 'eslint:recommended', 'plugin:react/recommended', @@ -53,14 +46,19 @@ module.exports = { 'no-multi-spaces': ['error'], 'no-multiple-empty-lines': ['error', { 'max': 1 }], 'no-nested-ternary': ['error'], + 'no-redeclare': ['off'], + '@typescript-eslint/no-redeclare': ['error', { builtinGlobals: false }], 'no-restricted-globals': ['error'].concat(restrictedGlobals), 'no-return-assign': ['error'], 'no-return-await': ['error'], 'no-sequences': ['error', { 'allowInParentheses': false }], - 'no-shadow': ['error'], + 'no-shadow': ['off'], + '@typescript-eslint/no-shadow': ['error'], 'no-trailing-spaces': ['error'], - '@babel/no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], - 'no-useless-constructor': ['error'], + 'no-unused-expressions': ['off'], + '@typescript-eslint/no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], + 'no-useless-constructor': ['off'], + '@typescript-eslint/no-useless-constructor': ['error'], 'no-var': ['error'], 'no-void': ['error', { 'allowAsStatement': true }], 'no-warning-comments': ['warn', { 'terms': ['fixme', 'hack', 'xxx'] }], @@ -71,7 +69,7 @@ module.exports = { 'prefer-const': ['error', { 'destructuring': 'all' }], 'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }], 'radix': ['error'], - '@babel/semi': ['error'], + '@typescript-eslint/semi': ['error'], 'space-before-blocks': ['error'], 'space-infix-ops': 'error', 'yoda': 'error', @@ -201,9 +199,9 @@ module.exports = { files: [ './src/**/*.js', './src/**/*.jsx', - './src/**/*.ts' + './src/**/*.ts', + './src/**/*.tsx' ], - parser: '@babel/eslint-parser', env: { node: false, amd: true, @@ -241,8 +239,6 @@ module.exports = { 'TaskButton': 'writable', 'UserParentalControlPage': 'writable', 'Windows': 'readonly' - }, - rules: { } }, // TypeScript source files @@ -251,8 +247,6 @@ module.exports = { './src/**/*.ts', './src/**/*.tsx' ], - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], extends: [ 'eslint:recommended', 'plugin:import/typescript', @@ -263,12 +257,6 @@ module.exports = { 'plugin:jsx-a11y/recommended' ], rules: { - // Use TypeScript equivalent rules when required - 'no-shadow': ['off'], - '@typescript-eslint/no-shadow': ['error'], - 'no-useless-constructor': ['off'], - '@typescript-eslint/no-useless-constructor': ['error'], - 'sonarjs/cognitive-complexity': ['warn'] } } diff --git a/package-lock.json b/package-lock.json index 6026fe142e..20807c8044 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,8 +56,6 @@ }, "devDependencies": { "@babel/core": "7.21.4", - "@babel/eslint-parser": "7.21.3", - "@babel/eslint-plugin": "7.19.1", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-private-methods": "7.18.6", "@babel/plugin-transform-modules-umd": "7.18.6", @@ -225,40 +223,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/eslint-parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.21.3.tgz", - "integrity": "sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg==", - "dev": true, - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/eslint-plugin": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.19.1.tgz", - "integrity": "sha512-ElGPkQPapKMa3zVqXHkZYzuL7I5LbRw9UWBUArgWsdWDDb9XcACqOpBib5tRPA9XvbVZYrFUkoQPbiJ4BFvu4w==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/eslint-parser": ">=7.11.0", - "eslint": ">=7.5.0" - } - }, "node_modules/@babel/generator": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", @@ -2902,15 +2866,6 @@ "node": ">=4" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "dependencies": { - "eslint-scope": "5.1.1" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -7232,15 +7187,6 @@ "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -7254,15 +7200,6 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -20171,26 +20108,6 @@ "semver": "^6.3.0" } }, - "@babel/eslint-parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.21.3.tgz", - "integrity": "sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg==", - "dev": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - } - }, - "@babel/eslint-plugin": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.19.1.tgz", - "integrity": "sha512-ElGPkQPapKMa3zVqXHkZYzuL7I5LbRw9UWBUArgWsdWDDb9XcACqOpBib5tRPA9XvbVZYrFUkoQPbiJ4BFvu4w==", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, "@babel/generator": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", @@ -21938,15 +21855,6 @@ "glob-to-regexp": "^0.3.0" } }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "requires": { - "eslint-scope": "5.1.1" - } - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -25452,12 +25360,6 @@ "dev": true, "requires": {} }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -25468,12 +25370,6 @@ "estraverse": "^4.1.1" } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, "espree": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", diff --git a/package.json b/package.json index 4e7e73d04c..5aca9baac6 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,6 @@ "license": "GPL-2.0-or-later", "devDependencies": { "@babel/core": "7.21.4", - "@babel/eslint-parser": "7.21.3", - "@babel/eslint-plugin": "7.19.1", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-private-methods": "7.18.6", "@babel/plugin-transform-modules-umd": "7.18.6", diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index d4f3aafa49..0271a5084b 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1118,7 +1118,6 @@ let refreshIndicatorLoaded; function importRefreshIndicator() { if (!refreshIndicatorLoaded) { refreshIndicatorLoaded = true; - /* eslint-disable-next-line @babel/no-unused-expressions */ import('../../elements/emby-itemrefreshindicator/emby-itemrefreshindicator'); } } @@ -1469,7 +1468,6 @@ function getHoverMenuHtml(item, action) { const userData = item.UserData || {}; if (itemHelper.canMarkPlayed(item)) { - /* eslint-disable-next-line @babel/no-unused-expressions */ import('../../elements/emby-playstatebutton/emby-playstatebutton'); html += ''; } @@ -1477,7 +1475,6 @@ function getHoverMenuHtml(item, action) { if (itemHelper.canRate(item)) { const likes = userData.Likes == null ? '' : userData.Likes; - /* eslint-disable-next-line @babel/no-unused-expressions */ import('../../elements/emby-ratingbutton/emby-ratingbutton'); html += ''; } diff --git a/src/scripts/editorsidebar.js b/src/scripts/editorsidebar.js index e3a1f58ab8..8f6cd24c98 100644 --- a/src/scripts/editorsidebar.js +++ b/src/scripts/editorsidebar.js @@ -300,7 +300,6 @@ let selectedNodeId; $(document).on('itemsaved', '.metadataEditorPage', function (e, item) { updateEditorNode(this, item); }).on('pagebeforeshow', '.metadataEditorPage', function () { - /* eslint-disable-next-line @babel/no-unused-expressions */ import('../styles/metadataeditor.scss'); }).on('pagebeforeshow', '.metadataEditorPage', function () { const page = this; diff --git a/src/scripts/keyboardNavigation.js b/src/scripts/keyboardNavigation.js index 39c187479d..6e8e477d7a 100644 --- a/src/scripts/keyboardNavigation.js +++ b/src/scripts/keyboardNavigation.js @@ -202,7 +202,6 @@ export function enable() { function attachGamepadScript() { console.log('Gamepad connected! Attaching gamepadtokey.js script'); window.removeEventListener('gamepadconnected', attachGamepadScript); - /* eslint-disable-next-line @babel/no-unused-expressions */ import('./gamepadtokey'); }