import vue from 'eslint-plugin-vue'; import globals from 'globals'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import js from '@eslint/js'; import { FlatCompat } from '@eslint/eslintrc'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const compat = new FlatCompat({ baseDirectory: __dirname, recommendedConfig: js.configs.recommended, allConfig: js.configs.all, }); export default [ ...compat.extends( 'standard', 'eslint:recommended', 'plugin:vue/vue3-strongly-recommended', 'plugin:cypress/recommended', 'prettier', ), { plugins: { vue, cypress: 'eslint-plugin-cypress', eslint: 'eslint-plugin-import', }, languageOptions: { globals: { ...globals.node, ...globals.browser, ...vue.environments['setup-compiler-macros']['setup-compiler-macros'], ga: 'readonly', cordova: 'readonly', __statics: 'readonly', __QUASAR_SSR__: 'readonly', __QUASAR_SSR_SERVER__: 'readonly', __QUASAR_SSR_CLIENT__: 'readonly', __QUASAR_SSR_PWA__: 'readonly', process: 'readonly', Capacitor: 'readonly', chrome: 'readonly', }, ecmaVersion: 2018, sourceType: 'module', parserOptions: { parser: '@babel/eslint-parser', }, }, rules: { 'jest/expect-expect': 'error', 'generator-star-spacing': 'error', 'arrow-parens': 'error', 'one-var': 'error', 'no-void': 'error', 'multiline-ternary': 'error', 'import/first': 'error', 'import/named': 'error', 'import/namespace': 'error', 'import/default': 'error', 'import/export': 'error', 'import/extensions': 'error', 'import/no-unresolved': 'error', 'import/no-extraneous-dependencies': 'error', semi: 'error', 'space-before-function-paren': 'error', 'no-undef': 'error', 'no-unused-vars': 'warn', 'no-console': 'error', 'no-debugger': 'error', 'no-useless-escape': 'error', 'no-prototype-builtins': 'error', 'no-async-promise-executor': 'error', 'no-irregular-whitespace': 'error', 'no-constant-condition': 'error', 'no-unsafe-finally': 'error', 'no-extend-native': 'error', 'vue/no-unused-components': 'error', 'vue/no-unused-properties': 'error', 'vue/no-multiple-template-root': 'error', 'vue/no-v-html': 'error', 'vue/no-v-model-argument': 'error', 'vue/no-parsing-error': 'error', 'vue/no-deprecated-slot-attribute': 'error', 'prefer-promise-reject-errors': 'error', }, }, ...compat.extends('plugin:cypress/recommended').map((config) => ({ ...config, files: ['test/cypress/**/*.*'], })), { files: ['test/cypress/**/*.*'], rules: { semi: 'error', 'space-before-function-paren': 'error', 'prefer-promise-reject-errors': 'error', 'vue/no-multiple-template-root': 'error', }, }, ];