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 ?? {}; export default [ // Ignore patterns (replaces .eslintignore) { ignores: [ 'node_modules/', '.yarn/', 'dist/', 'dist-ssr/', '*.local', 'coverage/', '.env*', '.vscode/', '.idea/', '*.tmp', '*.temp', ], }, // JavaScript files { files: ['**/*.{js,mjs,cjs}'], languageOptions: { ecmaVersion: 'latest', sourceType: 'module', }, plugins: { security, }, rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', ...securityRules, }, }, // TypeScript files { files: ['**/*.{ts,tsx}'], languageOptions: { parser: typescriptParser, ecmaVersion: 'latest', sourceType: 'module', }, plugins: { '@typescript-eslint': typescript, jsdoc, tsdoc, security, }, rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', ...securityRules, // 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', 'jsdoc/valid-types': 'error', }, }, // Vue files { files: ['**/*.vue'], languageOptions: { parser: vueParser, parserOptions: { parser: typescriptParser, ecmaVersion: 'latest', sourceType: 'module', }, }, plugins: { vue, '@typescript-eslint': typescript, jsdoc, tsdoc, security, }, 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, // 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', 'jsdoc/valid-types': 'error', }, }, ];