eslint-config-setup 0.3.2 → 0.4.0

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.
@@ -14,7 +14,6 @@ import packageJsonPlugin from "eslint-plugin-package-json"
14
14
  import perfectionistPlugin from "eslint-plugin-perfectionist"
15
15
  import playwrightPlugin from "eslint-plugin-playwright"
16
16
  import reactEffectPlugin from "eslint-plugin-react-you-might-not-need-an-effect"
17
- import reactHooksPlugin from "eslint-plugin-react-hooks"
18
17
  import reactRefreshPlugin from "eslint-plugin-react-refresh"
19
18
  import regexpPlugin from "eslint-plugin-regexp"
20
19
  import securityPlugin from "eslint-plugin-security"
@@ -27,13 +26,100 @@ import unicornPlugin from "eslint-plugin-unicorn"
27
26
  import unusedImportsPlugin from "eslint-plugin-unused-imports"
28
27
  import vitestPlugin from "@vitest/eslint-plugin"
29
28
 
29
+ // React compat plugin — merges @eslint-react sub-plugins into a single `react/` namespace
30
+ // and aliases rules to legacy eslint-plugin-react names for OxLint compatibility.
31
+ const reactCompatPlugin = (() => {
32
+ const core = eslintReactPlugin.rules
33
+ const select = (prefix) => Object.fromEntries(
34
+ Object.entries(core)
35
+ .filter(([name]) => name.startsWith(prefix))
36
+ .map(([name, rule]) => [name.slice(prefix.length), rule]),
37
+ )
38
+ const dom = select("dom-")
39
+ const jsx = select("jsx-")
40
+ const naming = select("naming-convention-")
41
+ const rsc = select("rsc-")
42
+ const webApi = select("web-api-")
43
+
44
+ // Legacy aliases: legacy name → [source, original name]
45
+ const aliases = {
46
+ "jsx-key": [core, "no-missing-key"],
47
+ "jsx-key-before-spread": [jsx, "no-key-after-spread"],
48
+ "jsx-no-constructed-context-values": [core, "no-unstable-context-value"],
49
+ "jsx-no-leaked-render": [core, "no-leaked-conditional-rendering"],
50
+ "jsx-no-useless-fragment": [jsx, "no-useless-fragment"],
51
+ "no-object-type-as-default-prop": [core, "no-unstable-default-props"],
52
+ "no-unstable-nested-components": [core, "no-nested-component-definitions"],
53
+ "display-name": [core, "no-missing-component-display-name"],
54
+ "forward-ref-uses-ref": [core, "no-forward-ref"],
55
+ "destructuring-assignment": [core, "prefer-destructuring-assignment"],
56
+ "no-did-mount-set-state": [core, "no-set-state-in-component-did-mount"],
57
+ "no-did-update-set-state": [core, "no-set-state-in-component-did-update"],
58
+ "no-will-update-set-state": [core, "no-set-state-in-component-will-update"],
59
+ "hook-use-state": [core, "use-state"],
60
+ "no-danger": [dom, "no-dangerously-set-innerhtml"],
61
+ "no-danger-with-children": [dom, "no-dangerously-set-innerhtml-with-children"],
62
+ "no-find-dom-node": [dom, "no-find-dom-node"],
63
+ "no-namespace": [jsx, "no-namespace"],
64
+ "no-render-return-value": [dom, "no-render-return-value"],
65
+ "jsx-no-script-url": [dom, "no-script-url"],
66
+ "jsx-no-target-blank": [dom, "no-unsafe-target-blank"],
67
+ "no-unknown-property": [dom, "no-unknown-property"],
68
+ "void-dom-elements-no-children": [dom, "no-void-elements-with-children"],
69
+ "button-has-type": [dom, "no-missing-button-type"],
70
+ "iframe-missing-sandbox": [dom, "no-missing-iframe-sandbox"],
71
+ "style-prop-object": [dom, "no-string-style-prop"],
72
+ }
73
+
74
+ // Identical-name aliases (core rules where legacy name = @eslint-react name)
75
+ const identicalCore = [
76
+ "no-access-state-in-setstate", "no-array-index-key",
77
+ "no-direct-mutation-state", "no-redundant-should-component-update",
78
+ "no-unused-class-component-members", "no-unused-state",
79
+ ]
80
+ for (const n of identicalCore) aliases[n] = [core, n]
81
+ aliases["no-children-prop"] = [jsx, "no-children-prop"]
82
+ aliases["jsx-no-comment-textnodes"] = [jsx, "no-comment-textnodes"]
83
+
84
+ // Build aliased originals set
85
+ const aliasedCore = new Set()
86
+ for (const [src, name] of Object.values(aliases)) {
87
+ if (src === core) aliasedCore.add(name)
88
+ else if (src === dom) aliasedCore.add("dom-" + name)
89
+ else if (src === jsx) aliasedCore.add("jsx-" + name)
90
+ else if (src === naming) aliasedCore.add("naming-convention-" + name)
91
+ else if (src === rsc) aliasedCore.add("rsc-" + name)
92
+ else if (src === webApi) aliasedCore.add("web-api-" + name)
93
+ }
94
+ const rules = {}
95
+
96
+ // Core rules (skip aliased originals)
97
+ for (const [n, r] of Object.entries(core)) { if (!aliasedCore.has(n)) rules[n] = r }
98
+
99
+ // Sub-plugin rules (skip aliased + prefer-namespace-import collision)
100
+ const subs = [[dom, new Set(['prefer-namespace-import'])], [jsx], [webApi], [naming], [rsc]]
101
+ for (const [src, skip] of subs) {
102
+ for (const [n, r] of Object.entries(src)) {
103
+ if (skip && skip.has(n)) continue
104
+ if (Object.values(aliases).some(([s, o]) => s === src && o === n)) continue
105
+ rules[n] = r
106
+ }
107
+ }
108
+
109
+ // Add legacy aliases
110
+ for (const [legacy, [src, orig]] of Object.entries(aliases)) rules[legacy] = src[orig]
111
+
112
+ return { meta: { name: "react-compat", version: "1.0.0" }, rules }
113
+ })()
114
+
30
115
  export default [
31
116
  // TypeScript parser setup
32
117
  ...tseslint.configs.strictTypeChecked.slice(0, 2),
33
118
 
34
- // Base rules — all effective rules for *.ts files
119
+ // Base rules — all effective rules for TS plus shared JS/TS rules
35
120
  {
36
121
  name: "eslint-config-setup/base",
122
+ ignores: ["**/*.{md,mdx}"],
37
123
  plugins: {
38
124
  "@cspell": cspellPlugin,
39
125
  "@stylistic": stylisticPlugin,
@@ -44,11 +130,8 @@ export default [
44
130
  "jsx-a11y": jsxA11yPlugin,
45
131
  "node": nodePlugin,
46
132
  "perfectionist": perfectionistPlugin,
47
- "react": eslintReactPlugin,
48
- "react-dom": eslintReactPlugin.configs.dom.plugins["@eslint-react/dom"],
49
- "react-hooks": reactHooksPlugin,
133
+ "react": reactCompatPlugin,
50
134
  "react-refresh": reactRefreshPlugin,
51
- "react-web-api": eslintReactPlugin.configs["web-api"].plugins["@eslint-react/web-api"],
52
135
  "react-you-might-not-need-an-effect": reactEffectPlugin,
53
136
  "regexp": regexpPlugin,
54
137
  "security": securityPlugin,
@@ -96,7 +179,7 @@ export default [
96
179
  "@typescript-eslint/ban-ts-comment": [
97
180
  "error",
98
181
  {
99
- "minimumDescriptionLength": 10
182
+ "ts-expect-error": "allow-with-description"
100
183
  }
101
184
  ],
102
185
  "@typescript-eslint/ban-tslint-comment": "error",
@@ -104,7 +187,10 @@ export default [
104
187
  "@typescript-eslint/consistent-generic-constructors": "error",
105
188
  "@typescript-eslint/consistent-indexed-object-style": "error",
106
189
  "@typescript-eslint/consistent-type-assertions": "error",
107
- "@typescript-eslint/consistent-type-definitions": "error",
190
+ "@typescript-eslint/consistent-type-definitions": [
191
+ "error",
192
+ "type"
193
+ ],
108
194
  "@typescript-eslint/consistent-type-exports": [
109
195
  "error",
110
196
  {
@@ -114,10 +200,14 @@ export default [
114
200
  "@typescript-eslint/consistent-type-imports": [
115
201
  "error",
116
202
  {
117
- "fixStyle": "inline-type-imports"
203
+ "fixStyle": "separate-type-imports"
118
204
  }
119
205
  ],
120
206
  "@typescript-eslint/dot-notation": "error",
207
+ "@typescript-eslint/method-signature-style": [
208
+ "error",
209
+ "property"
210
+ ],
121
211
  "@typescript-eslint/no-array-constructor": "error",
122
212
  "@typescript-eslint/no-array-delete": "error",
123
213
  "@typescript-eslint/no-base-to-string": "error",
@@ -129,10 +219,21 @@ export default [
129
219
  "@typescript-eslint/no-dynamic-delete": "error",
130
220
  "@typescript-eslint/no-empty-function": "error",
131
221
  "@typescript-eslint/no-empty-object-type": "error",
132
- "@typescript-eslint/no-explicit-any": "error",
222
+ "@typescript-eslint/no-explicit-any": [
223
+ "warn",
224
+ {
225
+ "fixToUnknown": true
226
+ }
227
+ ],
133
228
  "@typescript-eslint/no-extra-non-null-assertion": "error",
134
229
  "@typescript-eslint/no-extraneous-class": "error",
135
- "@typescript-eslint/no-floating-promises": "error",
230
+ "@typescript-eslint/no-floating-promises": [
231
+ "error",
232
+ {
233
+ "checkThenables": true,
234
+ "ignoreIIFE": true
235
+ }
236
+ ],
136
237
  "@typescript-eslint/no-for-in-array": "error",
137
238
  "@typescript-eslint/no-implied-eval": "error",
138
239
  "@typescript-eslint/no-import-type-side-effects": "error",
@@ -140,7 +241,12 @@ export default [
140
241
  "@typescript-eslint/no-invalid-void-type": "error",
141
242
  "@typescript-eslint/no-meaningless-void-operator": "error",
142
243
  "@typescript-eslint/no-misused-new": "error",
143
- "@typescript-eslint/no-misused-promises": "error",
244
+ "@typescript-eslint/no-misused-promises": [
245
+ "error",
246
+ {
247
+ "checksVoidReturn": false
248
+ }
249
+ ],
144
250
  "@typescript-eslint/no-misused-spread": "error",
145
251
  "@typescript-eslint/no-mixed-enums": "error",
146
252
  "@typescript-eslint/no-namespace": "error",
@@ -183,6 +289,7 @@ export default [
183
289
  "@typescript-eslint/no-unsafe-function-type": "error",
184
290
  "@typescript-eslint/no-unsafe-member-access": "error",
185
291
  "@typescript-eslint/no-unsafe-return": "error",
292
+ "@typescript-eslint/no-unsafe-type-assertion": "error",
186
293
  "@typescript-eslint/no-unsafe-unary-minus": "error",
187
294
  "@typescript-eslint/no-unused-expressions": "error",
188
295
  "@typescript-eslint/no-unused-vars": [
@@ -213,11 +320,19 @@ export default [
213
320
  "@typescript-eslint/prefer-nullish-coalescing": "error",
214
321
  "@typescript-eslint/prefer-optional-chain": "error",
215
322
  "@typescript-eslint/prefer-promise-reject-errors": "error",
323
+ "@typescript-eslint/prefer-readonly": "warn",
216
324
  "@typescript-eslint/prefer-reduce-type-parameter": "error",
217
325
  "@typescript-eslint/prefer-regexp-exec": "error",
218
326
  "@typescript-eslint/prefer-return-this-type": "error",
219
327
  "@typescript-eslint/prefer-string-starts-ends-with": "error",
328
+ "@typescript-eslint/promise-function-async": "error",
220
329
  "@typescript-eslint/related-getter-setter-pairs": "error",
330
+ "@typescript-eslint/require-array-sort-compare": [
331
+ "error",
332
+ {
333
+ "ignoreStringArrays": true
334
+ }
335
+ ],
221
336
  "@typescript-eslint/require-await": "error",
222
337
  "@typescript-eslint/restrict-plus-operands": [
223
338
  "error",
@@ -247,6 +362,13 @@ export default [
247
362
  }
248
363
  ],
249
364
  "@typescript-eslint/strict-void-return": "error",
365
+ "@typescript-eslint/switch-exhaustiveness-check": [
366
+ "error",
367
+ {
368
+ "allowDefaultCaseForExhaustiveSwitch": false,
369
+ "requireDefaultForNonUnion": true
370
+ }
371
+ ],
250
372
  "@typescript-eslint/triple-slash-reference": "error",
251
373
  "@typescript-eslint/unbound-method": "error",
252
374
  "@typescript-eslint/unified-signatures": "error",
@@ -289,17 +411,35 @@ export default [
289
411
  "maxDepth": 3
290
412
  }
291
413
  ],
292
- "import/no-duplicates": [
414
+ "import/no-duplicates": "error",
415
+ "import/no-empty-named-blocks": "error",
416
+ "import/no-extraneous-dependencies": [
293
417
  "error",
294
418
  {
295
- "prefer-inline": true
419
+ "includeTypes": true
296
420
  }
297
421
  ],
298
- "import/no-empty-named-blocks": "error",
299
422
  "import/no-mutable-exports": "error",
300
423
  "import/no-named-as-default": "error",
301
424
  "import/no-named-as-default-member": "error",
425
+ "import/no-named-default": "error",
302
426
  "import/no-self-import": "error",
427
+ "import/no-unassigned-import": [
428
+ "error",
429
+ {
430
+ "allow": [
431
+ "@babel/polyfill",
432
+ "**/register",
433
+ "**/register.*",
434
+ "**/register/**",
435
+ "**/register/**.*",
436
+ "**/*.css",
437
+ "**/*.scss",
438
+ "**/*.sass",
439
+ "**/*.less"
440
+ ]
441
+ }
442
+ ],
303
443
  "import/no-useless-path-segments": "error",
304
444
  "jsdoc/check-access": "error",
305
445
  "jsdoc/check-alignment": "error",
@@ -416,6 +556,7 @@ export default [
416
556
  "no-extra-boolean-cast": "error",
417
557
  "no-fallthrough": "error",
418
558
  "no-global-assign": "error",
559
+ "no-implicit-globals": "error",
419
560
  "no-irregular-whitespace": "error",
420
561
  "no-iterator": "error",
421
562
  "no-labels": "error",
@@ -434,10 +575,19 @@ export default [
434
575
  "no-proto": "error",
435
576
  "no-prototype-builtins": "error",
436
577
  "no-regex-spaces": "error",
578
+ "no-return-assign": [
579
+ "error",
580
+ "always"
581
+ ],
437
582
  "no-script-url": "error",
438
583
  "no-self-assign": "error",
439
584
  "no-self-compare": "error",
440
- "no-sequences": "error",
585
+ "no-sequences": [
586
+ "error",
587
+ {
588
+ "allowInParentheses": false
589
+ }
590
+ ],
441
591
  "no-shadow-restricted-names": "error",
442
592
  "no-sparse-arrays": "error",
443
593
  "no-template-curly-in-string": "error",
@@ -451,12 +601,18 @@ export default [
451
601
  "no-useless-assignment": "error",
452
602
  "no-useless-call": "error",
453
603
  "no-useless-catch": "error",
454
- "no-useless-computed-key": "error",
604
+ "no-useless-computed-key": [
605
+ "error",
606
+ {
607
+ "enforceForClassMembers": true
608
+ }
609
+ ],
455
610
  "no-useless-concat": "error",
456
611
  "no-useless-escape": "error",
457
612
  "no-useless-rename": "error",
458
613
  "no-useless-return": "error",
459
614
  "no-var": "error",
615
+ "node/handle-callback-err": "error",
460
616
  "node/hashbang": "error",
461
617
  "node/no-deprecated-api": "error",
462
618
  "node/no-exports-assign": "error",
@@ -484,6 +640,15 @@ export default [
484
640
  ],
485
641
  "node/prefer-promises/dns": "error",
486
642
  "node/prefer-promises/fs": "error",
643
+ "node/process-exit-as-throw": "error",
644
+ "object-shorthand": [
645
+ "error",
646
+ "always",
647
+ {
648
+ "avoidExplicitReturnArrows": true,
649
+ "avoidQuotes": true
650
+ }
651
+ ],
487
652
  "perfectionist/sort-exports": "error",
488
653
  "perfectionist/sort-imports": [
489
654
  "error",
@@ -496,34 +661,21 @@ export default [
496
661
  "perfectionist/sort-named-imports": "error",
497
662
  "perfectionist/sort-union-types": "error",
498
663
  "prefer-const": "error",
664
+ "prefer-numeric-literals": "error",
499
665
  "prefer-object-has-own": "error",
500
666
  "prefer-object-spread": "error",
501
667
  "prefer-regex-literals": "error",
502
668
  "prefer-rest-params": "error",
503
669
  "prefer-spread": "error",
504
- "prefer-template": "error",
670
+ "prefer-template": "warn",
505
671
  "preserve-caught-error": "error",
506
672
  "radix": "error",
507
- "react-dom/no-dangerously-set-innerhtml": "warn",
508
- "react-dom/no-dangerously-set-innerhtml-with-children": "error",
509
- "react-dom/no-missing-button-type": "error",
510
- "react-dom/no-missing-iframe-sandbox": "error",
511
- "react-dom/no-string-style-prop": "error",
512
- "react-dom/no-unknown-property": "error",
513
- "react-dom/no-unsafe-target-blank": "error",
514
- "react-dom/no-void-elements-with-children": "error",
515
- "react-hooks/exhaustive-deps": "error",
516
- "react-hooks/rules-of-hooks": "error",
517
673
  "react-refresh/only-export-components": [
518
674
  "warn",
519
675
  {
520
676
  "allowConstantExport": true
521
677
  }
522
678
  ],
523
- "react-web-api/no-leaked-event-listener": "error",
524
- "react-web-api/no-leaked-interval": "error",
525
- "react-web-api/no-leaked-resize-observer": "error",
526
- "react-web-api/no-leaked-timeout": "error",
527
679
  "react-you-might-not-need-an-effect/no-adjust-state-on-prop-change": "warn",
528
680
  "react-you-might-not-need-an-effect/no-chain-state-updates": "error",
529
681
  "react-you-might-not-need-an-effect/no-derived-state": "error",
@@ -533,23 +685,87 @@ export default [
533
685
  "react-you-might-not-need-an-effect/no-pass-data-to-parent": "error",
534
686
  "react-you-might-not-need-an-effect/no-pass-live-state-to-parent": "error",
535
687
  "react-you-might-not-need-an-effect/no-reset-all-state-on-prop-change": "error",
536
- "react/jsx-no-comment-textnodes": "error",
537
- "react/jsx-shorthand-boolean": "error",
688
+ "react/button-has-type": "warn",
689
+ "react/component-hook-factories": "error",
690
+ "react/context-name": "warn",
691
+ "react/destructuring-assignment": "warn",
692
+ "react/error-boundaries": "error",
693
+ "react/exhaustive-deps": "warn",
694
+ "react/forward-ref-uses-ref": "warn",
695
+ "react/function-definition": "error",
696
+ "react/hook-use-state": "warn",
697
+ "react/id-name": "warn",
698
+ "react/iframe-missing-sandbox": "warn",
699
+ "react/jsx-key": "error",
700
+ "react/jsx-key-before-spread": "error",
701
+ "react/jsx-no-children-prop-with-children": "error",
702
+ "react/jsx-no-comment-textnodes": "warn",
703
+ "react/jsx-no-constructed-context-values": "warn",
704
+ "react/jsx-no-leaked-render": "error",
705
+ "react/jsx-no-leaked-semicolon": "warn",
706
+ "react/jsx-no-script-url": "warn",
707
+ "react/jsx-no-target-blank": "warn",
708
+ "react/jsx-no-useless-fragment": "warn",
538
709
  "react/no-access-state-in-setstate": "error",
539
- "react/no-array-index-key": "error",
710
+ "react/no-array-index-key": "warn",
711
+ "react/no-children-count": "warn",
712
+ "react/no-children-for-each": "warn",
713
+ "react/no-children-map": "warn",
714
+ "react/no-children-only": "warn",
540
715
  "react/no-children-prop": "error",
541
- "react/no-context-provider": "error",
716
+ "react/no-children-to-array": "warn",
717
+ "react/no-class-component": "error",
718
+ "react/no-clone-element": "warn",
719
+ "react/no-component-will-mount": "error",
720
+ "react/no-component-will-receive-props": "error",
721
+ "react/no-component-will-update": "error",
722
+ "react/no-context-provider": "warn",
723
+ "react/no-create-ref": "error",
724
+ "react/no-danger": "warn",
725
+ "react/no-danger-with-children": "error",
726
+ "react/no-did-mount-set-state": "warn",
727
+ "react/no-did-update-set-state": "warn",
542
728
  "react/no-direct-mutation-state": "error",
543
729
  "react/no-duplicate-key": "error",
544
- "react/no-forward-ref": "error",
545
- "react/no-leaked-conditional-rendering": "error",
546
- "react/no-missing-key": "error",
547
- "react/no-nested-component-definitions": "error",
548
- "react/no-unstable-context-value": "error",
549
- "react/no-unstable-default-props": "error",
550
- "react/no-unused-state": "error",
551
- "react/no-use-context": "error",
552
- "react/no-useless-fragment": "error",
730
+ "react/no-find-dom-node": "error",
731
+ "react/no-flush-sync": "error",
732
+ "react/no-hydrate": "error",
733
+ "react/no-implicit-key": "error",
734
+ "react/no-leaked-event-listener": "warn",
735
+ "react/no-leaked-interval": "warn",
736
+ "react/no-leaked-resize-observer": "warn",
737
+ "react/no-leaked-timeout": "warn",
738
+ "react/no-misused-capture-owner-stack": "error",
739
+ "react/no-namespace": "error",
740
+ "react/no-nested-lazy-component-declarations": "error",
741
+ "react/no-object-type-as-default-prop": "warn",
742
+ "react/no-redundant-should-component-update": "error",
743
+ "react/no-render": "error",
744
+ "react/no-render-return-value": "error",
745
+ "react/no-unknown-property": "error",
746
+ "react/no-unnecessary-use-callback": "warn",
747
+ "react/no-unnecessary-use-memo": "warn",
748
+ "react/no-unnecessary-use-prefix": "warn",
749
+ "react/no-unsafe-component-will-mount": "warn",
750
+ "react/no-unsafe-component-will-receive-props": "warn",
751
+ "react/no-unsafe-component-will-update": "warn",
752
+ "react/no-unsafe-iframe-sandbox": "warn",
753
+ "react/no-unstable-nested-components": "error",
754
+ "react/no-unused-class-component-members": "warn",
755
+ "react/no-unused-props": "warn",
756
+ "react/no-unused-state": "warn",
757
+ "react/no-use-context": "warn",
758
+ "react/no-use-form-state": "error",
759
+ "react/no-will-update-set-state": "warn",
760
+ "react/purity": "warn",
761
+ "react/ref-name": "warn",
762
+ "react/rules-of-hooks": "error",
763
+ "react/set-state-in-effect": "warn",
764
+ "react/set-state-in-render": "error",
765
+ "react/style-prop-object": "error",
766
+ "react/unsupported-syntax": "error",
767
+ "react/use-memo": "error",
768
+ "react/void-dom-elements-no-children": "error",
553
769
  "regexp/confusing-quantifier": "warn",
554
770
  "regexp/control-character-escape": "error",
555
771
  "regexp/match-any": "error",
@@ -664,15 +880,28 @@ export default [
664
880
  "unicorn/consistent-date-clone": "error",
665
881
  "unicorn/consistent-empty-array-spread": "error",
666
882
  "unicorn/consistent-existence-index-check": "error",
883
+ "unicorn/consistent-function-scoping": "warn",
667
884
  "unicorn/error-message": "error",
885
+ "unicorn/filename-case": [
886
+ "error",
887
+ {
888
+ "cases": {
889
+ "camelCase": true,
890
+ "pascalCase": true,
891
+ "kebabCase": true
892
+ }
893
+ }
894
+ ],
668
895
  "unicorn/new-for-builtins": "error",
669
896
  "unicorn/no-abusive-eslint-disable": "error",
670
897
  "unicorn/no-accessor-recursion": "error",
671
898
  "unicorn/no-anonymous-default-export": "error",
672
899
  "unicorn/no-array-callback-reference": "error",
673
900
  "unicorn/no-array-method-this-argument": "error",
901
+ "unicorn/no-array-reduce": "warn",
674
902
  "unicorn/no-await-expression-member": "error",
675
903
  "unicorn/no-await-in-promise-methods": "error",
904
+ "unicorn/no-for-loop": "warn",
676
905
  "unicorn/no-instanceof-builtins": "error",
677
906
  "unicorn/no-invalid-fetch-options": "error",
678
907
  "unicorn/no-invalid-remove-event-listener": "error",
@@ -690,7 +919,12 @@ export default [
690
919
  "unicorn/no-useless-length-check": "error",
691
920
  "unicorn/no-useless-promise-resolve-reject": "error",
692
921
  "unicorn/no-useless-spread": "error",
693
- "unicorn/no-useless-undefined": "error",
922
+ "unicorn/no-useless-undefined": [
923
+ "warn",
924
+ {
925
+ "checkArguments": false
926
+ }
927
+ ],
694
928
  "unicorn/no-zero-fractions": "error",
695
929
  "unicorn/numeric-separators-style": "error",
696
930
  "unicorn/prefer-array-find": "error",
@@ -700,6 +934,7 @@ export default [
700
934
  "unicorn/prefer-array-some": "error",
701
935
  "unicorn/prefer-at": "error",
702
936
  "unicorn/prefer-date-now": "error",
937
+ "unicorn/prefer-dom-node-dataset": "error",
703
938
  "unicorn/prefer-export-from": [
704
939
  "error",
705
940
  {
@@ -731,8 +966,19 @@ export default [
731
966
  "unicorn/text-encoding-identifier-case": "error",
732
967
  "unicorn/throw-new-error": "error",
733
968
  "unused-imports/no-unused-imports": "error",
734
- "use-isnan": "error",
735
- "valid-typeof": "error",
969
+ "use-isnan": [
970
+ "error",
971
+ {
972
+ "enforceForIndexOf": true,
973
+ "enforceForSwitchCase": true
974
+ }
975
+ ],
976
+ "valid-typeof": [
977
+ "error",
978
+ {
979
+ "requireStringLiterals": true
980
+ }
981
+ ],
736
982
  "yoda": "error"
737
983
  },
738
984
  },
@@ -742,46 +988,91 @@ export default [
742
988
  name: "eslint-config-setup/js-compat",
743
989
  files: ["**/*.{js,mjs,cjs}"],
744
990
  rules: {
991
+ "@typescript-eslint/adjacent-overload-signatures": "off",
992
+ "@typescript-eslint/array-type": "off",
745
993
  "@typescript-eslint/await-thenable": "off",
994
+ "@typescript-eslint/ban-ts-comment": "off",
995
+ "@typescript-eslint/ban-tslint-comment": "off",
996
+ "@typescript-eslint/class-literal-property-style": "off",
997
+ "@typescript-eslint/consistent-generic-constructors": "off",
998
+ "@typescript-eslint/consistent-indexed-object-style": "off",
746
999
  "@typescript-eslint/consistent-return": "off",
1000
+ "@typescript-eslint/consistent-type-assertions": "off",
1001
+ "@typescript-eslint/consistent-type-definitions": "off",
747
1002
  "@typescript-eslint/consistent-type-exports": "off",
1003
+ "@typescript-eslint/consistent-type-imports": "off",
748
1004
  "@typescript-eslint/dot-notation": "off",
1005
+ "@typescript-eslint/method-signature-style": "off",
749
1006
  "@typescript-eslint/naming-convention": "off",
1007
+ "@typescript-eslint/no-array-constructor": "off",
750
1008
  "@typescript-eslint/no-array-delete": "off",
751
1009
  "@typescript-eslint/no-base-to-string": "off",
1010
+ "@typescript-eslint/no-confusing-non-null-assertion": "off",
752
1011
  "@typescript-eslint/no-confusing-void-expression": "off",
753
1012
  "@typescript-eslint/no-deprecated": "off",
1013
+ "@typescript-eslint/no-duplicate-enum-values": "off",
754
1014
  "@typescript-eslint/no-duplicate-type-constituents": "off",
1015
+ "@typescript-eslint/no-dynamic-delete": "off",
1016
+ "@typescript-eslint/no-empty-function": "off",
1017
+ "@typescript-eslint/no-empty-object-type": "off",
1018
+ "@typescript-eslint/no-explicit-any": "off",
1019
+ "@typescript-eslint/no-extra-non-null-assertion": "off",
1020
+ "@typescript-eslint/no-extraneous-class": "off",
755
1021
  "@typescript-eslint/no-floating-promises": "off",
756
1022
  "@typescript-eslint/no-for-in-array": "off",
757
1023
  "@typescript-eslint/no-implied-eval": "off",
1024
+ "@typescript-eslint/no-import-type-side-effects": "off",
1025
+ "@typescript-eslint/no-inferrable-types": "off",
1026
+ "@typescript-eslint/no-invalid-void-type": "off",
758
1027
  "@typescript-eslint/no-meaningless-void-operator": "off",
1028
+ "@typescript-eslint/no-misused-new": "off",
759
1029
  "@typescript-eslint/no-misused-promises": "off",
760
1030
  "@typescript-eslint/no-misused-spread": "off",
761
1031
  "@typescript-eslint/no-mixed-enums": "off",
1032
+ "@typescript-eslint/no-namespace": "off",
1033
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "off",
1034
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "off",
1035
+ "@typescript-eslint/no-non-null-assertion": "off",
762
1036
  "@typescript-eslint/no-redundant-type-constituents": "off",
1037
+ "@typescript-eslint/no-require-imports": "off",
1038
+ "@typescript-eslint/no-shadow": "off",
1039
+ "@typescript-eslint/no-this-alias": "off",
763
1040
  "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
764
1041
  "@typescript-eslint/no-unnecessary-condition": "off",
1042
+ "@typescript-eslint/no-unnecessary-parameter-property-assignment": "off",
765
1043
  "@typescript-eslint/no-unnecessary-qualifier": "off",
766
1044
  "@typescript-eslint/no-unnecessary-template-expression": "off",
767
1045
  "@typescript-eslint/no-unnecessary-type-arguments": "off",
768
1046
  "@typescript-eslint/no-unnecessary-type-assertion": "off",
1047
+ "@typescript-eslint/no-unnecessary-type-constraint": "off",
769
1048
  "@typescript-eslint/no-unnecessary-type-conversion": "off",
770
1049
  "@typescript-eslint/no-unnecessary-type-parameters": "off",
771
1050
  "@typescript-eslint/no-unsafe-argument": "off",
772
1051
  "@typescript-eslint/no-unsafe-assignment": "off",
773
1052
  "@typescript-eslint/no-unsafe-call": "off",
1053
+ "@typescript-eslint/no-unsafe-declaration-merging": "off",
774
1054
  "@typescript-eslint/no-unsafe-enum-comparison": "off",
1055
+ "@typescript-eslint/no-unsafe-function-type": "off",
775
1056
  "@typescript-eslint/no-unsafe-member-access": "off",
776
1057
  "@typescript-eslint/no-unsafe-return": "off",
777
1058
  "@typescript-eslint/no-unsafe-type-assertion": "off",
778
1059
  "@typescript-eslint/no-unsafe-unary-minus": "off",
1060
+ "@typescript-eslint/no-unused-expressions": "off",
1061
+ "@typescript-eslint/no-unused-vars": "off",
1062
+ "@typescript-eslint/no-useless-constructor": "off",
779
1063
  "@typescript-eslint/no-useless-default-assignment": "off",
1064
+ "@typescript-eslint/no-useless-empty-export": "off",
1065
+ "@typescript-eslint/no-wrapper-object-types": "off",
780
1066
  "@typescript-eslint/non-nullable-type-assertion-style": "off",
781
1067
  "@typescript-eslint/only-throw-error": "off",
1068
+ "@typescript-eslint/prefer-as-const": "off",
782
1069
  "@typescript-eslint/prefer-destructuring": "off",
783
1070
  "@typescript-eslint/prefer-find": "off",
1071
+ "@typescript-eslint/prefer-for-of": "off",
1072
+ "@typescript-eslint/prefer-function-type": "off",
784
1073
  "@typescript-eslint/prefer-includes": "off",
1074
+ "@typescript-eslint/prefer-literal-enum-member": "off",
1075
+ "@typescript-eslint/prefer-namespace-keyword": "off",
785
1076
  "@typescript-eslint/prefer-nullish-coalescing": "off",
786
1077
  "@typescript-eslint/prefer-optional-chain": "off",
787
1078
  "@typescript-eslint/prefer-promise-reject-errors": "off",
@@ -801,33 +1092,47 @@ export default [
801
1092
  "@typescript-eslint/strict-boolean-expressions": "off",
802
1093
  "@typescript-eslint/strict-void-return": "off",
803
1094
  "@typescript-eslint/switch-exhaustiveness-check": "off",
1095
+ "@typescript-eslint/triple-slash-reference": "off",
804
1096
  "@typescript-eslint/unbound-method": "off",
1097
+ "@typescript-eslint/unified-signatures": "off",
805
1098
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
806
1099
  "constructor-super": "error",
1100
+ "dot-notation": "off",
807
1101
  "getter-return": "error",
1102
+ "no-array-constructor": "off",
808
1103
  "no-class-assign": "error",
809
1104
  "no-const-assign": "error",
810
1105
  "no-dupe-args": "error",
811
1106
  "no-dupe-class-members": "error",
812
1107
  "no-dupe-keys": "error",
1108
+ "no-empty-function": "off",
813
1109
  "no-func-assign": "error",
1110
+ "no-implied-eval": "off",
814
1111
  "no-import-assign": "error",
815
1112
  "no-new-native-nonconstructor": "error",
816
1113
  "no-new-symbol": "off",
817
1114
  "no-obj-calls": "error",
818
1115
  "no-redeclare": "error",
1116
+ "no-return-await": "off",
819
1117
  "no-setter-return": "error",
1118
+ "no-shadow": "off",
820
1119
  "no-this-before-super": "error",
1120
+ "no-throw-literal": "off",
821
1121
  "no-undef": "error",
822
1122
  "no-unreachable": "error",
823
1123
  "no-unsafe-negation": "error",
1124
+ "no-unused-expressions": "off",
1125
+ "no-unused-vars": "error",
1126
+ "no-useless-constructor": "off",
824
1127
  "no-with": "error",
825
1128
  "prefer-const": [
826
1129
  "error",
827
1130
  {
828
1131
  "destructuring": "all"
829
1132
  }
830
- ]
1133
+ ],
1134
+ "prefer-promise-reject-errors": "off",
1135
+ "require-await": "off"
831
1136
  },
832
1137
  },
833
1138
 
@@ -1065,7 +1370,131 @@ export default [
1065
1370
  // Markdown/MDX code block linting
1066
1371
  {
1067
1372
  ...mdxPlugin.flatCodeBlocks,
1373
+ languageOptions: {
1374
+ ...mdxPlugin.flatCodeBlocks.languageOptions,
1375
+ parserOptions: {
1376
+ ...mdxPlugin.flatCodeBlocks.languageOptions?.parserOptions,
1377
+ projectService: false,
1378
+ },
1379
+ },
1068
1380
  rules: {
1381
+ ...{
1382
+ "@typescript-eslint/adjacent-overload-signatures": "off",
1383
+ "@typescript-eslint/array-type": "off",
1384
+ "@typescript-eslint/await-thenable": "off",
1385
+ "@typescript-eslint/ban-ts-comment": "off",
1386
+ "@typescript-eslint/ban-tslint-comment": "off",
1387
+ "@typescript-eslint/class-literal-property-style": "off",
1388
+ "@typescript-eslint/consistent-generic-constructors": "off",
1389
+ "@typescript-eslint/consistent-indexed-object-style": "off",
1390
+ "@typescript-eslint/consistent-type-assertions": "off",
1391
+ "@typescript-eslint/consistent-type-definitions": "off",
1392
+ "@typescript-eslint/consistent-type-exports": "off",
1393
+ "@typescript-eslint/consistent-type-imports": "off",
1394
+ "@typescript-eslint/dot-notation": "off",
1395
+ "@typescript-eslint/method-signature-style": "off",
1396
+ "@typescript-eslint/no-array-constructor": "off",
1397
+ "@typescript-eslint/no-array-delete": "off",
1398
+ "@typescript-eslint/no-base-to-string": "off",
1399
+ "@typescript-eslint/no-confusing-non-null-assertion": "off",
1400
+ "@typescript-eslint/no-confusing-void-expression": "off",
1401
+ "@typescript-eslint/no-deprecated": "off",
1402
+ "@typescript-eslint/no-duplicate-enum-values": "off",
1403
+ "@typescript-eslint/no-duplicate-type-constituents": "off",
1404
+ "@typescript-eslint/no-dynamic-delete": "off",
1405
+ "@typescript-eslint/no-empty-function": "off",
1406
+ "@typescript-eslint/no-empty-object-type": "off",
1407
+ "@typescript-eslint/no-explicit-any": "off",
1408
+ "@typescript-eslint/no-extra-non-null-assertion": "off",
1409
+ "@typescript-eslint/no-extraneous-class": "off",
1410
+ "@typescript-eslint/no-floating-promises": "off",
1411
+ "@typescript-eslint/no-for-in-array": "off",
1412
+ "@typescript-eslint/no-implied-eval": "off",
1413
+ "@typescript-eslint/no-import-type-side-effects": "off",
1414
+ "@typescript-eslint/no-inferrable-types": "off",
1415
+ "@typescript-eslint/no-invalid-void-type": "off",
1416
+ "@typescript-eslint/no-meaningless-void-operator": "off",
1417
+ "@typescript-eslint/no-misused-new": "off",
1418
+ "@typescript-eslint/no-misused-spread": "off",
1419
+ "@typescript-eslint/no-mixed-enums": "off",
1420
+ "@typescript-eslint/no-namespace": "off",
1421
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "off",
1422
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "off",
1423
+ "@typescript-eslint/no-non-null-assertion": "off",
1424
+ "@typescript-eslint/no-redundant-type-constituents": "off",
1425
+ "@typescript-eslint/no-require-imports": "off",
1426
+ "@typescript-eslint/no-shadow": "off",
1427
+ "@typescript-eslint/no-this-alias": "off",
1428
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
1429
+ "@typescript-eslint/no-unnecessary-condition": "off",
1430
+ "@typescript-eslint/no-unnecessary-parameter-property-assignment": "off",
1431
+ "@typescript-eslint/no-unnecessary-qualifier": "off",
1432
+ "@typescript-eslint/no-unnecessary-template-expression": "off",
1433
+ "@typescript-eslint/no-unnecessary-type-arguments": "off",
1434
+ "@typescript-eslint/no-unnecessary-type-assertion": "off",
1435
+ "@typescript-eslint/no-unnecessary-type-constraint": "off",
1436
+ "@typescript-eslint/no-unnecessary-type-conversion": "off",
1437
+ "@typescript-eslint/no-unnecessary-type-parameters": "off",
1438
+ "@typescript-eslint/no-unsafe-argument": "off",
1439
+ "@typescript-eslint/no-unsafe-assignment": "off",
1440
+ "@typescript-eslint/no-unsafe-call": "off",
1441
+ "@typescript-eslint/no-unsafe-declaration-merging": "off",
1442
+ "@typescript-eslint/no-unsafe-enum-comparison": "off",
1443
+ "@typescript-eslint/no-unsafe-function-type": "off",
1444
+ "@typescript-eslint/no-unsafe-member-access": "off",
1445
+ "@typescript-eslint/no-unsafe-return": "off",
1446
+ "@typescript-eslint/no-unsafe-type-assertion": "off",
1447
+ "@typescript-eslint/no-unsafe-unary-minus": "off",
1448
+ "@typescript-eslint/no-unused-expressions": "off",
1449
+ "@typescript-eslint/no-unused-vars": "off",
1450
+ "@typescript-eslint/no-useless-constructor": "off",
1451
+ "@typescript-eslint/no-useless-default-assignment": "off",
1452
+ "@typescript-eslint/no-useless-empty-export": "off",
1453
+ "@typescript-eslint/no-wrapper-object-types": "off",
1454
+ "@typescript-eslint/non-nullable-type-assertion-style": "off",
1455
+ "@typescript-eslint/only-throw-error": "off",
1456
+ "@typescript-eslint/prefer-as-const": "off",
1457
+ "@typescript-eslint/prefer-find": "off",
1458
+ "@typescript-eslint/prefer-for-of": "off",
1459
+ "@typescript-eslint/prefer-function-type": "off",
1460
+ "@typescript-eslint/prefer-includes": "off",
1461
+ "@typescript-eslint/prefer-literal-enum-member": "off",
1462
+ "@typescript-eslint/prefer-namespace-keyword": "off",
1463
+ "@typescript-eslint/prefer-nullish-coalescing": "off",
1464
+ "@typescript-eslint/prefer-optional-chain": "off",
1465
+ "@typescript-eslint/prefer-promise-reject-errors": "off",
1466
+ "@typescript-eslint/prefer-readonly": "off",
1467
+ "@typescript-eslint/prefer-reduce-type-parameter": "off",
1468
+ "@typescript-eslint/prefer-regexp-exec": "off",
1469
+ "@typescript-eslint/prefer-return-this-type": "off",
1470
+ "@typescript-eslint/prefer-string-starts-ends-with": "off",
1471
+ "@typescript-eslint/promise-function-async": "off",
1472
+ "@typescript-eslint/related-getter-setter-pairs": "off",
1473
+ "@typescript-eslint/require-array-sort-compare": "off",
1474
+ "@typescript-eslint/require-await": "off",
1475
+ "@typescript-eslint/restrict-plus-operands": "off",
1476
+ "@typescript-eslint/restrict-template-expressions": "off",
1477
+ "@typescript-eslint/return-await": "off",
1478
+ "@typescript-eslint/strict-boolean-expressions": "off",
1479
+ "@typescript-eslint/strict-void-return": "off",
1480
+ "@typescript-eslint/switch-exhaustiveness-check": "off",
1481
+ "@typescript-eslint/triple-slash-reference": "off",
1482
+ "@typescript-eslint/unbound-method": "off",
1483
+ "@typescript-eslint/unified-signatures": "off",
1484
+ "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
1485
+ "dot-notation": "off",
1486
+ "no-array-constructor": "off",
1487
+ "no-empty-function": "off",
1488
+ "no-implied-eval": "off",
1489
+ "no-return-await": "off",
1490
+ "no-shadow": "off",
1491
+ "no-throw-literal": "off",
1492
+ "no-useless-constructor": "off",
1493
+ "prefer-promise-reject-errors": "off",
1494
+ "require-await": "off",
1495
+ "strict": "off",
1496
+ "unicode-bom": "off"
1497
+ },
1069
1498
  ...mdxPlugin.flatCodeBlocks.rules,
1070
1499
  "eol-last": "off",
1071
1500
  "no-undef": "off",