@egy186/eslint-config 4.3.1 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -61,6 +61,20 @@ import { typescriptConfig } from '@egy186/eslint-config/typescript';
61
61
  export default [base, typescriptConfig({ projectService: { allowDefaultProject: ['*.ts'] } })];
62
62
  ```
63
63
 
64
+ Browser, TypeScript, React:
65
+
66
+ ```sh
67
+ npm install -D typescript-eslint eslint-import-resolver-typescript eslint-plugin-react eslint-plugin-react-hooks
68
+ ```
69
+
70
+ ```js
71
+ import { browser } from '@egy186/eslint-config';
72
+ import { typescript } from '@egy186/eslint-config/typescript';
73
+ import { typescriptReact } from '@egy186/eslint-config/typescript-react';
74
+
75
+ export default [browser, typescript, typescriptReact];
76
+ ```
77
+
64
78
  Vitest:
65
79
 
66
80
  ```sh
package/dist/base.d.ts CHANGED
@@ -372,9 +372,11 @@ declare const config: {
372
372
  readonly 'n/no-unsupported-features/node-builtins': "error";
373
373
  readonly 'n/prefer-global/buffer': "error";
374
374
  readonly 'n/prefer-global/console': "error";
375
+ readonly 'n/prefer-global/crypto': "error";
375
376
  readonly 'n/prefer-global/process': "error";
376
377
  readonly 'n/prefer-global/text-decoder': "error";
377
378
  readonly 'n/prefer-global/text-encoder': "error";
379
+ readonly 'n/prefer-global/timers': "error";
378
380
  readonly 'n/prefer-global/url': "error";
379
381
  readonly 'n/prefer-global/url-search-params': "error";
380
382
  readonly 'n/prefer-node-protocol': "error";
package/dist/browser.d.ts CHANGED
@@ -1410,9 +1410,11 @@ declare const config: {
1410
1410
  readonly 'n/no-unpublished-require': "error";
1411
1411
  readonly 'n/prefer-global/buffer': "error";
1412
1412
  readonly 'n/prefer-global/console': "error";
1413
+ readonly 'n/prefer-global/crypto': "error";
1413
1414
  readonly 'n/prefer-global/process': "error";
1414
1415
  readonly 'n/prefer-global/text-decoder': "error";
1415
1416
  readonly 'n/prefer-global/text-encoder': "error";
1417
+ readonly 'n/prefer-global/timers': "error";
1416
1418
  readonly 'n/prefer-global/url': "error";
1417
1419
  readonly 'n/prefer-global/url-search-params': "error";
1418
1420
  readonly 'n/prefer-node-protocol': "error";
@@ -326,9 +326,11 @@ declare const config: {
326
326
  readonly 'n/no-unsupported-features/node-builtins': "error";
327
327
  readonly 'n/prefer-global/buffer': "error";
328
328
  readonly 'n/prefer-global/console': "error";
329
+ readonly 'n/prefer-global/crypto': "error";
329
330
  readonly 'n/prefer-global/process': "error";
330
331
  readonly 'n/prefer-global/text-decoder': "error";
331
332
  readonly 'n/prefer-global/text-encoder': "error";
333
+ readonly 'n/prefer-global/timers': "error";
332
334
  readonly 'n/prefer-global/url': "error";
333
335
  readonly 'n/prefer-global/url-search-params': "error";
334
336
  readonly 'n/prefer-node-protocol': "error";
package/dist/react.d.ts CHANGED
@@ -285,6 +285,7 @@ declare const config: {
285
285
  readonly 'react-hooks': ESLint.Plugin;
286
286
  };
287
287
  readonly rules: {
288
+ readonly 'max-lines-per-function': ["warn", 100];
288
289
  readonly 'react-hooks/automatic-effect-dependencies': "off";
289
290
  readonly 'react-hooks/capitalized-calls': "off";
290
291
  readonly 'react-hooks/component-hook-factories': "error";
@@ -356,7 +357,9 @@ declare const config: {
356
357
  readonly checkKeyMustBeforeSpread: true;
357
358
  readonly warnOnDuplicates: true;
358
359
  }];
359
- readonly 'react/jsx-max-depth': "error";
360
+ readonly 'react/jsx-max-depth': ["warn", {
361
+ readonly max: 5;
362
+ }];
360
363
  readonly 'react/jsx-max-props-per-line': "off";
361
364
  readonly 'react/jsx-newline': "off";
362
365
  readonly 'react/jsx-no-bind': "error";
package/dist/react.js CHANGED
@@ -13,6 +13,7 @@ const config = {
13
13
  'react-hooks': reactHooksPlugin
14
14
  },
15
15
  rules: {
16
+ 'max-lines-per-function': ['warn', 100],
16
17
  'react-hooks/automatic-effect-dependencies': 'off',
17
18
  'react-hooks/capitalized-calls': 'off',
18
19
  'react-hooks/component-hook-factories': 'error',
@@ -101,7 +102,7 @@ const config = {
101
102
  warnOnDuplicates: true
102
103
  }
103
104
  ],
104
- 'react/jsx-max-depth': 'error',
105
+ 'react/jsx-max-depth': ['warn', { max: 5 }],
105
106
  // Migrated to @stylistic/jsx-max-props-per-line
106
107
  'react/jsx-max-props-per-line': 'off',
107
108
  // Migrated to @stylistic/jsx-newline
@@ -35,9 +35,11 @@ declare const rules: {
35
35
  readonly 'n/no-unsupported-features/node-builtins': "error";
36
36
  readonly 'n/prefer-global/buffer': "error";
37
37
  readonly 'n/prefer-global/console': "error";
38
+ readonly 'n/prefer-global/crypto': "error";
38
39
  readonly 'n/prefer-global/process': "error";
39
40
  readonly 'n/prefer-global/text-decoder': "error";
40
41
  readonly 'n/prefer-global/text-encoder': "error";
42
+ readonly 'n/prefer-global/timers': "error";
41
43
  readonly 'n/prefer-global/url': "error";
42
44
  readonly 'n/prefer-global/url-search-params': "error";
43
45
  readonly 'n/prefer-node-protocol': "error";
@@ -29,9 +29,11 @@ const rules = {
29
29
  'n/no-unsupported-features/node-builtins': 'error',
30
30
  'n/prefer-global/buffer': 'error',
31
31
  'n/prefer-global/console': 'error',
32
+ 'n/prefer-global/crypto': 'error',
32
33
  'n/prefer-global/process': 'error',
33
34
  'n/prefer-global/text-decoder': 'error',
34
35
  'n/prefer-global/text-encoder': 'error',
36
+ 'n/prefer-global/timers': 'error',
35
37
  'n/prefer-global/url': 'error',
36
38
  'n/prefer-global/url-search-params': 'error',
37
39
  'n/prefer-node-protocol': 'error',
@@ -0,0 +1,470 @@
1
+ declare const config: {
2
+ readonly rules: {
3
+ readonly '@typescript-eslint/naming-convention': ["error", {
4
+ readonly format: readonly ["camelCase"];
5
+ readonly selector: "default";
6
+ }, {
7
+ readonly format: readonly ["camelCase", "PascalCase"];
8
+ readonly selector: "import";
9
+ }, {
10
+ readonly format: readonly ["camelCase", "UPPER_CASE"];
11
+ readonly selector: "variable";
12
+ }, {
13
+ readonly format: readonly ["camelCase"];
14
+ readonly leadingUnderscore: "allow";
15
+ readonly selector: "parameter";
16
+ }, {
17
+ readonly format: readonly ["camelCase"];
18
+ readonly leadingUnderscore: "require";
19
+ readonly modifiers: readonly ["private"];
20
+ readonly selector: "memberLike";
21
+ }, {
22
+ readonly format: readonly ["PascalCase"];
23
+ readonly selector: "typeLike";
24
+ }, {
25
+ readonly format: readonly ["PascalCase", "camelCase"];
26
+ readonly selector: readonly ["variable"];
27
+ readonly types: readonly ["function"];
28
+ }];
29
+ readonly 'max-lines-per-function': ["warn", 100];
30
+ readonly 'react-hooks/automatic-effect-dependencies': "off";
31
+ readonly 'react-hooks/capitalized-calls': "off";
32
+ readonly 'react-hooks/component-hook-factories': "error";
33
+ readonly 'react-hooks/config': "error";
34
+ readonly 'react-hooks/error-boundaries': "error";
35
+ readonly 'react-hooks/exhaustive-deps': "error";
36
+ readonly 'react-hooks/fbt': "off";
37
+ readonly 'react-hooks/fire': "off";
38
+ readonly 'react-hooks/gating': "error";
39
+ readonly 'react-hooks/globals': "error";
40
+ readonly 'react-hooks/hooks': "off";
41
+ readonly 'react-hooks/immutability': "error";
42
+ readonly 'react-hooks/incompatible-library': "error";
43
+ readonly 'react-hooks/invariant': "off";
44
+ readonly 'react-hooks/memoized-effect-dependencies': "off";
45
+ readonly 'react-hooks/no-deriving-state-in-effects': "off";
46
+ readonly 'react-hooks/preserve-manual-memoization': "error";
47
+ readonly 'react-hooks/purity': "error";
48
+ readonly 'react-hooks/refs': "error";
49
+ readonly 'react-hooks/rule-suppression': "off";
50
+ readonly 'react-hooks/rules-of-hooks': "error";
51
+ readonly 'react-hooks/set-state-in-effect': "error";
52
+ readonly 'react-hooks/set-state-in-render': "error";
53
+ readonly 'react-hooks/static-components': "error";
54
+ readonly 'react-hooks/syntax': "off";
55
+ readonly 'react-hooks/todo': "off";
56
+ readonly 'react-hooks/unsupported-syntax': "error";
57
+ readonly 'react-hooks/use-memo': "error";
58
+ readonly 'react-hooks/void-use-memo': "error";
59
+ readonly 'react/boolean-prop-naming': "error";
60
+ readonly 'react/button-has-type': "error";
61
+ readonly 'react/checked-requires-onchange-or-readonly': "error";
62
+ readonly 'react/default-props-match-prop-types': "error";
63
+ readonly 'react/destructuring-assignment': ["error", "always"];
64
+ readonly 'react/display-name': "error";
65
+ readonly 'react/forbid-component-props': "error";
66
+ readonly 'react/forbid-dom-props': "off";
67
+ readonly 'react/forbid-elements': "off";
68
+ readonly 'react/forbid-foreign-prop-types': "error";
69
+ readonly 'react/forbid-prop-types': "error";
70
+ readonly 'react/forward-ref-uses-ref': "error";
71
+ readonly 'react/function-component-definition': ["error", {
72
+ readonly namedComponents: "arrow-function";
73
+ readonly unnamedComponents: "arrow-function";
74
+ }];
75
+ readonly 'react/hook-use-state': "error";
76
+ readonly 'react/iframe-missing-sandbox': "error";
77
+ readonly 'react/jsx-boolean-value': "error";
78
+ readonly 'react/jsx-child-element-spacing': "off";
79
+ readonly 'react/jsx-closing-bracket-location': "off";
80
+ readonly 'react/jsx-closing-tag-location': "off";
81
+ readonly 'react/jsx-curly-brace-presence': "off";
82
+ readonly 'react/jsx-curly-newline': "off";
83
+ readonly 'react/jsx-curly-spacing': "off";
84
+ readonly 'react/jsx-equals-spacing': "off";
85
+ readonly 'react/jsx-filename-extension': ["error", {
86
+ readonly extensions: readonly [".jsx", ".tsx"];
87
+ }];
88
+ readonly 'react/jsx-first-prop-new-line': "off";
89
+ readonly 'react/jsx-fragments': ["error", "element"];
90
+ readonly 'react/jsx-handler-names': ["error", {
91
+ readonly checkInlineFunction: true;
92
+ readonly checkLocalVariables: true;
93
+ }];
94
+ readonly 'react/jsx-indent': "off";
95
+ readonly 'react/jsx-indent-props': "off";
96
+ readonly 'react/jsx-key': ["error", {
97
+ readonly checkFragmentShorthand: true;
98
+ readonly checkKeyMustBeforeSpread: true;
99
+ readonly warnOnDuplicates: true;
100
+ }];
101
+ readonly 'react/jsx-max-depth': ["warn", {
102
+ readonly max: 5;
103
+ }];
104
+ readonly 'react/jsx-max-props-per-line': "off";
105
+ readonly 'react/jsx-newline': "off";
106
+ readonly 'react/jsx-no-bind': "error";
107
+ readonly 'react/jsx-no-comment-textnodes': "error";
108
+ readonly 'react/jsx-no-constructed-context-values': "error";
109
+ readonly 'react/jsx-no-duplicate-props': "error";
110
+ readonly 'react/jsx-no-leaked-render': "error";
111
+ readonly 'react/jsx-no-literals': "error";
112
+ readonly 'react/jsx-no-script-url': ["error", readonly [{
113
+ readonly name: "Link";
114
+ readonly props: readonly ["to"];
115
+ }]];
116
+ readonly 'react/jsx-no-target-blank': "error";
117
+ readonly 'react/jsx-no-undef': "error";
118
+ readonly 'react/jsx-no-useless-fragment': "error";
119
+ readonly 'react/jsx-one-expression-per-line': "off";
120
+ readonly 'react/jsx-pascal-case': "error";
121
+ readonly 'react/jsx-props-no-multi-spaces': "off";
122
+ readonly 'react/jsx-props-no-spread-multi': "error";
123
+ readonly 'react/jsx-props-no-spreading': "off";
124
+ readonly 'react/jsx-sort-props': "error";
125
+ readonly 'react/jsx-tag-spacing': "off";
126
+ readonly 'react/jsx-uses-react': "off";
127
+ readonly 'react/jsx-uses-vars': "error";
128
+ readonly 'react/jsx-wrap-multilines': "off";
129
+ readonly 'react/no-access-state-in-setstate': "error";
130
+ readonly 'react/no-adjacent-inline-elements': "error";
131
+ readonly 'react/no-array-index-key': "error";
132
+ readonly 'react/no-arrow-function-lifecycle': "error";
133
+ readonly 'react/no-children-prop': "error";
134
+ readonly 'react/no-danger': "error";
135
+ readonly 'react/no-danger-with-children': "error";
136
+ readonly 'react/no-deprecated': "error";
137
+ readonly 'react/no-did-mount-set-state': "error";
138
+ readonly 'react/no-did-update-set-state': "error";
139
+ readonly 'react/no-direct-mutation-state': "error";
140
+ readonly 'react/no-find-dom-node': "error";
141
+ readonly 'react/no-invalid-html-attribute': "error";
142
+ readonly 'react/no-is-mounted': "error";
143
+ readonly 'react/no-multi-comp': "error";
144
+ readonly 'react/no-namespace': "error";
145
+ readonly 'react/no-object-type-as-default-prop': "error";
146
+ readonly 'react/no-redundant-should-component-update': "error";
147
+ readonly 'react/no-render-return-value': "error";
148
+ readonly 'react/no-set-state': "warn";
149
+ readonly 'react/no-string-refs': "error";
150
+ readonly 'react/no-this-in-sfc': "error";
151
+ readonly 'react/no-typos': "error";
152
+ readonly 'react/no-unescaped-entities': "error";
153
+ readonly 'react/no-unknown-property': "error";
154
+ readonly 'react/no-unsafe': "error";
155
+ readonly 'react/no-unstable-nested-components': "error";
156
+ readonly 'react/no-unused-class-component-methods': "error";
157
+ readonly 'react/no-unused-prop-types': "error";
158
+ readonly 'react/no-unused-state': "error";
159
+ readonly 'react/no-will-update-set-state': "error";
160
+ readonly 'react/prefer-es6-class': "error";
161
+ readonly 'react/prefer-exact-props': "error";
162
+ readonly 'react/prefer-read-only-props': "error";
163
+ readonly 'react/prefer-stateless-function': "error";
164
+ readonly 'react/prop-types': "error";
165
+ readonly 'react/react-in-jsx-scope': "off";
166
+ readonly 'react/require-default-props': "off";
167
+ readonly 'react/require-optimization': "error";
168
+ readonly 'react/require-render-return': "error";
169
+ readonly 'react/self-closing-comp': "off";
170
+ readonly 'react/sort-comp': ["error", {
171
+ readonly order: readonly ["constructor", "static-methods", "lifecycle", "everything-else", "render"];
172
+ }];
173
+ readonly 'react/sort-default-props': "error";
174
+ readonly 'react/sort-prop-types': "error";
175
+ readonly 'react/state-in-constructor': "error";
176
+ readonly 'react/static-property-placement': "error";
177
+ readonly 'react/style-prop-object': "error";
178
+ readonly 'react/void-dom-elements-no-children': "error";
179
+ };
180
+ readonly files: ["**/*.{jsx,tsx}"];
181
+ readonly languageOptions: {
182
+ readonly parserOptions: {
183
+ readonly ecmaFeatures: {
184
+ readonly jsx: true;
185
+ };
186
+ readonly jsxPragma: null;
187
+ };
188
+ };
189
+ readonly plugins: {
190
+ readonly react: {
191
+ deprecatedRules: Partial<{
192
+ 'boolean-prop-naming': import("eslint").Rule.RuleModule;
193
+ 'button-has-type': import("eslint").Rule.RuleModule;
194
+ 'checked-requires-onchange-or-readonly': import("eslint").Rule.RuleModule;
195
+ 'default-props-match-prop-types': import("eslint").Rule.RuleModule;
196
+ 'destructuring-assignment': import("eslint").Rule.RuleModule;
197
+ 'display-name': import("eslint").Rule.RuleModule;
198
+ 'forbid-component-props': import("eslint").Rule.RuleModule;
199
+ 'forbid-dom-props': import("eslint").Rule.RuleModule;
200
+ 'forbid-elements': import("eslint").Rule.RuleModule;
201
+ 'forbid-foreign-prop-types': import("eslint").Rule.RuleModule;
202
+ 'forbid-prop-types': import("eslint").Rule.RuleModule;
203
+ 'forward-ref-uses-ref': import("eslint").Rule.RuleModule;
204
+ 'function-component-definition': import("eslint").Rule.RuleModule;
205
+ 'hook-use-state': import("eslint").Rule.RuleModule;
206
+ 'iframe-missing-sandbox': import("eslint").Rule.RuleModule;
207
+ 'jsx-boolean-value': import("eslint").Rule.RuleModule;
208
+ 'jsx-child-element-spacing': import("eslint").Rule.RuleModule;
209
+ 'jsx-closing-bracket-location': import("eslint").Rule.RuleModule;
210
+ 'jsx-closing-tag-location': import("eslint").Rule.RuleModule;
211
+ 'jsx-curly-spacing': import("eslint").Rule.RuleModule;
212
+ 'jsx-curly-newline': import("eslint").Rule.RuleModule;
213
+ 'jsx-equals-spacing': import("eslint").Rule.RuleModule;
214
+ 'jsx-filename-extension': import("eslint").Rule.RuleModule;
215
+ 'jsx-first-prop-new-line': import("eslint").Rule.RuleModule;
216
+ 'jsx-handler-names': import("eslint").Rule.RuleModule;
217
+ 'jsx-indent': import("eslint").Rule.RuleModule;
218
+ 'jsx-indent-props': import("eslint").Rule.RuleModule;
219
+ 'jsx-key': import("eslint").Rule.RuleModule;
220
+ 'jsx-max-depth': import("eslint").Rule.RuleModule;
221
+ 'jsx-max-props-per-line': import("eslint").Rule.RuleModule;
222
+ 'jsx-newline': import("eslint").Rule.RuleModule;
223
+ 'jsx-no-bind': import("eslint").Rule.RuleModule;
224
+ 'jsx-no-comment-textnodes': import("eslint").Rule.RuleModule;
225
+ 'jsx-no-constructed-context-values': import("eslint").Rule.RuleModule;
226
+ 'jsx-no-duplicate-props': import("eslint").Rule.RuleModule;
227
+ 'jsx-no-leaked-render': import("eslint").Rule.RuleModule;
228
+ 'jsx-no-literals': import("eslint").Rule.RuleModule;
229
+ 'jsx-no-script-url': import("eslint").Rule.RuleModule;
230
+ 'jsx-no-target-blank': import("eslint").Rule.RuleModule;
231
+ 'jsx-no-useless-fragment': import("eslint").Rule.RuleModule;
232
+ 'jsx-one-expression-per-line': import("eslint").Rule.RuleModule;
233
+ 'jsx-no-undef': import("eslint").Rule.RuleModule;
234
+ 'jsx-curly-brace-presence': import("eslint").Rule.RuleModule;
235
+ 'jsx-pascal-case': import("eslint").Rule.RuleModule;
236
+ 'jsx-fragments': import("eslint").Rule.RuleModule;
237
+ 'jsx-props-no-multi-spaces': import("eslint").Rule.RuleModule;
238
+ 'jsx-props-no-spreading': import("eslint").Rule.RuleModule;
239
+ 'jsx-props-no-spread-multi': import("eslint").Rule.RuleModule;
240
+ 'jsx-sort-default-props': import("eslint").Rule.RuleModule;
241
+ 'jsx-sort-props': import("eslint").Rule.RuleModule;
242
+ 'jsx-space-before-closing': import("eslint").Rule.RuleModule;
243
+ 'jsx-tag-spacing': import("eslint").Rule.RuleModule;
244
+ 'jsx-uses-react': import("eslint").Rule.RuleModule;
245
+ 'jsx-uses-vars': import("eslint").Rule.RuleModule;
246
+ 'jsx-wrap-multilines': import("eslint").Rule.RuleModule;
247
+ 'no-invalid-html-attribute': import("eslint").Rule.RuleModule;
248
+ 'no-access-state-in-setstate': import("eslint").Rule.RuleModule;
249
+ 'no-adjacent-inline-elements': import("eslint").Rule.RuleModule;
250
+ 'no-array-index-key': import("eslint").Rule.RuleModule;
251
+ 'no-arrow-function-lifecycle': import("eslint").Rule.RuleModule;
252
+ 'no-children-prop': import("eslint").Rule.RuleModule;
253
+ 'no-danger': import("eslint").Rule.RuleModule;
254
+ 'no-danger-with-children': import("eslint").Rule.RuleModule;
255
+ 'no-deprecated': import("eslint").Rule.RuleModule;
256
+ 'no-did-mount-set-state': import("eslint").Rule.RuleModule;
257
+ 'no-did-update-set-state': import("eslint").Rule.RuleModule;
258
+ 'no-direct-mutation-state': import("eslint").Rule.RuleModule;
259
+ 'no-find-dom-node': import("eslint").Rule.RuleModule;
260
+ 'no-is-mounted': import("eslint").Rule.RuleModule;
261
+ 'no-multi-comp': import("eslint").Rule.RuleModule;
262
+ 'no-namespace': import("eslint").Rule.RuleModule;
263
+ 'no-set-state': import("eslint").Rule.RuleModule;
264
+ 'no-string-refs': import("eslint").Rule.RuleModule;
265
+ 'no-redundant-should-component-update': import("eslint").Rule.RuleModule;
266
+ 'no-render-return-value': import("eslint").Rule.RuleModule;
267
+ 'no-this-in-sfc': import("eslint").Rule.RuleModule;
268
+ 'no-typos': import("eslint").Rule.RuleModule;
269
+ 'no-unescaped-entities': import("eslint").Rule.RuleModule;
270
+ 'no-unknown-property': import("eslint").Rule.RuleModule;
271
+ 'no-unsafe': import("eslint").Rule.RuleModule;
272
+ 'no-unstable-nested-components': import("eslint").Rule.RuleModule;
273
+ 'no-unused-class-component-methods': import("eslint").Rule.RuleModule;
274
+ 'no-unused-prop-types': import("eslint").Rule.RuleModule;
275
+ 'no-unused-state': import("eslint").Rule.RuleModule;
276
+ 'no-object-type-as-default-prop': import("eslint").Rule.RuleModule;
277
+ 'no-will-update-set-state': import("eslint").Rule.RuleModule;
278
+ 'prefer-es6-class': import("eslint").Rule.RuleModule;
279
+ 'prefer-exact-props': import("eslint").Rule.RuleModule;
280
+ 'prefer-read-only-props': import("eslint").Rule.RuleModule;
281
+ 'prefer-stateless-function': import("eslint").Rule.RuleModule;
282
+ 'prop-types': import("eslint").Rule.RuleModule;
283
+ 'react-in-jsx-scope': import("eslint").Rule.RuleModule;
284
+ 'require-default-props': import("eslint").Rule.RuleModule;
285
+ 'require-optimization': import("eslint").Rule.RuleModule;
286
+ 'require-render-return': import("eslint").Rule.RuleModule;
287
+ 'self-closing-comp': import("eslint").Rule.RuleModule;
288
+ 'sort-comp': import("eslint").Rule.RuleModule;
289
+ 'sort-default-props': import("eslint").Rule.RuleModule;
290
+ 'sort-prop-types': import("eslint").Rule.RuleModule;
291
+ 'state-in-constructor': import("eslint").Rule.RuleModule;
292
+ 'static-property-placement': import("eslint").Rule.RuleModule;
293
+ 'style-prop-object': import("eslint").Rule.RuleModule;
294
+ 'void-dom-elements-no-children': import("eslint").Rule.RuleModule;
295
+ }>;
296
+ rules: {
297
+ 'boolean-prop-naming': import("eslint").Rule.RuleModule;
298
+ 'button-has-type': import("eslint").Rule.RuleModule;
299
+ 'checked-requires-onchange-or-readonly': import("eslint").Rule.RuleModule;
300
+ 'default-props-match-prop-types': import("eslint").Rule.RuleModule;
301
+ 'destructuring-assignment': import("eslint").Rule.RuleModule;
302
+ 'display-name': import("eslint").Rule.RuleModule;
303
+ 'forbid-component-props': import("eslint").Rule.RuleModule;
304
+ 'forbid-dom-props': import("eslint").Rule.RuleModule;
305
+ 'forbid-elements': import("eslint").Rule.RuleModule;
306
+ 'forbid-foreign-prop-types': import("eslint").Rule.RuleModule;
307
+ 'forbid-prop-types': import("eslint").Rule.RuleModule;
308
+ 'forward-ref-uses-ref': import("eslint").Rule.RuleModule;
309
+ 'function-component-definition': import("eslint").Rule.RuleModule;
310
+ 'hook-use-state': import("eslint").Rule.RuleModule;
311
+ 'iframe-missing-sandbox': import("eslint").Rule.RuleModule;
312
+ 'jsx-boolean-value': import("eslint").Rule.RuleModule;
313
+ 'jsx-child-element-spacing': import("eslint").Rule.RuleModule;
314
+ 'jsx-closing-bracket-location': import("eslint").Rule.RuleModule;
315
+ 'jsx-closing-tag-location': import("eslint").Rule.RuleModule;
316
+ 'jsx-curly-spacing': import("eslint").Rule.RuleModule;
317
+ 'jsx-curly-newline': import("eslint").Rule.RuleModule;
318
+ 'jsx-equals-spacing': import("eslint").Rule.RuleModule;
319
+ 'jsx-filename-extension': import("eslint").Rule.RuleModule;
320
+ 'jsx-first-prop-new-line': import("eslint").Rule.RuleModule;
321
+ 'jsx-handler-names': import("eslint").Rule.RuleModule;
322
+ 'jsx-indent': import("eslint").Rule.RuleModule;
323
+ 'jsx-indent-props': import("eslint").Rule.RuleModule;
324
+ 'jsx-key': import("eslint").Rule.RuleModule;
325
+ 'jsx-max-depth': import("eslint").Rule.RuleModule;
326
+ 'jsx-max-props-per-line': import("eslint").Rule.RuleModule;
327
+ 'jsx-newline': import("eslint").Rule.RuleModule;
328
+ 'jsx-no-bind': import("eslint").Rule.RuleModule;
329
+ 'jsx-no-comment-textnodes': import("eslint").Rule.RuleModule;
330
+ 'jsx-no-constructed-context-values': import("eslint").Rule.RuleModule;
331
+ 'jsx-no-duplicate-props': import("eslint").Rule.RuleModule;
332
+ 'jsx-no-leaked-render': import("eslint").Rule.RuleModule;
333
+ 'jsx-no-literals': import("eslint").Rule.RuleModule;
334
+ 'jsx-no-script-url': import("eslint").Rule.RuleModule;
335
+ 'jsx-no-target-blank': import("eslint").Rule.RuleModule;
336
+ 'jsx-no-useless-fragment': import("eslint").Rule.RuleModule;
337
+ 'jsx-one-expression-per-line': import("eslint").Rule.RuleModule;
338
+ 'jsx-no-undef': import("eslint").Rule.RuleModule;
339
+ 'jsx-curly-brace-presence': import("eslint").Rule.RuleModule;
340
+ 'jsx-pascal-case': import("eslint").Rule.RuleModule;
341
+ 'jsx-fragments': import("eslint").Rule.RuleModule;
342
+ 'jsx-props-no-multi-spaces': import("eslint").Rule.RuleModule;
343
+ 'jsx-props-no-spreading': import("eslint").Rule.RuleModule;
344
+ 'jsx-props-no-spread-multi': import("eslint").Rule.RuleModule;
345
+ 'jsx-sort-default-props': import("eslint").Rule.RuleModule;
346
+ 'jsx-sort-props': import("eslint").Rule.RuleModule;
347
+ 'jsx-space-before-closing': import("eslint").Rule.RuleModule;
348
+ 'jsx-tag-spacing': import("eslint").Rule.RuleModule;
349
+ 'jsx-uses-react': import("eslint").Rule.RuleModule;
350
+ 'jsx-uses-vars': import("eslint").Rule.RuleModule;
351
+ 'jsx-wrap-multilines': import("eslint").Rule.RuleModule;
352
+ 'no-invalid-html-attribute': import("eslint").Rule.RuleModule;
353
+ 'no-access-state-in-setstate': import("eslint").Rule.RuleModule;
354
+ 'no-adjacent-inline-elements': import("eslint").Rule.RuleModule;
355
+ 'no-array-index-key': import("eslint").Rule.RuleModule;
356
+ 'no-arrow-function-lifecycle': import("eslint").Rule.RuleModule;
357
+ 'no-children-prop': import("eslint").Rule.RuleModule;
358
+ 'no-danger': import("eslint").Rule.RuleModule;
359
+ 'no-danger-with-children': import("eslint").Rule.RuleModule;
360
+ 'no-deprecated': import("eslint").Rule.RuleModule;
361
+ 'no-did-mount-set-state': import("eslint").Rule.RuleModule;
362
+ 'no-did-update-set-state': import("eslint").Rule.RuleModule;
363
+ 'no-direct-mutation-state': import("eslint").Rule.RuleModule;
364
+ 'no-find-dom-node': import("eslint").Rule.RuleModule;
365
+ 'no-is-mounted': import("eslint").Rule.RuleModule;
366
+ 'no-multi-comp': import("eslint").Rule.RuleModule;
367
+ 'no-namespace': import("eslint").Rule.RuleModule;
368
+ 'no-set-state': import("eslint").Rule.RuleModule;
369
+ 'no-string-refs': import("eslint").Rule.RuleModule;
370
+ 'no-redundant-should-component-update': import("eslint").Rule.RuleModule;
371
+ 'no-render-return-value': import("eslint").Rule.RuleModule;
372
+ 'no-this-in-sfc': import("eslint").Rule.RuleModule;
373
+ 'no-typos': import("eslint").Rule.RuleModule;
374
+ 'no-unescaped-entities': import("eslint").Rule.RuleModule;
375
+ 'no-unknown-property': import("eslint").Rule.RuleModule;
376
+ 'no-unsafe': import("eslint").Rule.RuleModule;
377
+ 'no-unstable-nested-components': import("eslint").Rule.RuleModule;
378
+ 'no-unused-class-component-methods': import("eslint").Rule.RuleModule;
379
+ 'no-unused-prop-types': import("eslint").Rule.RuleModule;
380
+ 'no-unused-state': import("eslint").Rule.RuleModule;
381
+ 'no-object-type-as-default-prop': import("eslint").Rule.RuleModule;
382
+ 'no-will-update-set-state': import("eslint").Rule.RuleModule;
383
+ 'prefer-es6-class': import("eslint").Rule.RuleModule;
384
+ 'prefer-exact-props': import("eslint").Rule.RuleModule;
385
+ 'prefer-read-only-props': import("eslint").Rule.RuleModule;
386
+ 'prefer-stateless-function': import("eslint").Rule.RuleModule;
387
+ 'prop-types': import("eslint").Rule.RuleModule;
388
+ 'react-in-jsx-scope': import("eslint").Rule.RuleModule;
389
+ 'require-default-props': import("eslint").Rule.RuleModule;
390
+ 'require-optimization': import("eslint").Rule.RuleModule;
391
+ 'require-render-return': import("eslint").Rule.RuleModule;
392
+ 'self-closing-comp': import("eslint").Rule.RuleModule;
393
+ 'sort-comp': import("eslint").Rule.RuleModule;
394
+ 'sort-default-props': import("eslint").Rule.RuleModule;
395
+ 'sort-prop-types': import("eslint").Rule.RuleModule;
396
+ 'state-in-constructor': import("eslint").Rule.RuleModule;
397
+ 'static-property-placement': import("eslint").Rule.RuleModule;
398
+ 'style-prop-object': import("eslint").Rule.RuleModule;
399
+ 'void-dom-elements-no-children': import("eslint").Rule.RuleModule;
400
+ };
401
+ configs: {
402
+ recommended: {
403
+ plugins: ["react"];
404
+ parserOptions: {
405
+ ecmaFeatures: {
406
+ jsx: boolean;
407
+ };
408
+ };
409
+ rules: {
410
+ "react/display-name": 2;
411
+ "react/jsx-key": 2;
412
+ "react/jsx-no-comment-textnodes": 2;
413
+ "react/jsx-no-duplicate-props": 2;
414
+ "react/jsx-no-target-blank": 2;
415
+ "react/jsx-no-undef": 2;
416
+ "react/jsx-uses-react": 2;
417
+ "react/jsx-uses-vars": 2;
418
+ "react/no-children-prop": 2;
419
+ "react/no-danger-with-children": 2;
420
+ "react/no-deprecated": 2;
421
+ "react/no-direct-mutation-state": 2;
422
+ "react/no-find-dom-node": 2;
423
+ "react/no-is-mounted": 2;
424
+ "react/no-render-return-value": 2;
425
+ "react/no-string-refs": 2;
426
+ "react/no-unescaped-entities": 2;
427
+ "react/no-unknown-property": 2;
428
+ "react/no-unsafe": 0;
429
+ "react/prop-types": 2;
430
+ "react/react-in-jsx-scope": 2;
431
+ "react/require-render-return": 2;
432
+ };
433
+ };
434
+ all: {
435
+ plugins: ["react"];
436
+ parserOptions: {
437
+ ecmaFeatures: {
438
+ jsx: boolean;
439
+ };
440
+ };
441
+ rules: Record<"boolean-prop-naming" | "button-has-type" | "checked-requires-onchange-or-readonly" | "default-props-match-prop-types" | "destructuring-assignment" | "display-name" | "forbid-component-props" | "forbid-dom-props" | "forbid-elements" | "forbid-foreign-prop-types" | "forbid-prop-types" | "prop-types" | "forward-ref-uses-ref" | "function-component-definition" | "hook-use-state" | "iframe-missing-sandbox" | "jsx-boolean-value" | "jsx-child-element-spacing" | "jsx-closing-bracket-location" | "jsx-closing-tag-location" | "jsx-curly-spacing" | "jsx-curly-newline" | "jsx-equals-spacing" | "jsx-filename-extension" | "jsx-first-prop-new-line" | "jsx-handler-names" | "jsx-indent" | "jsx-indent-props" | "jsx-key" | "jsx-max-depth" | "jsx-max-props-per-line" | "jsx-newline" | "jsx-no-bind" | "jsx-no-comment-textnodes" | "jsx-no-constructed-context-values" | "jsx-no-duplicate-props" | "jsx-no-leaked-render" | "jsx-no-literals" | "jsx-no-script-url" | "jsx-no-target-blank" | "jsx-no-useless-fragment" | "jsx-one-expression-per-line" | "jsx-no-undef" | "jsx-curly-brace-presence" | "jsx-pascal-case" | "jsx-fragments" | "jsx-props-no-multi-spaces" | "jsx-props-no-spreading" | "jsx-props-no-spread-multi" | "sort-default-props" | "jsx-sort-default-props" | "jsx-sort-props" | "jsx-tag-spacing" | "jsx-space-before-closing" | "jsx-uses-react" | "jsx-uses-vars" | "jsx-wrap-multilines" | "no-invalid-html-attribute" | "no-access-state-in-setstate" | "no-adjacent-inline-elements" | "no-array-index-key" | "no-arrow-function-lifecycle" | "no-children-prop" | "no-danger" | "no-danger-with-children" | "no-deprecated" | "no-direct-mutation-state" | "no-find-dom-node" | "no-is-mounted" | "no-multi-comp" | "no-namespace" | "no-set-state" | "no-string-refs" | "no-redundant-should-component-update" | "no-render-return-value" | "no-this-in-sfc" | "no-typos" | "no-unescaped-entities" | "no-unknown-property" | "no-unsafe" | "no-unstable-nested-components" | "no-unused-class-component-methods" | "no-unused-prop-types" | "no-unused-state" | "no-object-type-as-default-prop" | "prefer-es6-class" | "prefer-exact-props" | "prefer-read-only-props" | "prefer-stateless-function" | "react-in-jsx-scope" | "require-default-props" | "require-optimization" | "require-render-return" | "self-closing-comp" | "sort-comp" | "sort-prop-types" | "state-in-constructor" | "static-property-placement" | "style-prop-object" | "void-dom-elements-no-children" | "no-did-mount-set-state" | "no-did-update-set-state" | "no-will-update-set-state", 2 | "error">;
442
+ };
443
+ 'jsx-runtime': {
444
+ plugins: ["react"];
445
+ parserOptions: {
446
+ ecmaFeatures: {
447
+ jsx: boolean;
448
+ };
449
+ jsxPragma: any;
450
+ };
451
+ rules: {
452
+ "react/react-in-jsx-scope": 0;
453
+ "react/jsx-uses-react": 0;
454
+ };
455
+ };
456
+ flat: Record<string, import("eslint-plugin-react").ReactFlatConfig>;
457
+ } & {
458
+ flat: Record<string, import("eslint-plugin-react").ReactFlatConfig>;
459
+ };
460
+ };
461
+ readonly 'react-hooks': import("eslint").ESLint.Plugin;
462
+ };
463
+ readonly settings: {
464
+ readonly react: {
465
+ readonly version: "detect";
466
+ };
467
+ };
468
+ };
469
+ export { config as typescriptReact };
470
+ export default config;
@@ -0,0 +1,44 @@
1
+ import { react } from './react.js';
2
+ const config = {
3
+ ...react,
4
+ rules: {
5
+ ...react.rules,
6
+ '@typescript-eslint/naming-convention': [
7
+ 'error',
8
+ {
9
+ format: ['camelCase'],
10
+ selector: 'default'
11
+ },
12
+ {
13
+ format: ['camelCase', 'PascalCase'],
14
+ selector: 'import'
15
+ },
16
+ {
17
+ format: ['camelCase', 'UPPER_CASE'],
18
+ selector: 'variable'
19
+ },
20
+ {
21
+ format: ['camelCase'],
22
+ leadingUnderscore: 'allow',
23
+ selector: 'parameter'
24
+ },
25
+ {
26
+ format: ['camelCase'],
27
+ leadingUnderscore: 'require',
28
+ modifiers: ['private'],
29
+ selector: 'memberLike'
30
+ },
31
+ {
32
+ format: ['PascalCase'],
33
+ selector: 'typeLike'
34
+ },
35
+ {
36
+ format: ['PascalCase', 'camelCase'],
37
+ selector: ['variable'],
38
+ types: ['function']
39
+ }
40
+ ]
41
+ }
42
+ };
43
+ export { config as typescriptReact };
44
+ export default config;
@@ -49,10 +49,6 @@ declare const config: {
49
49
  }, {
50
50
  readonly format: readonly ["camelCase", "UPPER_CASE"];
51
51
  readonly selector: "variable";
52
- }, {
53
- readonly format: readonly ["camelCase", "snake_case"];
54
- readonly leadingUnderscore: "allow";
55
- readonly selector: "property";
56
52
  }, {
57
53
  readonly format: readonly ["camelCase"];
58
54
  readonly leadingUnderscore: "allow";
@@ -55,11 +55,6 @@ const config = {
55
55
  format: ['camelCase', 'UPPER_CASE'],
56
56
  selector: 'variable'
57
57
  },
58
- {
59
- format: ['camelCase', 'snake_case'],
60
- leadingUnderscore: 'allow',
61
- selector: 'property'
62
- },
63
58
  {
64
59
  format: ['camelCase'],
65
60
  leadingUnderscore: 'allow',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@egy186/eslint-config",
3
3
  "description": "Eslint shareable config",
4
- "version": "4.3.1",
4
+ "version": "4.4.1",
5
5
  "author": "egy186",
6
6
  "bugs": {
7
7
  "url": "https://github.com/egy186/eslint-config/issues"
@@ -9,14 +9,14 @@
9
9
  "dependencies": {
10
10
  "@stylistic/eslint-plugin": "~5.8.0",
11
11
  "eslint-plugin-import": "~2.32.0",
12
- "eslint-plugin-jsdoc": "~62.5.4",
13
- "eslint-plugin-n": "~17.23.2",
12
+ "eslint-plugin-jsdoc": "~62.6.0",
13
+ "eslint-plugin-n": "~17.24.0",
14
14
  "globals": "^17.3.0"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@eslint/js": "~9.39.2",
18
18
  "@types/node": "^25.2.3",
19
- "@vitest/eslint-plugin": "~1.6.7",
19
+ "@vitest/eslint-plugin": "~1.6.9",
20
20
  "eslint": "~9.39.2",
21
21
  "eslint-import-resolver-typescript": "~4.4.4",
22
22
  "eslint-plugin-react": "~7.37.5",
@@ -24,7 +24,7 @@
24
24
  "husky": "^9.1.7",
25
25
  "jiti": "^2.6.1",
26
26
  "typescript": "~5.9.3",
27
- "typescript-eslint": "~8.55.0"
27
+ "typescript-eslint": "~8.56.0"
28
28
  },
29
29
  "engines": {
30
30
  "node": ">=20.19.2"
@@ -42,6 +42,10 @@
42
42
  "types": "./dist/typescript.d.ts",
43
43
  "default": "./dist/typescript.js"
44
44
  },
45
+ "./typescript-react": {
46
+ "types": "./dist/typescript-react.d.ts",
47
+ "default": "./dist/typescript-react.js"
48
+ },
45
49
  "./vitest": {
46
50
  "types": "./dist/vitest.d.ts",
47
51
  "default": "./dist/vitest.js"