Files
plex-playlist/frontend/eslint.config.js
T

115 lines
3.0 KiB
JavaScript
Raw Normal View History

2026-06-19 17:00:57 -04:00
import typescript from '@typescript-eslint/eslint-plugin';
import typescriptParser from '@typescript-eslint/parser';
import vue from 'eslint-plugin-vue';
import vueParser from 'vue-eslint-parser';
import jsdoc from 'eslint-plugin-jsdoc';
import tsdoc from 'eslint-plugin-tsdoc';
import security from 'eslint-plugin-security';
const securityRules = security.configs?.recommended?.rules ?? {};
2025-10-18 21:33:45 -04:00
export default [
// Ignore patterns (replaces .eslintignore)
{
ignores: [
'node_modules/',
'.yarn/',
2025-10-18 21:33:45 -04:00
'dist/',
'dist-ssr/',
'*.local',
'coverage/',
'.env*',
'.vscode/',
'.idea/',
'*.tmp',
2026-06-19 17:00:57 -04:00
'*.temp',
],
2025-10-18 21:33:45 -04:00
},
// JavaScript files
{
files: ['**/*.{js,mjs,cjs}'],
languageOptions: {
ecmaVersion: 'latest',
2026-06-19 17:00:57 -04:00
sourceType: 'module',
2025-10-18 21:33:45 -04:00
},
plugins: {
security,
},
2025-10-18 21:33:45 -04:00
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
2026-06-19 17:00:57 -04:00
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
...securityRules,
2026-06-19 17:00:57 -04:00
},
2025-10-18 21:33:45 -04:00
},
// TypeScript files
{
files: ['**/*.{ts,tsx}'],
languageOptions: {
parser: typescriptParser,
ecmaVersion: 'latest',
2026-06-19 17:00:57 -04:00
sourceType: 'module',
2025-10-18 21:33:45 -04:00
},
plugins: {
'@typescript-eslint': typescript,
jsdoc,
2026-06-19 17:00:57 -04:00
tsdoc,
security,
2025-10-18 21:33:45 -04:00
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
...securityRules,
2025-10-18 21:33:45 -04:00
// TSDoc rules for TypeScript files
'tsdoc/syntax': 'error',
'jsdoc/require-description': 'error',
'jsdoc/require-param': 'error',
'jsdoc/require-param-description': 'error',
'jsdoc/require-returns': 'error',
'jsdoc/require-returns-description': 'error',
'jsdoc/check-param-names': 'error',
'jsdoc/check-tag-names': 'error',
'jsdoc/check-types': 'error',
2026-06-19 17:00:57 -04:00
'jsdoc/valid-types': 'error',
},
2025-10-18 21:33:45 -04:00
},
// Vue files
{
files: ['**/*.vue'],
languageOptions: {
parser: vueParser,
parserOptions: {
parser: typescriptParser,
ecmaVersion: 'latest',
2026-06-19 17:00:57 -04:00
sourceType: 'module',
},
2025-10-18 21:33:45 -04:00
},
plugins: {
vue,
'@typescript-eslint': typescript,
jsdoc,
2026-06-19 17:00:57 -04:00
tsdoc,
security,
2025-10-18 21:33:45 -04:00
},
rules: {
...vue.configs['vue3-essential'].rules,
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
...securityRules,
2025-10-18 21:33:45 -04:00
// TSDoc rules for Vue files
'tsdoc/syntax': 'error',
'jsdoc/require-description': 'error',
'jsdoc/require-param': 'error',
'jsdoc/require-param-description': 'error',
'jsdoc/require-returns': 'error',
'jsdoc/require-returns-description': 'error',
'jsdoc/check-param-names': 'error',
'jsdoc/check-tag-names': 'error',
'jsdoc/check-types': 'error',
2026-06-19 17:00:57 -04:00
'jsdoc/valid-types': 'error',
},
},
];