11import  {  rulesDisabledForVueAndSvelteFiles  }  from  './constants.js' ; 
2- import  type  {  Linter  }  from  'eslint' ; 
2+ 
3+ // Some type helpers for better type inference 
4+ type  LegacyConfig  =  { 
5+   rules ?: Record < string ,  'off' > ; 
6+   overrides ?: { 
7+     files : string [ ] ; 
8+     excludedFiles ?: string [ ] ; 
9+     rules ?: Record < string ,  'off' > ; 
10+   } [ ] ; 
11+ } ; 
12+ 
13+ type  FlatConfig  =  { 
14+   name ?: string ; 
15+   rules ?: Record < string ,  'off' > ; 
16+   ignores ?: string [ ] ; 
17+ } ; 
318
419// for eslint legacy configuration 
5- export  const  overrideDisabledRulesForVueAndSvelteFiles  =  ( 
6-   config : Linter . LegacyConfig < Record < string ,  'off' > > 
7- ) : Linter . LegacyConfig < Record < string ,  'off' > >  =>  { 
20+ export  const  overrideDisabledRulesForVueAndSvelteFiles  =  < 
21+   C  extends  LegacyConfig , 
22+ > ( 
23+   config : C 
24+ ) : C  =>  { 
825  const  foundRules  =  Object . keys ( config . rules ! ) . filter ( ( rule )  => 
926    rulesDisabledForVueAndSvelteFiles . includes ( rule ) 
1027  ) ; 
@@ -32,10 +49,12 @@ export const overrideDisabledRulesForVueAndSvelteFiles = (
3249  return  newConfig ; 
3350} ; 
3451
52+ export  type  SplittedFlatConfig < C  extends  FlatConfig >  =  [ C ]  |  [ C ,  FlatConfig ] ; 
53+ 
3554// for eslint flat configuration 
36- export  const  splitDisabledRulesForVueAndSvelteFiles  =  ( 
37-   config : Linter . Config 
38- ) : Linter . Config [ ]  =>  { 
55+ export  const  splitDisabledRulesForVueAndSvelteFiles  =  < C   extends   FlatConfig > ( 
56+   config : C 
57+ ) : SplittedFlatConfig < C >  =>  { 
3958  const  foundRules  =  Object . keys ( config . rules ! ) . filter ( ( rule )  => 
4059    rulesDisabledForVueAndSvelteFiles . includes ( rule ) 
4160  ) ; 
@@ -46,7 +65,7 @@ export const splitDisabledRulesForVueAndSvelteFiles = (
4665
4766  const  oldConfig  =  structuredClone ( config ) ; 
4867
49-   const  newConfig : Linter . Config  =  { 
68+   const  newConfig : FlatConfig  =  { 
5069    // flat configs use minimatch syntax 
5170    name : 'oxlint/vue-svelte-exceptions' , 
5271    ignores : [ '**/*.vue' ,  '**/*.svelte' ] , 
@@ -60,3 +79,17 @@ export const splitDisabledRulesForVueAndSvelteFiles = (
6079
6180  return  [ oldConfig ,  newConfig ] ; 
6281} ; 
82+ 
83+ export  const  splitDisabledRulesForVueAndSvelteFilesDeep  =  < 
84+   T  extends  Record < string ,  FlatConfig > , 
85+ > ( 
86+   config : T 
87+ ) : {  [ K  in  keyof  T ] : SplittedFlatConfig < T [ K ] >  }  =>  { 
88+   const  result  =  { }  as  {  [ K  in  keyof  T ] : SplittedFlatConfig < T [ K ] >  } ; 
89+ 
90+   for  ( const  name  in  config )  { 
91+     result [ name ]  =  splitDisabledRulesForVueAndSvelteFiles ( config [ name ] ) ; 
92+   } 
93+ 
94+   return  result ; 
95+ } ; 
0 commit comments