const restrictedGlobals = require('confusing-browser-globals'); module.exports = { root: true, plugins: [ '@babel', 'react', 'promise', 'import', 'eslint-comments' ], env: { node: true, es6: true, es2017: true, es2020: true }, parserOptions: { ecmaVersion: 2020, sourceType: 'module', ecmaFeatures: { impliedStrict: true, jsx: true } }, extends: [ 'eslint:recommended', 'plugin:react/recommended', // 'plugin:promise/recommended', 'plugin:import/errors', 'plugin:eslint-comments/recommended', 'plugin:compat/recommended' ], rules: { 'array-callback-return': ['error'], 'block-spacing': ['error'], 'brace-style': ['error', '1tbs', { 'allowSingleLine': true }], 'comma-dangle': ['error', 'never'], 'comma-spacing': ['error'], 'eol-last': ['error'], 'indent': ['error', 4, { 'SwitchCase': 1 }], 'jsx-quotes': ['error', 'prefer-single'], 'keyword-spacing': ['error'], 'max-statements-per-line': ['error'], 'no-empty-function': ['error'], 'no-floating-decimal': ['error'], 'no-multi-spaces': ['error'], 'no-multiple-empty-lines': ['error', { 'max': 1 }], 'no-restricted-globals': ['error'].concat(restrictedGlobals), 'no-trailing-spaces': ['error'], '@babel/no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], 'one-var': ['error', 'never'], 'padded-blocks': ['error', 'never'], 'prefer-const': ['error', {'destructuring': 'all'}], 'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }], '@babel/semi': ['error'], 'no-var': ['error'], 'space-before-blocks': ['error'], 'space-infix-ops': 'error', 'yoda': 'error' }, settings: { react: { version: 'detect' }, 'import/extensions': [ '.js', '.ts', '.jsx', '.tsx' ], 'import/parsers': { '@typescript-eslint/parser': [ '.ts', '.tsx' ] }, 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' ] }, overrides: [ { files: [ './src/**/*.js', './src/**/*.ts' ], parser: '@babel/eslint-parser', 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', 'Events': 'writable', 'chrome': 'writable', 'DlnaProfilePage': 'writable', 'DashboardPage': 'writable', 'Emby': 'readonly', 'getParameterByName': 'writable', 'getWindowLocationSearch': 'writable', 'Globalize': 'writable', 'Hls': 'writable', 'dfnshelper': 'writable', 'LibraryMenu': 'writable', 'LinkParser': 'writable', 'LiveTvHelpers': 'writable', 'Loading': 'writable', 'MetadataEditor': 'writable', 'PlaylistViewer': 'writable', 'ServerNotifications': 'writable', 'TaskButton': 'writable', 'UserParentalControlPage': 'writable', 'Windows': 'readonly' }, rules: { } }, { files: [ './src/**/*.ts', './src/**/*.tsx' ], parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint'], 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' ] } ] };