@@ -17,21 +17,59 @@ import 'eslint-import-resolver-typescript' // required for eslint-plugin-import-
1717import tailwind from 'eslint-plugin-tailwindcss'
1818
1919// Config
20- import { IGNORE_PATTERNS } from './ignore-patterns'
20+ import { ignorePatterns } from './ignore-patterns'
2121import { SLOW_RULES } from './slow-rules'
2222import { IMPORTING_RULES } from './importing-rules'
2323import { TYPESCRIPT_RULES } from './typescript-rules'
2424import { STYLISTIC_RULES } from './stylistic-rules'
25- import { SVELTE_RULES } from './svelte-rules'
25+ import { svelteESLint } from './svelte-rules'
26+ import type { ParserOptions } from './eslint-types.js'
2627
27- export function eslint ( metaURL : string ) {
28+ interface ESLintOptions {
29+ /**
30+ ### Default ignores
31+
32+ '\*\*\/.svelte-kit/*'
33+ '\*\*\/node_modules/**'
34+ '\*\*\/node_modules/zod/**'
35+ '\*\*\/node_modules/zod/lib/**'
36+ '\*\*\/node_modules/zod/lib/index.mjs'
37+ '\*\*\/.wrangler/*'
38+ '\*\*\/.git/*'
39+ '\*\*\/.mongodb/*'
40+ '\*\*\/.cloudflare/*'
41+ '\*\*\/lang/src/paraglide/*'
42+ '\*\*\/src-tauri/target/*'
43+ '\*\*\/_package/*'
44+ '\*\*\/.turbo/**'
45+ */
46+ ignores ?: string [ ]
47+ }
48+
49+ export default function eslint ( metaURL : string , opts : ESLintOptions = { } ) {
2850 const gitignorePath = fileURLToPath ( new URL ( './.gitignore' , metaURL ) )
2951 const tsconfigPath = fileURLToPath ( new URL ( './tsconfig.json' , metaURL ) )
3052 const tsconfigPaths = fileURLToPath ( new URL ( './*/tsconfig.json' , metaURL ) )
3153
54+ const parserOptions = {
55+ projectService : { defaultProject : tsconfigPath } ,
56+ parser : ts . parser ,
57+ // Optimizing for performance
58+ tsconfigRootDir : metaURL ,
59+ project : [
60+ tsconfigPath ,
61+ tsconfigPaths
62+ ] ,
63+ extraFileExtensions : [ '.svelte' ] ,
64+ svelteConfig,
65+ cacheLifetime : { glob : 'Infinity' } ,
66+ // Add cache strategy for better performance
67+ cache : true
68+ } satisfies ParserOptions
69+
3270 return ts . config (
3371 includeIgnoreFile ( gitignorePath ) ,
34- IGNORE_PATTERNS ,
72+ ignorePatterns ( ... ( opts ?. ignores || [ ] ) ) ,
3573 js . configs . recommended ,
3674 ts . configs . recommended ,
3775 svelte . configs . recommended ,
@@ -45,21 +83,7 @@ export function eslint(metaURL: string) {
4583 ...globals . browser ,
4684 ...globals . node
4785 } ,
48- parserOptions : {
49- projectService : { defaultProject : tsconfigPath } ,
50- extraFileExtensions : [ '.svelte' ] ,
51- parser : ts . parser ,
52- svelteConfig,
53- // Optimizing for performance
54- tsconfigRootDir : metaURL ,
55- project : [
56- tsconfigPath ,
57- tsconfigPaths
58- ] ,
59- cacheLifetime : { glob : 'Infinity' } ,
60- // Add cache strategy for better performance
61- cache : true
62- }
86+ parserOptions
6387 } ,
6488 plugins : {
6589 '@stylistic' : stylistic ,
@@ -70,10 +94,9 @@ export function eslint(metaURL: string) {
7094 ...SLOW_RULES ,
7195 ...IMPORTING_RULES ,
7296 ...TYPESCRIPT_RULES ,
73- ...STYLISTIC_RULES ,
74- ...SVELTE_RULES
97+ ...STYLISTIC_RULES
7598 }
76- }
77-
99+ } ,
100+ svelteESLint ( svelteConfig , parserOptions )
78101 )
79102}
0 commit comments