import pluginVue from 'eslint-plugin-vue'; import tseslint from 'typescript-eslint'; import globals from 'globals'; import vueParse from 'vue-eslint-parser'; import base from './base.js'; import {Linter} from 'eslint'; import {defineConfig} from 'eslint/config'; import {rules as tsRules} from './ts.js'; const rules: Linter.RulesRecord = { 'vue/multi-word-component-names': 'off', 'vue/html-self-closing': 'off', ...tsRules, }; export interface VueConfigOptions { tsconfigRootDir?: string; project?: string | string[] | boolean; } export function configureVue(options: VueConfigOptions = {}): Linter.Config[] { const {tsconfigRootDir = './', project = ['./tsconfig.json']} = options; const files = ['**/*.vue']; return [ ...base, ...pluginVue.configs['flat/essential'], ...pluginVue.configs['flat/strongly-recommended'], { files, plugins: { '@typescript-eslint': tseslint.plugin, }, languageOptions: { ecmaVersion: 'latest', globals: globals.browser, parser: vueParse, parserOptions: { parser: tseslint.parser, sourceType: 'module', tsconfigRootDir, project: project, extraFileExtensions: ['.vue'], }, }, rules, }, ]; } export default defineConfig(configureVue());