@@ -11,98 +11,108 @@ function filterRules(rules, predicate) {
1111
1212/** 
1313 * @param  {object } rules - rules object mapping rule name to rule module 
14-  * @returns  {Record<string, 2> } 
14+  * @returns  {Record<string, 2 | 'error' > } 
1515 */ 
1616function  configureAsError ( rules )  { 
1717  return  fromEntries ( Object . keys ( rules ) . map ( ( key )  =>  [ `react/${ key }  ,  2 ] ) ) ; 
1818} 
1919
20+ /** @type  {Partial<typeof allRules> } */ 
2021const  activeRules  =  filterRules ( allRules ,  ( rule )  =>  ! rule . meta . deprecated ) ; 
22+ /** @type  {Record<keyof typeof activeRules, 2 | 'error'> } */ 
2123const  activeRulesConfig  =  configureAsError ( activeRules ) ; 
2224
25+ /** @type  {Partial<typeof allRules> } */ 
2326const  deprecatedRules  =  filterRules ( allRules ,  ( rule )  =>  rule . meta . deprecated ) ; 
2427
28+ /** @type  {['react'] } */ 
2529// for legacy config system 
2630const  plugins  =  [ 
2731  'react' , 
2832] ; 
2933
30- const  plugin  =  { 
31-   deprecatedRules, 
32-   rules : allRules , 
33-   configs : { 
34-     recommended : { 
35-       plugins, 
36-       parserOptions : { 
37-         ecmaFeatures : { 
38-           jsx : true , 
39-         } , 
40-       } , 
41-       rules : { 
42-         'react/display-name' : 2 , 
43-         'react/jsx-key' : 2 , 
44-         'react/jsx-no-comment-textnodes' : 2 , 
45-         'react/jsx-no-duplicate-props' : 2 , 
46-         'react/jsx-no-target-blank' : 2 , 
47-         'react/jsx-no-undef' : 2 , 
48-         'react/jsx-uses-react' : 2 , 
49-         'react/jsx-uses-vars' : 2 , 
50-         'react/no-children-prop' : 2 , 
51-         'react/no-danger-with-children' : 2 , 
52-         'react/no-deprecated' : 2 , 
53-         'react/no-direct-mutation-state' : 2 , 
54-         'react/no-find-dom-node' : 2 , 
55-         'react/no-is-mounted' : 2 , 
56-         'react/no-render-return-value' : 2 , 
57-         'react/no-string-refs' : 2 , 
58-         'react/no-unescaped-entities' : 2 , 
59-         'react/no-unknown-property' : 2 , 
60-         'react/no-unsafe' : 0 , 
61-         'react/prop-types' : 2 , 
62-         'react/react-in-jsx-scope' : 2 , 
63-         'react/require-render-return' : 2 , 
34+ const  configs  =  { 
35+   recommended : { 
36+     plugins, 
37+     parserOptions : { 
38+       ecmaFeatures : { 
39+         jsx : true , 
6440      } , 
6541    } , 
66-     all : { 
67-       plugins, 
68-       parserOptions : { 
69-         ecmaFeatures : { 
70-           jsx : true , 
71-         } , 
72-       } , 
73-       rules : activeRulesConfig , 
42+     rules : { 
43+       'react/display-name' : 2 , 
44+       'react/jsx-key' : 2 , 
45+       'react/jsx-no-comment-textnodes' : 2 , 
46+       'react/jsx-no-duplicate-props' : 2 , 
47+       'react/jsx-no-target-blank' : 2 , 
48+       'react/jsx-no-undef' : 2 , 
49+       'react/jsx-uses-react' : 2 , 
50+       'react/jsx-uses-vars' : 2 , 
51+       'react/no-children-prop' : 2 , 
52+       'react/no-danger-with-children' : 2 , 
53+       'react/no-deprecated' : 2 , 
54+       'react/no-direct-mutation-state' : 2 , 
55+       'react/no-find-dom-node' : 2 , 
56+       'react/no-is-mounted' : 2 , 
57+       'react/no-render-return-value' : 2 , 
58+       'react/no-string-refs' : 2 , 
59+       'react/no-unescaped-entities' : 2 , 
60+       'react/no-unknown-property' : 2 , 
61+       'react/no-unsafe' : 0 , 
62+       'react/prop-types' : 2 , 
63+       'react/react-in-jsx-scope' : 2 , 
64+       'react/require-render-return' : 2 , 
7465    } , 
75-     'jsx-runtime' : { 
76-       plugins, 
77-       parserOptions : { 
78-         ecmaFeatures : { 
79-           jsx : true , 
80-         } , 
81-         jsxPragma : null ,  // for @typescript /eslint-parser 
66+   } , 
67+   all : { 
68+     plugins, 
69+     parserOptions : { 
70+       ecmaFeatures : { 
71+         jsx : true , 
8272      } , 
83-       rules : { 
84-         'react/react-in-jsx-scope' : 0 , 
85-         'react/jsx-uses-react' : 0 , 
73+     } , 
74+     rules : activeRulesConfig , 
75+   } , 
76+   'jsx-runtime' : { 
77+     plugins, 
78+     parserOptions : { 
79+       ecmaFeatures : { 
80+         jsx : true , 
8681      } , 
82+       jsxPragma : null ,  // for @typescript /eslint-parser 
83+     } , 
84+     rules : { 
85+       'react/react-in-jsx-scope' : 0 , 
86+       'react/jsx-uses-react' : 0 , 
8787    } , 
8888  } , 
8989} ; 
9090
91- plugin . configs . flat  =  { 
91+ /** @typedef  {{ plugins: { react: typeof plugin }, rules: import('eslint').Linter.RulesRecord, languageOptions: { parserOptions: import('eslint').Linter.ParserOptions } } } ReactFlatConfig */ 
92+ 
93+ /** @type  {{ deprecatedRules: typeof deprecatedRules, rules: typeof allRules, configs: typeof configs & { flat?: Record<string, ReactFlatConfig> }} } */ 
94+ const  plugin  =  { 
95+   deprecatedRules, 
96+   rules : allRules , 
97+   configs, 
98+ } ; 
99+ 
100+ /** @type  {Record<string, ReactFlatConfig> } */ 
101+ configs . flat  =  { 
92102  recommended : { 
93103    plugins : {  react : plugin  } , 
94-     rules : plugin . configs . recommended . rules , 
95-     languageOptions : {  parserOptions : plugin . configs . recommended . parserOptions  } , 
104+     rules : configs . recommended . rules , 
105+     languageOptions : {  parserOptions : configs . recommended . parserOptions  } , 
96106  } , 
97107  all : { 
98108    plugins : {  react : plugin  } , 
99-     rules : plugin . configs . all . rules , 
100-     languageOptions : {  parserOptions : plugin . configs . all . parserOptions  } , 
109+     rules : configs . all . rules , 
110+     languageOptions : {  parserOptions : configs . all . parserOptions  } , 
101111  } , 
102112  'jsx-runtime' : { 
103113    plugins : {  react : plugin  } , 
104-     rules : plugin . configs [ 'jsx-runtime' ] . rules , 
105-     languageOptions : {  parserOptions : plugin . configs [ 'jsx-runtime' ] . parserOptions  } , 
114+     rules : configs [ 'jsx-runtime' ] . rules , 
115+     languageOptions : {  parserOptions : configs [ 'jsx-runtime' ] . parserOptions  } , 
106116  } , 
107117} ; 
108118
0 commit comments