www/eslint.config.ts
2025-06-02 13:11:57 +12:00

97 lines
2.4 KiB
TypeScript

import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
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 tseslint, { configs } from 'typescript-eslint'
// Import modular configurations
import { astroConfig } from './.eslint/astro'
import { baseConfig } from './.eslint/base'
import { configFilesConfig } from './.eslint/config-files'
import { cspellConfig } from './.eslint/cspell'
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/**',
'**/.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
...configs.strict,
...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,
// Spell checking
cspellConfig,
// Prettier integration (must be last)
prettierConfig
)
export default config