Skip to content

Commit c47fa56

Browse files
committed
[types] [Fix] ensure the index types are generated
1 parent 63aceff commit c47fa56

File tree

1 file changed

+70
-60
lines changed

1 file changed

+70
-60
lines changed

index.js

Lines changed: 70 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -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
*/
1616
function configureAsError(rules) {
1717
return fromEntries(Object.keys(rules).map((key) => [`react/${key}`, 2]));
1818
}
1919

20+
/** @type {Partial<typeof allRules>} */
2021
const activeRules = filterRules(allRules, (rule) => !rule.meta.deprecated);
22+
/** @type {Record<keyof typeof activeRules, 2 | 'error'>} */
2123
const activeRulesConfig = configureAsError(activeRules);
2224

25+
/** @type {Partial<typeof allRules>} */
2326
const deprecatedRules = filterRules(allRules, (rule) => rule.meta.deprecated);
2427

28+
/** @type {['react']} */
2529
// for legacy config system
2630
const 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

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy