2020-08-24 18:12:35 -07:00
|
|
|
const restrictedGlobals = require('confusing-browser-globals');
|
|
|
|
|
2020-04-25 05:06:56 -07:00
|
|
|
module.exports = {
|
|
|
|
root: true,
|
2023-05-02 12:51:46 -07:00
|
|
|
parser: '@typescript-eslint/parser',
|
2020-04-25 05:06:56 -07:00
|
|
|
plugins: [
|
2023-05-02 12:51:46 -07:00
|
|
|
'@typescript-eslint',
|
2021-05-28 09:31:31 -07:00
|
|
|
'react',
|
2020-04-25 05:06:56 -07:00
|
|
|
'promise',
|
|
|
|
'import',
|
2022-09-30 14:57:47 -07:00
|
|
|
'eslint-comments',
|
|
|
|
'sonarjs'
|
2020-04-25 05:06:56 -07:00
|
|
|
],
|
|
|
|
env: {
|
|
|
|
node: true,
|
|
|
|
es6: true,
|
|
|
|
es2017: true,
|
|
|
|
es2020: true
|
|
|
|
},
|
|
|
|
extends: [
|
|
|
|
'eslint:recommended',
|
2021-05-28 09:31:31 -07:00
|
|
|
'plugin:react/recommended',
|
2020-04-25 05:06:56 -07:00
|
|
|
// 'plugin:promise/recommended',
|
|
|
|
'plugin:import/errors',
|
|
|
|
'plugin:eslint-comments/recommended',
|
2022-09-30 14:57:47 -07:00
|
|
|
'plugin:compat/recommended',
|
|
|
|
'plugin:sonarjs/recommended'
|
2020-04-25 05:06:56 -07:00
|
|
|
],
|
|
|
|
rules: {
|
2022-10-10 22:37:33 -07:00
|
|
|
'array-callback-return': ['error', { 'checkForEach': true }],
|
2020-05-30 14:15:06 -07:00
|
|
|
'block-spacing': ['error'],
|
2020-08-01 04:50:37 -07:00
|
|
|
'brace-style': ['error', '1tbs', { 'allowSingleLine': true }],
|
2020-05-30 14:15:06 -07:00
|
|
|
'comma-dangle': ['error', 'never'],
|
|
|
|
'comma-spacing': ['error'],
|
2022-03-10 09:46:58 -07:00
|
|
|
'default-case-last': ['error'],
|
2020-05-30 14:15:06 -07:00
|
|
|
'eol-last': ['error'],
|
|
|
|
'indent': ['error', 4, { 'SwitchCase': 1 }],
|
2021-05-28 09:31:31 -07:00
|
|
|
'jsx-quotes': ['error', 'prefer-single'],
|
2020-05-30 14:15:06 -07:00
|
|
|
'keyword-spacing': ['error'],
|
2022-08-11 11:43:36 -07:00
|
|
|
'no-throw-literal': ['error'],
|
2020-05-30 14:15:06 -07:00
|
|
|
'max-statements-per-line': ['error'],
|
2022-12-30 08:24:09 -07:00
|
|
|
'max-params': ['error', 7],
|
2022-03-31 21:46:55 -07:00
|
|
|
'no-duplicate-imports': ['error'],
|
2021-11-22 08:36:49 -07:00
|
|
|
'no-empty-function': ['error'],
|
2020-05-30 14:15:06 -07:00
|
|
|
'no-floating-decimal': ['error'],
|
|
|
|
'no-multi-spaces': ['error'],
|
|
|
|
'no-multiple-empty-lines': ['error', { 'max': 1 }],
|
2022-10-04 13:06:59 -07:00
|
|
|
'no-nested-ternary': ['error'],
|
2023-05-02 12:51:46 -07:00
|
|
|
'no-redeclare': ['off'],
|
|
|
|
'@typescript-eslint/no-redeclare': ['error', { builtinGlobals: false }],
|
2020-08-24 18:12:35 -07:00
|
|
|
'no-restricted-globals': ['error'].concat(restrictedGlobals),
|
2022-10-04 11:24:24 -07:00
|
|
|
'no-return-assign': ['error'],
|
2022-08-09 04:51:43 -07:00
|
|
|
'no-return-await': ['error'],
|
2022-09-30 14:57:47 -07:00
|
|
|
'no-sequences': ['error', { 'allowInParentheses': false }],
|
2023-05-02 12:51:46 -07:00
|
|
|
'no-shadow': ['off'],
|
|
|
|
'@typescript-eslint/no-shadow': ['error'],
|
2020-05-30 14:15:06 -07:00
|
|
|
'no-trailing-spaces': ['error'],
|
2023-05-02 12:51:46 -07:00
|
|
|
'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'],
|
2022-10-04 13:06:59 -07:00
|
|
|
'no-var': ['error'],
|
2022-04-13 07:33:06 -07:00
|
|
|
'no-void': ['error', { 'allowAsStatement': true }],
|
2022-10-04 13:06:59 -07:00
|
|
|
'no-warning-comments': ['warn', { 'terms': ['fixme', 'hack', 'xxx'] }],
|
2023-03-28 21:29:11 -07:00
|
|
|
'object-curly-spacing': ['error', 'always'],
|
2020-05-30 14:15:06 -07:00
|
|
|
'one-var': ['error', 'never'],
|
2023-03-28 21:29:11 -07:00
|
|
|
'operator-linebreak': ['error', 'before', { overrides: { '?': 'after', ':': 'after', '=': 'after' } }],
|
2020-07-26 23:06:46 -07:00
|
|
|
'padded-blocks': ['error', 'never'],
|
2022-04-27 15:45:56 -07:00
|
|
|
'prefer-const': ['error', { 'destructuring': 'all' }],
|
2023-05-04 08:00:48 -07:00
|
|
|
'@typescript-eslint/prefer-for-of': ['error'],
|
2020-05-30 14:15:06 -07:00
|
|
|
'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }],
|
2023-03-08 22:01:05 -07:00
|
|
|
'radix': ['error'],
|
2023-05-02 12:51:46 -07:00
|
|
|
'@typescript-eslint/semi': ['error'],
|
2020-05-30 14:15:06 -07:00
|
|
|
'space-before-blocks': ['error'],
|
2020-07-30 07:05:34 -07:00
|
|
|
'space-infix-ops': 'error',
|
2022-04-21 10:40:17 -07:00
|
|
|
'yoda': 'error',
|
2022-09-29 09:50:25 -07:00
|
|
|
|
2022-09-30 14:57:47 -07:00
|
|
|
'react/jsx-filename-extension': ['error', { 'extensions': ['.jsx', '.tsx'] }],
|
2022-12-16 14:02:11 -07:00
|
|
|
'react/jsx-no-bind': ['error'],
|
|
|
|
'react/jsx-no-constructed-context-values': ['error'],
|
|
|
|
'react/no-array-index-key': ['error'],
|
2022-09-30 14:57:47 -07:00
|
|
|
|
2022-12-16 14:02:11 -07:00
|
|
|
'sonarjs/no-inverted-boolean-check': ['error'],
|
2022-09-30 14:57:47 -07:00
|
|
|
// TODO: Enable the following rules and fix issues
|
2022-12-16 14:02:11 -07:00
|
|
|
'sonarjs/cognitive-complexity': ['off'],
|
2022-10-12 11:44:10 -07:00
|
|
|
'sonarjs/no-duplicate-string': ['off']
|
2020-04-25 05:06:56 -07:00
|
|
|
},
|
2021-05-28 09:31:31 -07:00
|
|
|
settings: {
|
|
|
|
react: {
|
|
|
|
version: 'detect'
|
2021-06-11 05:49:57 -07:00
|
|
|
},
|
|
|
|
'import/parsers': {
|
|
|
|
'@typescript-eslint/parser': [ '.ts', '.tsx' ]
|
2022-01-11 08:03:06 -07:00
|
|
|
},
|
2023-05-02 06:52:08 -07:00
|
|
|
'import/resolver': {
|
|
|
|
node: {
|
|
|
|
extensions: [
|
|
|
|
'.js',
|
|
|
|
'.ts',
|
|
|
|
'.jsx',
|
|
|
|
'.tsx'
|
|
|
|
],
|
|
|
|
moduleDirectory: [
|
|
|
|
'node_modules',
|
|
|
|
'src'
|
|
|
|
]
|
|
|
|
}
|
|
|
|
},
|
2022-01-11 08:03:06 -07:00
|
|
|
polyfills: [
|
|
|
|
// Native Promises Only
|
|
|
|
'Promise',
|
|
|
|
// whatwg-fetch
|
|
|
|
'fetch',
|
|
|
|
// document-register-element
|
|
|
|
'document.registerElement',
|
|
|
|
// resize-observer-polyfill
|
|
|
|
'ResizeObserver',
|
|
|
|
// fast-text-encoding
|
|
|
|
'TextEncoder',
|
|
|
|
// intersection-observer
|
|
|
|
'IntersectionObserver',
|
|
|
|
// Core-js
|
|
|
|
'Object.assign',
|
|
|
|
'Object.is',
|
|
|
|
'Object.setPrototypeOf',
|
|
|
|
'Object.toString',
|
|
|
|
'Object.freeze',
|
|
|
|
'Object.seal',
|
|
|
|
'Object.preventExtensions',
|
|
|
|
'Object.isFrozen',
|
|
|
|
'Object.isSealed',
|
|
|
|
'Object.isExtensible',
|
|
|
|
'Object.getOwnPropertyDescriptor',
|
|
|
|
'Object.getPrototypeOf',
|
|
|
|
'Object.keys',
|
|
|
|
'Object.entries',
|
|
|
|
'Object.getOwnPropertyNames',
|
|
|
|
'Function.name',
|
|
|
|
'Function.hasInstance',
|
|
|
|
'Array.from',
|
|
|
|
'Array.arrayOf',
|
|
|
|
'Array.copyWithin',
|
|
|
|
'Array.fill',
|
|
|
|
'Array.find',
|
|
|
|
'Array.findIndex',
|
|
|
|
'Array.iterator',
|
|
|
|
'String.fromCodePoint',
|
|
|
|
'String.raw',
|
|
|
|
'String.iterator',
|
|
|
|
'String.codePointAt',
|
|
|
|
'String.endsWith',
|
|
|
|
'String.includes',
|
|
|
|
'String.repeat',
|
|
|
|
'String.startsWith',
|
|
|
|
'String.trim',
|
|
|
|
'String.anchor',
|
|
|
|
'String.big',
|
|
|
|
'String.blink',
|
|
|
|
'String.bold',
|
|
|
|
'String.fixed',
|
|
|
|
'String.fontcolor',
|
|
|
|
'String.fontsize',
|
|
|
|
'String.italics',
|
|
|
|
'String.link',
|
|
|
|
'String.small',
|
|
|
|
'String.strike',
|
|
|
|
'String.sub',
|
|
|
|
'String.sup',
|
|
|
|
'RegExp',
|
|
|
|
'Number',
|
|
|
|
'Math',
|
|
|
|
'Date',
|
|
|
|
'async',
|
|
|
|
'Symbol',
|
|
|
|
'Map',
|
|
|
|
'Set',
|
|
|
|
'WeakMap',
|
|
|
|
'WeakSet',
|
|
|
|
'ArrayBuffer',
|
|
|
|
'DataView',
|
|
|
|
'Int8Array',
|
|
|
|
'Uint8Array',
|
|
|
|
'Uint8ClampedArray',
|
|
|
|
'Int16Array',
|
|
|
|
'Uint16Array',
|
|
|
|
'Int32Array',
|
|
|
|
'Uint32Array',
|
|
|
|
'Float32Array',
|
|
|
|
'Float64Array',
|
|
|
|
'Reflect',
|
|
|
|
// Temporary while eslint-compat-plugin is buggy
|
|
|
|
'document.querySelector'
|
|
|
|
]
|
2021-05-28 09:31:31 -07:00
|
|
|
},
|
2020-04-25 05:06:56 -07:00
|
|
|
overrides: [
|
2022-04-13 08:02:20 -07:00
|
|
|
// Config files and development scripts
|
|
|
|
{
|
|
|
|
files: [
|
|
|
|
'./babel.config.js',
|
|
|
|
'./.eslintrc.js',
|
|
|
|
'./postcss.config.js',
|
|
|
|
'./webpack.*.js',
|
|
|
|
'./scripts/**/*.js'
|
|
|
|
]
|
|
|
|
},
|
|
|
|
// JavaScript source files
|
2020-04-25 05:06:56 -07:00
|
|
|
{
|
|
|
|
files: [
|
2021-06-11 05:49:57 -07:00
|
|
|
'./src/**/*.js',
|
2022-09-29 09:50:25 -07:00
|
|
|
'./src/**/*.jsx',
|
2023-05-02 12:51:46 -07:00
|
|
|
'./src/**/*.ts',
|
|
|
|
'./src/**/*.tsx'
|
2020-04-25 05:06:56 -07:00
|
|
|
],
|
2023-05-02 08:24:36 -07:00
|
|
|
parserOptions: {
|
|
|
|
project: ['./tsconfig.json']
|
|
|
|
},
|
2020-04-25 05:06:56 -07:00
|
|
|
env: {
|
|
|
|
node: false,
|
|
|
|
amd: true,
|
|
|
|
browser: true,
|
|
|
|
es6: true,
|
|
|
|
es2017: true,
|
|
|
|
es2020: true
|
|
|
|
},
|
|
|
|
globals: {
|
|
|
|
// Browser globals
|
|
|
|
'MediaMetadata': 'readonly',
|
|
|
|
// Tizen globals
|
|
|
|
'tizen': 'readonly',
|
|
|
|
'webapis': 'readonly',
|
|
|
|
// WebOS globals
|
|
|
|
'webOS': 'readonly',
|
|
|
|
// Dependency globals
|
|
|
|
'$': 'readonly',
|
|
|
|
'jQuery': 'readonly',
|
|
|
|
// Jellyfin globals
|
|
|
|
'ApiClient': 'writable',
|
2021-09-07 16:46:43 -07:00
|
|
|
'Events': 'writable',
|
2020-04-25 05:06:56 -07:00
|
|
|
'chrome': 'writable',
|
|
|
|
'DlnaProfilePage': 'writable',
|
|
|
|
'DashboardPage': 'writable',
|
|
|
|
'Emby': 'readonly',
|
|
|
|
'Globalize': 'writable',
|
|
|
|
'Hls': 'writable',
|
|
|
|
'LibraryMenu': 'writable',
|
|
|
|
'LinkParser': 'writable',
|
|
|
|
'LiveTvHelpers': 'writable',
|
2021-05-22 04:38:20 -07:00
|
|
|
'Loading': 'writable',
|
2020-04-25 05:06:56 -07:00
|
|
|
'MetadataEditor': 'writable',
|
2021-06-11 10:16:11 -07:00
|
|
|
'ServerNotifications': 'writable',
|
2021-06-11 13:59:57 -07:00
|
|
|
'TaskButton': 'writable',
|
2020-04-25 05:06:56 -07:00
|
|
|
'UserParentalControlPage': 'writable',
|
|
|
|
'Windows': 'readonly'
|
2023-05-02 08:24:36 -07:00
|
|
|
},
|
|
|
|
rules: {
|
2023-05-04 20:45:03 -07:00
|
|
|
'@typescript-eslint/no-floating-promises': ['warn'],
|
|
|
|
'@typescript-eslint/prefer-string-starts-ends-with': ['error']
|
2020-04-25 05:06:56 -07:00
|
|
|
}
|
2021-06-11 05:49:57 -07:00
|
|
|
},
|
2022-04-13 08:02:20 -07:00
|
|
|
// TypeScript source files
|
2021-06-11 05:49:57 -07:00
|
|
|
{
|
|
|
|
files: [
|
|
|
|
'./src/**/*.ts',
|
|
|
|
'./src/**/*.tsx'
|
|
|
|
],
|
|
|
|
extends: [
|
|
|
|
'eslint:recommended',
|
|
|
|
'plugin:import/typescript',
|
|
|
|
'plugin:@typescript-eslint/recommended',
|
|
|
|
'plugin:eslint-comments/recommended',
|
|
|
|
'plugin:react/recommended',
|
|
|
|
'plugin:react-hooks/recommended',
|
|
|
|
'plugin:jsx-a11y/recommended'
|
2022-10-04 10:32:55 -07:00
|
|
|
],
|
|
|
|
rules: {
|
2023-05-04 13:04:09 -07:00
|
|
|
'@typescript-eslint/no-floating-promises': ['error'],
|
|
|
|
|
2023-05-04 07:58:11 -07:00
|
|
|
'sonarjs/cognitive-complexity': ['error']
|
2022-10-04 10:32:55 -07:00
|
|
|
}
|
2020-04-25 05:06:56 -07:00
|
|
|
}
|
|
|
|
]
|
2020-06-28 00:38:06 -07:00
|
|
|
};
|