import js from "@eslint/js"; import ts from "typescript-eslint"; import vue from "eslint-plugin-vue"; import globals from "globals"; import prettier from "eslint-config-prettier/flat"; export default [ { ignores: [ "node_modules/**", ".nuxt/**", ".output/**", ".data/**", "test-results/**", "tests/fixtures/runs/**", "docs/**", ".claude/skills/crashwork-ops/**", "public/**", ], }, { linterOptions: { reportUnusedDisableDirectives: "error" }, }, js.configs.recommended, ...vue.configs["flat/essential"], ...ts.configs.recommended.map((config) => ({ ...config, files: ["**/*.{ts,mts,cts}"], })), { files: ["app/**/*.{js,vue}"], languageOptions: { globals: globals.browser }, }, { files: ["*.mjs", "nuxt.config.ts", "scripts/**/*.mjs", "tests/**/*.mjs"], languageOptions: { globals: globals.node }, }, { // Playwright 的 evaluate 回调在浏览器运行,测试文件同时使用 Node 与 DOM 全局。 files: ["tests/**/*.mjs"], languageOptions: { globals: globals.browser }, }, { // Nuxt 路由和布局文件名由框架约定,不能要求多词组件名。 files: ["app/pages/**/*.vue", "app/layouts/**/*.vue"], rules: { "vue/multi-word-component-names": "off" }, }, { // 恢复的互操作辅助只在宿主提供 require 时访问它,不为浏览器注入 Node 全局。 files: ["app/lib/rolldown-runtime.js"], languageOptions: { globals: { require: "readonly" } }, }, { files: ["nuxt.config.ts"], languageOptions: { globals: { defineNuxtConfig: "readonly" } }, }, { // 最佳努力清理和存储降级允许空 catch;其他空块仍报错。 rules: { "no-empty": ["error", { allowEmptyCatch: true }], }, }, { files: ["**/*.{js,mjs,cjs,vue}"], rules: { // 恢复的渲染回调保留位置参数,catch 也可不使用错误绑定;局部绑定仍检查。 "no-unused-vars": ["error", { args: "none", caughtErrors: "none" }], }, }, prettier, ];