import js from '@eslint/js' import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' import pluginOxlint from 'eslint-plugin-oxlint' import pluginVue from 'eslint-plugin-vue' import { defineConfig, globalIgnores } from 'eslint/config' import globals from 'globals' export default defineConfig([ { name: 'app/files-to-lint', files: ['**/*.{js,mjs,jsx,vue}'], }, globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), { languageOptions: { globals: { ...globals.browser, // 自动引入的全局变量 'ref': 'readonly', 'reactive': 'readonly', 'computed': 'readonly', 'watch': 'readonly', 'watchEffect': 'readonly', 'onMounted': 'readonly', 'onUnmounted': 'readonly', 'onBeforeMount': 'readonly', 'onBeforeUnmount': 'readonly', 'nextTick': 'readonly', 'defineComponent': 'readonly', 'h': 'readonly', 'inject': 'readonly', 'provide': 'readonly', 'toRef': 'readonly', 'toRefs': 'readonly', 'unref': 'readonly', 'isRef': 'readonly', 'isReactive': 'readonly', 'markRaw': 'readonly', 'shallowRef': 'readonly', 'shallowReactive': 'readonly', 'readonly': 'readonly', 'shallowReadonly': 'readonly', 'toRaw': 'readonly', 'customRef': 'readonly', 'triggerRef': 'readonly', 'getCurrentInstance': 'readonly', 'useAttrs': 'readonly', 'useSlots': 'readonly', 'useCssModule': 'readonly', 'useCssVars': 'readonly', 'useId': 'readonly', 'useModel': 'readonly', 'useTemplateRef': 'readonly', 'useLink': 'readonly', 'useRoute': 'readonly', 'useRouter': 'readonly', 'onBeforeRouteLeave': 'readonly', 'onBeforeRouteUpdate': 'readonly', 'defineStore': 'readonly', 'storeToRefs': 'readonly', 'createPinia': 'readonly', 'setActivePinia': 'readonly', 'getActivePinia': 'readonly', 'mapState': 'readonly', 'mapGetters': 'readonly', 'mapActions': 'readonly', 'mapStores': 'readonly', 'mapWritableState': 'readonly', 'ElMessage': 'readonly', 'ElMessageBox': 'readonly', 'ElNotification': 'readonly', 'ElLoading': 'readonly', 'axios': 'readonly', 'dayjs': 'readonly', 'isEmpty': 'readonly', 'isEqual': 'readonly', 'get': 'readonly', 'set': 'readonly', 'omit': 'readonly', 'pick': 'readonly', 'merge': 'readonly', 'uniq': 'readonly', 'uniqBy': 'readonly', 'groupBy': 'readonly', 'keyBy': 'readonly', 'sortBy': 'readonly', 'orderBy': 'readonly', 'filter': 'readonly', 'map': 'readonly', 'reduce': 'readonly', 'find': 'readonly', 'findIndex': 'readonly', 'includes': 'readonly', 'startsWith': 'readonly', 'endsWith': 'readonly', 'camelCase': 'readonly', 'kebabCase': 'readonly', 'snakeCase': 'readonly', 'capitalize': 'readonly', 'upperCase': 'readonly', 'lowerCase': 'readonly', 'trim': 'readonly', 'escape': 'readonly', 'unescape': 'readonly', }, }, }, js.configs.recommended, ...pluginVue.configs['flat/essential'], ...pluginOxlint.configs['flat/recommended'], { rules: { 'vue/multi-word-component-names': 'off', 'no-unused-vars': 'warn', }, }, skipFormatting, ])