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