import { includeIgnoreFile } from "@eslint/compat"; import type { TSESLint } from "@typescript-eslint/utils"; import prettierConfig from "eslint-config-prettier"; import astro from "eslint-plugin-astro"; import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; import tseslint from "typescript-eslint"; // Import modular configurations import { astroConfig } from "./.eslint/astro"; import { baseConfig } from "./.eslint/base"; import { configFilesConfig } from "./.eslint/config-files"; import { importConfigArray } from "./.eslint/import"; import { javascriptConfig } from "./.eslint/javascript"; import { jsxA11yConfig } from "./.eslint/jsx-a11y"; import { reactConfig, reactHooksConfig } from "./.eslint/react"; import { testConfig } from "./.eslint/test"; import { createTypescriptConfig } from "./.eslint/typescript"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const tsConfigPath = resolve(__dirname, "./tsconfig.json"); const ignoresConfig = { name: "eslint/ignores", ignores: [ // Build outputs "**/dist/**", "**/build/**", "**/.astro/**", "**/node_modules/**", // Test outputs "**/coverage/**", "**/playwright-report/**", "**/test-results/**", // Config files that don't need linting "**/*.config.js", "**/*.config.mjs", "**/wrangler.toml", // Other common ignores "**/.next/**", "**/.nuxt/**", "**/.output/**", "**/.vercel/**", "**/.netlify/**", "**/public/**", "**/*.min.js", "**/*.d.ts", "**/CHANGELOG.md", "**/README.md", ], } satisfies TSESLint.FlatConfig.Config; const config: TSESLint.FlatConfig.ConfigArray = tseslint.config( // Include .gitignore patterns includeIgnoreFile(resolve(__dirname, ".gitignore")), // Core configurations ignoresConfig, baseConfig, // TypeScript ecosystem ...tseslint.configs.strict, ...tseslint.configs.stylistic, createTypescriptConfig(tsConfigPath), // Import management ...importConfigArray, // Framework specific reactConfig, reactHooksConfig, jsxA11yConfig, // Astro specific ...astro.configs.recommended, astroConfig, // Language specific javascriptConfig, // Special cases testConfig, configFilesConfig, // Prettier integration (must be last) prettierConfig, ); export default config;