jellyfin-web/.eslintrc.js

247 lines
7.5 KiB
JavaScript
Raw Normal View History

2020-08-25 01:12:35 +00:00
const restrictedGlobals = require('confusing-browser-globals');
2020-04-25 12:06:56 +00:00
module.exports = {
root: true,
plugins: [
2020-07-31 08:01:51 +00:00
'@babel',
2021-05-28 16:31:31 +00:00
'react',
2020-04-25 12:06:56 +00:00
'promise',
'import',
'eslint-comments'
],
env: {
node: true,
es6: true,
es2017: true,
es2020: true
},
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module',
ecmaFeatures: {
2021-05-27 15:30:03 +00:00
impliedStrict: true,
jsx: true
2020-04-25 12:06:56 +00:00
}
},
extends: [
'eslint:recommended',
2021-05-28 16:31:31 +00:00
'plugin:react/recommended',
2020-04-25 12:06:56 +00:00
// 'plugin:promise/recommended',
'plugin:import/errors',
'plugin:eslint-comments/recommended',
'plugin:compat/recommended'
],
rules: {
'array-callback-return': ['error'],
2020-05-30 21:15:06 +00:00
'block-spacing': ['error'],
2020-08-01 11:50:37 +00:00
'brace-style': ['error', '1tbs', { 'allowSingleLine': true }],
2020-05-30 21:15:06 +00:00
'comma-dangle': ['error', 'never'],
'comma-spacing': ['error'],
'default-case-last': ['error'],
2020-05-30 21:15:06 +00:00
'eol-last': ['error'],
'indent': ['error', 4, { 'SwitchCase': 1 }],
2021-05-28 16:31:31 +00:00
'jsx-quotes': ['error', 'prefer-single'],
2020-05-30 21:15:06 +00:00
'keyword-spacing': ['error'],
'max-statements-per-line': ['error'],
'no-duplicate-imports': ['error'],
2021-11-22 15:36:49 +00:00
'no-empty-function': ['error'],
2020-05-30 21:15:06 +00:00
'no-floating-decimal': ['error'],
'no-multi-spaces': ['error'],
'no-multiple-empty-lines': ['error', { 'max': 1 }],
2020-08-25 01:12:35 +00:00
'no-restricted-globals': ['error'].concat(restrictedGlobals),
2022-08-09 11:51:43 +00:00
'no-return-await': ['error'],
2020-05-30 21:15:06 +00:00
'no-trailing-spaces': ['error'],
2020-08-01 02:07:00 +00:00
'@babel/no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }],
2022-04-13 14:33:06 +00:00
'no-void': ['error', { 'allowAsStatement': true }],
'no-nested-ternary': ['error'],
2020-05-30 21:15:06 +00:00
'one-var': ['error', 'never'],
2020-07-27 06:06:46 +00:00
'padded-blocks': ['error', 'never'],
'prefer-const': ['error', { 'destructuring': 'all' }],
2020-05-30 21:15:06 +00:00
'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }],
2020-08-01 02:07:00 +00:00
'@babel/semi': ['error'],
2020-10-07 15:47:23 +00:00
'no-var': ['error'],
2020-05-30 21:15:06 +00:00
'space-before-blocks': ['error'],
2020-07-30 14:05:34 +00:00
'space-infix-ops': 'error',
2022-04-21 17:40:17 +00:00
'yoda': 'error',
'no-sequences': ['error', { 'allowInParentheses': false }]
2020-04-25 12:06:56 +00:00
},
2021-05-28 16:31:31 +00:00
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'
]
2021-05-28 16:31:31 +00:00
},
2020-04-25 12:06:56 +00:00
overrides: [
// Config files and development scripts
{
files: [
'./babel.config.js',
'./.eslintrc.js',
'./postcss.config.js',
'./webpack.*.js',
'./scripts/**/*.js'
]
},
// JavaScript source files
2020-04-25 12:06:56 +00:00
{
files: [
'./src/**/*.js',
'./src/**/*.ts'
2020-04-25 12:06:56 +00:00
],
2020-07-31 08:01:51 +00:00
parser: '@babel/eslint-parser',
2020-04-25 12:06:56 +00: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 23:46:43 +00:00
'Events': 'writable',
2020-04-25 12:06:56 +00:00
'chrome': 'writable',
'DlnaProfilePage': 'writable',
'DashboardPage': 'writable',
'Emby': 'readonly',
'Globalize': 'writable',
'Hls': 'writable',
'dfnshelper': 'writable',
'LibraryMenu': 'writable',
'LinkParser': 'writable',
'LiveTvHelpers': 'writable',
2021-05-22 11:38:20 +00:00
'Loading': 'writable',
2020-04-25 12:06:56 +00:00
'MetadataEditor': 'writable',
2021-06-11 17:16:11 +00:00
'ServerNotifications': 'writable',
'TaskButton': 'writable',
2020-04-25 12:06:56 +00:00
'UserParentalControlPage': 'writable',
'Windows': 'readonly'
},
rules: {
}
},
// TypeScript source files
{
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'
]
2020-04-25 12:06:56 +00:00
}
]
2020-06-28 07:38:06 +00:00
};