import pluginJs from '@eslint/js'; import configPrettier from 'eslint-config-prettier'; import pluginSimpleImportSort from 'eslint-plugin-simple-import-sort'; import pluginVue from 'eslint-plugin-vue'; import globals from 'globals'; import tseslint from 'typescript-eslint'; /** @type {import('eslint').Linter.Config[]} */ export default [ { files: ['**/*.{js,mjs,cjs,ts,vue}'] }, { languageOptions: { globals: { ...globals.browser, NodeJS: true, }, }, }, pluginJs.configs.recommended, ...tseslint.configs.recommended, ...pluginVue.configs['flat/essential'], configPrettier, { files: ['**/*.vue'], languageOptions: { parserOptions: { parser: tseslint.parser } }, rules: { 'vue/multi-word-component-names': ['warn', { ignores: ['index', 'exception'] }], }, }, { plugins: { 'simple-import-sort': pluginSimpleImportSort }, rules: { 'simple-import-sort/imports': 'warn', 'simple-import-sort/exports': 'warn', }, }, { rules: { indent: [ 'error', 2, { SwitchCase: 1, CallExpression: { arguments: 'off' }, ignoredNodes: ['ConditionalExpression *'] }, ], quotes: ['error', 'single'], semi: ['error', 'always'], 'max-len': ['warn', { code: 120, ignoreComments: true, ignoreUrls: true, ignoreTemplateLiterals: true }], 'max-lines': ['warn', { max: 1000, skipBlankLines: true, skipComments: true }], }, }, ];