eslint-config-setup 0.3.3 → 0.5.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.
@@ -15,6 +15,7 @@ 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
17
  import reactHooksPlugin from "eslint-plugin-react-hooks"
18
+ import reactPerfPlugin from "eslint-plugin-react-perf"
18
19
  import reactRefreshPlugin from "eslint-plugin-react-refresh"
19
20
  import regexpPlugin from "eslint-plugin-regexp"
20
21
  import securityPlugin from "eslint-plugin-security"
@@ -27,13 +28,99 @@ import unicornPlugin from "eslint-plugin-unicorn"
27
28
  import unusedImportsPlugin from "eslint-plugin-unused-imports"
28
29
  import vitestPlugin from "@vitest/eslint-plugin"
29
30
 
31
+ // React compat plugin — maps @eslint-react rule families into the `react/` namespace
32
+ // and aliases rules to legacy eslint-plugin-react names for OxLint compatibility.
33
+ const reactCompatPlugin = (() => {
34
+ const core = eslintReactPlugin.rules
35
+ const select = (prefix) => Object.fromEntries(
36
+ Object.entries(core)
37
+ .filter(([name]) => name.startsWith(prefix))
38
+ .map(([name, rule]) => [name.slice(prefix.length), rule]),
39
+ )
40
+ const dom = select("dom-")
41
+ const jsx = select("jsx-")
42
+ const naming = select("naming-convention-")
43
+ const rsc = select("rsc-")
44
+ const webApi = select("web-api-")
45
+
46
+ // Legacy aliases: legacy name → [source, original name]
47
+ const aliases = {
48
+ "jsx-key": [core, "no-missing-key"],
49
+ "jsx-key-before-spread": [jsx, "no-key-after-spread"],
50
+ "jsx-no-constructed-context-values": [core, "no-unstable-context-value"],
51
+ "jsx-no-leaked-render": [core, "no-leaked-conditional-rendering"],
52
+ "jsx-no-useless-fragment": [jsx, "no-useless-fragment"],
53
+ "no-object-type-as-default-prop": [core, "no-unstable-default-props"],
54
+ "no-unstable-nested-components": [core, "no-nested-component-definitions"],
55
+ "display-name": [core, "no-missing-component-display-name"],
56
+ "forward-ref-uses-ref": [core, "no-forward-ref"],
57
+ "no-did-mount-set-state": [core, "no-set-state-in-component-did-mount"],
58
+ "no-did-update-set-state": [core, "no-set-state-in-component-did-update"],
59
+ "no-will-update-set-state": [core, "no-set-state-in-component-will-update"],
60
+ "hook-use-state": [core, "use-state"],
61
+ "no-danger": [dom, "no-dangerously-set-innerhtml"],
62
+ "no-danger-with-children": [dom, "no-dangerously-set-innerhtml-with-children"],
63
+ "no-find-dom-node": [dom, "no-find-dom-node"],
64
+ "no-namespace": [jsx, "no-namespace"],
65
+ "no-render-return-value": [dom, "no-render-return-value"],
66
+ "jsx-no-script-url": [dom, "no-script-url"],
67
+ "jsx-no-target-blank": [dom, "no-unsafe-target-blank"],
68
+ "no-unknown-property": [dom, "no-unknown-property"],
69
+ "void-dom-elements-no-children": [dom, "no-void-elements-with-children"],
70
+ "button-has-type": [dom, "no-missing-button-type"],
71
+ "iframe-missing-sandbox": [dom, "no-missing-iframe-sandbox"],
72
+ "style-prop-object": [dom, "no-string-style-prop"],
73
+ }
74
+
75
+ // Identical-name aliases (core rules where legacy name = @eslint-react name)
76
+ const identicalCore = [
77
+ "no-access-state-in-setstate", "no-array-index-key",
78
+ "no-direct-mutation-state",
79
+ "no-unused-class-component-members", "no-unused-state",
80
+ ]
81
+ for (const n of identicalCore) aliases[n] = [core, n]
82
+ aliases["no-children-prop"] = [jsx, "no-children-prop"]
83
+ aliases["jsx-no-comment-textnodes"] = [jsx, "no-comment-textnodes"]
84
+
85
+ // Build aliased originals set
86
+ const aliasedCore = new Set()
87
+ for (const [src, name] of Object.values(aliases)) {
88
+ if (src === core) aliasedCore.add(name)
89
+ else if (src === dom) aliasedCore.add("dom-" + name)
90
+ else if (src === jsx) aliasedCore.add("jsx-" + name)
91
+ else if (src === naming) aliasedCore.add("naming-convention-" + name)
92
+ else if (src === rsc) aliasedCore.add("rsc-" + name)
93
+ else if (src === webApi) aliasedCore.add("web-api-" + name)
94
+ }
95
+ const rules = {}
96
+
97
+ // Core rules (skip aliased originals)
98
+ for (const [n, r] of Object.entries(core)) { if (!aliasedCore.has(n)) rules[n] = r }
99
+
100
+ // Sub-plugin rules (skip aliased + prefer-namespace-import collision)
101
+ const subs = [[dom, new Set(['prefer-namespace-import'])], [jsx], [webApi], [naming], [rsc]]
102
+ for (const [src, skip] of subs) {
103
+ for (const [n, r] of Object.entries(src)) {
104
+ if (skip && skip.has(n)) continue
105
+ if (Object.values(aliases).some(([s, o]) => s === src && o === n)) continue
106
+ rules[n] = r
107
+ }
108
+ }
109
+
110
+ // Add legacy aliases
111
+ for (const [legacy, [src, orig]] of Object.entries(aliases)) rules[legacy] = src[orig]
112
+
113
+ return { meta: { name: "react-compat", version: "1.0.0" }, rules }
114
+ })()
115
+
30
116
  export default [
31
117
  // TypeScript parser setup
32
118
  ...tseslint.configs.strictTypeChecked.slice(0, 2),
33
119
 
34
- // Base rules — all effective rules for *.ts files
120
+ // Base rules — all effective rules for TS plus shared JS/TS rules
35
121
  {
36
122
  name: "eslint-config-setup/base",
123
+ ignores: ["**/*.{md,mdx}"],
37
124
  plugins: {
38
125
  "@cspell": cspellPlugin,
39
126
  "@stylistic": stylisticPlugin,
@@ -44,11 +131,10 @@ export default [
44
131
  "jsx-a11y": jsxA11yPlugin,
45
132
  "node": nodePlugin,
46
133
  "perfectionist": perfectionistPlugin,
47
- "react": eslintReactPlugin,
48
- "react-dom": eslintReactPlugin.configs.dom.plugins["@eslint-react/dom"],
134
+ "react": reactCompatPlugin,
49
135
  "react-hooks": reactHooksPlugin,
136
+ "react-perf": reactPerfPlugin,
50
137
  "react-refresh": reactRefreshPlugin,
51
- "react-web-api": eslintReactPlugin.configs["web-api"].plugins["@eslint-react/web-api"],
52
138
  "react-you-might-not-need-an-effect": reactEffectPlugin,
53
139
  "regexp": regexpPlugin,
54
140
  "security": securityPlugin,
@@ -96,7 +182,7 @@ export default [
96
182
  "@typescript-eslint/ban-ts-comment": [
97
183
  "error",
98
184
  {
99
- "minimumDescriptionLength": 10
185
+ "ts-expect-error": "allow-with-description"
100
186
  }
101
187
  ],
102
188
  "@typescript-eslint/ban-tslint-comment": "error",
@@ -323,12 +409,7 @@ export default [
323
409
  "@typescript-eslint/no-dynamic-delete": "error",
324
410
  "@typescript-eslint/no-empty-function": "error",
325
411
  "@typescript-eslint/no-empty-object-type": "error",
326
- "@typescript-eslint/no-explicit-any": [
327
- "error",
328
- {
329
- "fixToUnknown": true
330
- }
331
- ],
412
+ "@typescript-eslint/no-explicit-any": "error",
332
413
  "@typescript-eslint/no-extra-non-null-assertion": "error",
333
414
  "@typescript-eslint/no-extraneous-class": "error",
334
415
  "@typescript-eslint/no-floating-promises": [
@@ -364,7 +445,12 @@ export default [
364
445
  ],
365
446
  "@typescript-eslint/no-meaningless-void-operator": "error",
366
447
  "@typescript-eslint/no-misused-new": "error",
367
- "@typescript-eslint/no-misused-promises": "error",
448
+ "@typescript-eslint/no-misused-promises": [
449
+ "error",
450
+ {
451
+ "checksVoidReturn": false
452
+ }
453
+ ],
368
454
  "@typescript-eslint/no-misused-spread": "error",
369
455
  "@typescript-eslint/no-mixed-enums": "error",
370
456
  "@typescript-eslint/no-namespace": "error",
@@ -531,17 +617,35 @@ export default [
531
617
  "maxDepth": 3
532
618
  }
533
619
  ],
534
- "import/no-duplicates": [
620
+ "import/no-duplicates": "error",
621
+ "import/no-empty-named-blocks": "error",
622
+ "import/no-extraneous-dependencies": [
535
623
  "error",
536
624
  {
537
- "prefer-inline": true
625
+ "includeTypes": true
538
626
  }
539
627
  ],
540
- "import/no-empty-named-blocks": "error",
541
628
  "import/no-mutable-exports": "error",
542
629
  "import/no-named-as-default": "error",
543
630
  "import/no-named-as-default-member": "error",
631
+ "import/no-named-default": "error",
544
632
  "import/no-self-import": "error",
633
+ "import/no-unassigned-import": [
634
+ "error",
635
+ {
636
+ "allow": [
637
+ "@babel/polyfill",
638
+ "**/register",
639
+ "**/register.*",
640
+ "**/register/**",
641
+ "**/register/**.*",
642
+ "**/*.css",
643
+ "**/*.scss",
644
+ "**/*.sass",
645
+ "**/*.less"
646
+ ]
647
+ }
648
+ ],
545
649
  "import/no-useless-path-segments": "error",
546
650
  "jsdoc/check-access": "error",
547
651
  "jsdoc/check-alignment": "error",
@@ -630,7 +734,7 @@ export default [
630
734
  "max-lines-per-function": [
631
735
  "error",
632
736
  {
633
- "max": 50,
737
+ "max": 100,
634
738
  "skipBlankLines": true,
635
739
  "skipComments": true
636
740
  }
@@ -679,6 +783,7 @@ export default [
679
783
  "no-fallthrough": "error",
680
784
  "no-global-assign": "error",
681
785
  "no-implicit-coercion": "error",
786
+ "no-implicit-globals": "error",
682
787
  "no-irregular-whitespace": "error",
683
788
  "no-iterator": "error",
684
789
  "no-labels": "error",
@@ -714,7 +819,12 @@ export default [
714
819
  "no-script-url": "error",
715
820
  "no-self-assign": "error",
716
821
  "no-self-compare": "error",
717
- "no-sequences": "error",
822
+ "no-sequences": [
823
+ "error",
824
+ {
825
+ "allowInParentheses": false
826
+ }
827
+ ],
718
828
  "no-shadow-restricted-names": "error",
719
829
  "no-sparse-arrays": "error",
720
830
  "no-template-curly-in-string": "error",
@@ -729,13 +839,19 @@ export default [
729
839
  "no-useless-assignment": "error",
730
840
  "no-useless-call": "error",
731
841
  "no-useless-catch": "error",
732
- "no-useless-computed-key": "error",
842
+ "no-useless-computed-key": [
843
+ "error",
844
+ {
845
+ "enforceForClassMembers": true
846
+ }
847
+ ],
733
848
  "no-useless-concat": "error",
734
849
  "no-useless-escape": "error",
735
850
  "no-useless-rename": "error",
736
851
  "no-useless-return": "error",
737
852
  "no-var": "error",
738
853
  "no-warning-comments": "warn",
854
+ "node/handle-callback-err": "error",
739
855
  "node/hashbang": "error",
740
856
  "node/no-deprecated-api": "error",
741
857
  "node/no-exports-assign": "error",
@@ -764,10 +880,12 @@ export default [
764
880
  ],
765
881
  "node/prefer-promises/dns": "error",
766
882
  "node/prefer-promises/fs": "error",
883
+ "node/process-exit-as-throw": "error",
767
884
  "object-shorthand": [
768
885
  "error",
769
886
  "always",
770
887
  {
888
+ "avoidExplicitReturnArrows": true,
771
889
  "avoidQuotes": true
772
890
  }
773
891
  ],
@@ -802,14 +920,10 @@ export default [
802
920
  "allowNamedFunctions": true
803
921
  }
804
922
  ],
805
- "prefer-const": [
806
- "error",
807
- {
808
- "destructuring": "all"
809
- }
810
- ],
923
+ "prefer-const": "error",
811
924
  "prefer-exponentiation-operator": "error",
812
925
  "prefer-named-capture-group": "error",
926
+ "prefer-numeric-literals": "error",
813
927
  "prefer-object-has-own": "error",
814
928
  "prefer-object-spread": "error",
815
929
  "prefer-regex-literals": "error",
@@ -818,52 +932,113 @@ export default [
818
932
  "prefer-template": "error",
819
933
  "preserve-caught-error": "error",
820
934
  "radix": "error",
821
- "react-dom/no-dangerously-set-innerhtml": "warn",
822
- "react-dom/no-dangerously-set-innerhtml-with-children": "error",
823
- "react-dom/no-missing-button-type": "error",
824
- "react-dom/no-missing-iframe-sandbox": "error",
825
- "react-dom/no-string-style-prop": "error",
826
- "react-dom/no-unknown-property": "error",
827
- "react-dom/no-unsafe-target-blank": "error",
828
- "react-dom/no-void-elements-with-children": "error",
829
- "react-hooks/exhaustive-deps": "error",
935
+ "react-hooks/config": "error",
936
+ "react-hooks/error-boundaries": "error",
937
+ "react-hooks/exhaustive-deps": "warn",
938
+ "react-hooks/gating": "error",
939
+ "react-hooks/globals": "error",
940
+ "react-hooks/immutability": "error",
941
+ "react-hooks/incompatible-library": "warn",
942
+ "react-hooks/preserve-manual-memoization": "error",
943
+ "react-hooks/purity": "error",
944
+ "react-hooks/refs": "error",
830
945
  "react-hooks/rules-of-hooks": "error",
946
+ "react-hooks/set-state-in-effect": "error",
947
+ "react-hooks/set-state-in-render": "error",
948
+ "react-hooks/static-components": "error",
949
+ "react-hooks/unsupported-syntax": "warn",
950
+ "react-hooks/use-memo": "error",
951
+ "react-hooks/void-use-memo": "error",
952
+ "react-perf/jsx-no-jsx-as-prop": "error",
953
+ "react-perf/jsx-no-new-array-as-prop": "error",
954
+ "react-perf/jsx-no-new-function-as-prop": "error",
955
+ "react-perf/jsx-no-new-object-as-prop": "error",
831
956
  "react-refresh/only-export-components": [
832
957
  "warn",
833
958
  {
834
959
  "allowConstantExport": true
835
960
  }
836
961
  ],
837
- "react-web-api/no-leaked-event-listener": "error",
838
- "react-web-api/no-leaked-interval": "error",
839
- "react-web-api/no-leaked-resize-observer": "error",
840
- "react-web-api/no-leaked-timeout": "error",
841
962
  "react-you-might-not-need-an-effect/no-adjust-state-on-prop-change": "warn",
842
963
  "react-you-might-not-need-an-effect/no-chain-state-updates": "error",
843
964
  "react-you-might-not-need-an-effect/no-derived-state": "error",
844
- "react-you-might-not-need-an-effect/no-empty-effect": "error",
845
965
  "react-you-might-not-need-an-effect/no-event-handler": "error",
966
+ "react-you-might-not-need-an-effect/no-external-store-subscription": "error",
846
967
  "react-you-might-not-need-an-effect/no-initialize-state": "error",
847
968
  "react-you-might-not-need-an-effect/no-pass-data-to-parent": "error",
848
969
  "react-you-might-not-need-an-effect/no-pass-live-state-to-parent": "error",
849
970
  "react-you-might-not-need-an-effect/no-reset-all-state-on-prop-change": "error",
971
+ "react/button-has-type": "error",
972
+ "react/context-name": "warn",
973
+ "react/forward-ref-uses-ref": "error",
974
+ "react/function-definition": "error",
975
+ "react/hook-use-state": "warn",
976
+ "react/id-name": "warn",
977
+ "react/iframe-missing-sandbox": "error",
978
+ "react/jsx-key": "error",
979
+ "react/jsx-key-before-spread": "error",
980
+ "react/jsx-no-children-prop-with-children": "error",
850
981
  "react/jsx-no-comment-textnodes": "error",
851
- "react/jsx-shorthand-boolean": "error",
982
+ "react/jsx-no-constructed-context-values": "error",
983
+ "react/jsx-no-leaked-dollar": "warn",
984
+ "react/jsx-no-leaked-render": "error",
985
+ "react/jsx-no-leaked-semicolon": "warn",
986
+ "react/jsx-no-script-url": "warn",
987
+ "react/jsx-no-target-blank": "error",
988
+ "react/jsx-no-useless-fragment": "error",
852
989
  "react/no-access-state-in-setstate": "error",
853
990
  "react/no-array-index-key": "error",
991
+ "react/no-children-count": "warn",
992
+ "react/no-children-for-each": "warn",
993
+ "react/no-children-map": "warn",
994
+ "react/no-children-only": "warn",
854
995
  "react/no-children-prop": "error",
996
+ "react/no-children-to-array": "warn",
997
+ "react/no-class-component": "error",
998
+ "react/no-clone-element": "warn",
999
+ "react/no-component-will-mount": "error",
1000
+ "react/no-component-will-receive-props": "error",
1001
+ "react/no-component-will-update": "error",
855
1002
  "react/no-context-provider": "error",
1003
+ "react/no-create-ref": "error",
1004
+ "react/no-danger": "warn",
1005
+ "react/no-danger-with-children": "error",
1006
+ "react/no-did-mount-set-state": "warn",
1007
+ "react/no-did-update-set-state": "warn",
856
1008
  "react/no-direct-mutation-state": "error",
857
1009
  "react/no-duplicate-key": "error",
858
- "react/no-forward-ref": "error",
859
- "react/no-leaked-conditional-rendering": "error",
860
- "react/no-missing-key": "error",
861
- "react/no-nested-component-definitions": "error",
862
- "react/no-unstable-context-value": "error",
863
- "react/no-unstable-default-props": "error",
1010
+ "react/no-find-dom-node": "error",
1011
+ "react/no-flush-sync": "error",
1012
+ "react/no-hydrate": "error",
1013
+ "react/no-implicit-key": "error",
1014
+ "react/no-leaked-event-listener": "error",
1015
+ "react/no-leaked-fetch": "warn",
1016
+ "react/no-leaked-intersection-observer": "warn",
1017
+ "react/no-leaked-interval": "error",
1018
+ "react/no-leaked-resize-observer": "error",
1019
+ "react/no-leaked-timeout": "error",
1020
+ "react/no-misused-capture-owner-stack": "error",
1021
+ "react/no-namespace": "error",
1022
+ "react/no-nested-lazy-component-declarations": "error",
1023
+ "react/no-object-type-as-default-prop": "error",
1024
+ "react/no-render": "error",
1025
+ "react/no-render-return-value": "error",
1026
+ "react/no-unknown-property": "error",
1027
+ "react/no-unnecessary-use-prefix": "warn",
1028
+ "react/no-unsafe-component-will-mount": "warn",
1029
+ "react/no-unsafe-component-will-receive-props": "warn",
1030
+ "react/no-unsafe-component-will-update": "warn",
1031
+ "react/no-unsafe-iframe-sandbox": "warn",
1032
+ "react/no-unstable-nested-components": "error",
1033
+ "react/no-unused-class-component-members": "warn",
1034
+ "react/no-unused-props": "warn",
864
1035
  "react/no-unused-state": "error",
865
1036
  "react/no-use-context": "error",
866
- "react/no-useless-fragment": "error",
1037
+ "react/no-use-form-state": "error",
1038
+ "react/no-will-update-set-state": "warn",
1039
+ "react/ref-name": "warn",
1040
+ "react/style-prop-object": "error",
1041
+ "react/void-dom-elements-no-children": "error",
867
1042
  "regexp/confusing-quantifier": "warn",
868
1043
  "regexp/control-character-escape": "error",
869
1044
  "regexp/match-any": "error",
@@ -1010,8 +1185,12 @@ export default [
1010
1185
  {
1011
1186
  "cases": {
1012
1187
  "camelCase": true,
1013
- "pascalCase": true
1014
- }
1188
+ "pascalCase": true,
1189
+ "kebabCase": true
1190
+ },
1191
+ "ignore": [
1192
+ "__tests__"
1193
+ ]
1015
1194
  }
1016
1195
  ],
1017
1196
  "unicorn/new-for-builtins": "error",
@@ -1019,12 +1198,12 @@ export default [
1019
1198
  "unicorn/no-accessor-recursion": "error",
1020
1199
  "unicorn/no-anonymous-default-export": "error",
1021
1200
  "unicorn/no-array-callback-reference": "error",
1022
- "unicorn/no-array-for-each": "error",
1023
1201
  "unicorn/no-array-method-this-argument": "error",
1024
1202
  "unicorn/no-array-push-push": "error",
1025
1203
  "unicorn/no-array-reduce": "error",
1026
1204
  "unicorn/no-await-expression-member": "error",
1027
1205
  "unicorn/no-await-in-promise-methods": "error",
1206
+ "unicorn/no-for-each": "error",
1028
1207
  "unicorn/no-for-loop": "error",
1029
1208
  "unicorn/no-instanceof-builtins": "error",
1030
1209
  "unicorn/no-invalid-fetch-options": "error",
@@ -1044,7 +1223,12 @@ export default [
1044
1223
  "unicorn/no-useless-promise-resolve-reject": "error",
1045
1224
  "unicorn/no-useless-spread": "error",
1046
1225
  "unicorn/no-useless-switch-case": "error",
1047
- "unicorn/no-useless-undefined": "error",
1226
+ "unicorn/no-useless-undefined": [
1227
+ "warn",
1228
+ {
1229
+ "checkArguments": false
1230
+ }
1231
+ ],
1048
1232
  "unicorn/no-zero-fractions": "error",
1049
1233
  "unicorn/numeric-separators-style": "error",
1050
1234
  "unicorn/prefer-array-find": "error",
@@ -1055,10 +1239,11 @@ export default [
1055
1239
  "unicorn/prefer-at": "error",
1056
1240
  "unicorn/prefer-date-now": "error",
1057
1241
  "unicorn/prefer-default-parameters": "error",
1242
+ "unicorn/prefer-dom-node-dataset": "error",
1058
1243
  "unicorn/prefer-export-from": [
1059
1244
  "error",
1060
1245
  {
1061
- "ignoreUsedVariables": true
1246
+ "checkUsedVariables": false
1062
1247
  }
1063
1248
  ],
1064
1249
  "unicorn/prefer-global-this": "error",
@@ -1101,8 +1286,19 @@ export default [
1101
1286
  "unicorn/text-encoding-identifier-case": "error",
1102
1287
  "unicorn/throw-new-error": "error",
1103
1288
  "unused-imports/no-unused-imports": "error",
1104
- "use-isnan": "error",
1105
- "valid-typeof": "error",
1289
+ "use-isnan": [
1290
+ "error",
1291
+ {
1292
+ "enforceForIndexOf": true,
1293
+ "enforceForSwitchCase": true
1294
+ }
1295
+ ],
1296
+ "valid-typeof": [
1297
+ "error",
1298
+ {
1299
+ "requireStringLiterals": true
1300
+ }
1301
+ ],
1106
1302
  "yoda": "error"
1107
1303
  },
1108
1304
  },
@@ -1112,78 +1308,156 @@ export default [
1112
1308
  name: "eslint-config-setup/js-compat",
1113
1309
  files: ["**/*.{js,mjs,cjs}"],
1114
1310
  rules: {
1311
+ "@typescript-eslint/adjacent-overload-signatures": "off",
1312
+ "@typescript-eslint/array-type": "off",
1115
1313
  "@typescript-eslint/await-thenable": "off",
1314
+ "@typescript-eslint/ban-ts-comment": "off",
1315
+ "@typescript-eslint/ban-tslint-comment": "off",
1316
+ "@typescript-eslint/class-literal-property-style": "off",
1317
+ "@typescript-eslint/consistent-generic-constructors": "off",
1318
+ "@typescript-eslint/consistent-indexed-object-style": "off",
1116
1319
  "@typescript-eslint/consistent-return": "off",
1320
+ "@typescript-eslint/consistent-type-assertions": "off",
1321
+ "@typescript-eslint/consistent-type-definitions": "off",
1322
+ "@typescript-eslint/consistent-type-exports": "off",
1323
+ "@typescript-eslint/consistent-type-imports": "off",
1117
1324
  "@typescript-eslint/dot-notation": "off",
1325
+ "@typescript-eslint/explicit-function-return-type": "off",
1326
+ "@typescript-eslint/explicit-member-accessibility": "off",
1327
+ "@typescript-eslint/member-ordering": "off",
1328
+ "@typescript-eslint/method-signature-style": "off",
1329
+ "@typescript-eslint/naming-convention": "off",
1330
+ "@typescript-eslint/no-array-constructor": "off",
1118
1331
  "@typescript-eslint/no-array-delete": "off",
1119
1332
  "@typescript-eslint/no-base-to-string": "off",
1333
+ "@typescript-eslint/no-confusing-non-null-assertion": "off",
1120
1334
  "@typescript-eslint/no-confusing-void-expression": "off",
1121
1335
  "@typescript-eslint/no-deprecated": "off",
1336
+ "@typescript-eslint/no-duplicate-enum-values": "off",
1122
1337
  "@typescript-eslint/no-duplicate-type-constituents": "off",
1338
+ "@typescript-eslint/no-dynamic-delete": "off",
1339
+ "@typescript-eslint/no-empty-function": "off",
1340
+ "@typescript-eslint/no-empty-object-type": "off",
1341
+ "@typescript-eslint/no-explicit-any": "off",
1342
+ "@typescript-eslint/no-extra-non-null-assertion": "off",
1343
+ "@typescript-eslint/no-extraneous-class": "off",
1344
+ "@typescript-eslint/no-floating-promises": "off",
1123
1345
  "@typescript-eslint/no-for-in-array": "off",
1124
1346
  "@typescript-eslint/no-implied-eval": "off",
1347
+ "@typescript-eslint/no-import-type-side-effects": "off",
1348
+ "@typescript-eslint/no-inferrable-types": "off",
1349
+ "@typescript-eslint/no-invalid-void-type": "off",
1350
+ "@typescript-eslint/no-magic-numbers": "off",
1125
1351
  "@typescript-eslint/no-meaningless-void-operator": "off",
1352
+ "@typescript-eslint/no-misused-new": "off",
1126
1353
  "@typescript-eslint/no-misused-promises": "off",
1127
1354
  "@typescript-eslint/no-misused-spread": "off",
1128
1355
  "@typescript-eslint/no-mixed-enums": "off",
1356
+ "@typescript-eslint/no-namespace": "off",
1357
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "off",
1358
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "off",
1359
+ "@typescript-eslint/no-non-null-assertion": "off",
1129
1360
  "@typescript-eslint/no-redundant-type-constituents": "off",
1361
+ "@typescript-eslint/no-require-imports": "off",
1362
+ "@typescript-eslint/no-shadow": "off",
1363
+ "@typescript-eslint/no-this-alias": "off",
1130
1364
  "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
1131
1365
  "@typescript-eslint/no-unnecessary-condition": "off",
1366
+ "@typescript-eslint/no-unnecessary-parameter-property-assignment": "off",
1132
1367
  "@typescript-eslint/no-unnecessary-qualifier": "off",
1133
1368
  "@typescript-eslint/no-unnecessary-template-expression": "off",
1134
1369
  "@typescript-eslint/no-unnecessary-type-arguments": "off",
1135
1370
  "@typescript-eslint/no-unnecessary-type-assertion": "off",
1371
+ "@typescript-eslint/no-unnecessary-type-constraint": "off",
1136
1372
  "@typescript-eslint/no-unnecessary-type-conversion": "off",
1137
1373
  "@typescript-eslint/no-unnecessary-type-parameters": "off",
1138
1374
  "@typescript-eslint/no-unsafe-argument": "off",
1139
1375
  "@typescript-eslint/no-unsafe-assignment": "off",
1140
1376
  "@typescript-eslint/no-unsafe-call": "off",
1377
+ "@typescript-eslint/no-unsafe-declaration-merging": "off",
1141
1378
  "@typescript-eslint/no-unsafe-enum-comparison": "off",
1379
+ "@typescript-eslint/no-unsafe-function-type": "off",
1142
1380
  "@typescript-eslint/no-unsafe-member-access": "off",
1143
1381
  "@typescript-eslint/no-unsafe-return": "off",
1382
+ "@typescript-eslint/no-unsafe-type-assertion": "off",
1144
1383
  "@typescript-eslint/no-unsafe-unary-minus": "off",
1384
+ "@typescript-eslint/no-unused-expressions": "off",
1385
+ "@typescript-eslint/no-unused-vars": "off",
1386
+ "@typescript-eslint/no-useless-constructor": "off",
1145
1387
  "@typescript-eslint/no-useless-default-assignment": "off",
1388
+ "@typescript-eslint/no-useless-empty-export": "off",
1389
+ "@typescript-eslint/no-wrapper-object-types": "off",
1146
1390
  "@typescript-eslint/non-nullable-type-assertion-style": "off",
1147
1391
  "@typescript-eslint/only-throw-error": "off",
1392
+ "@typescript-eslint/prefer-as-const": "off",
1148
1393
  "@typescript-eslint/prefer-destructuring": "off",
1394
+ "@typescript-eslint/prefer-enum-initializers": "off",
1149
1395
  "@typescript-eslint/prefer-find": "off",
1396
+ "@typescript-eslint/prefer-for-of": "off",
1397
+ "@typescript-eslint/prefer-function-type": "off",
1150
1398
  "@typescript-eslint/prefer-includes": "off",
1399
+ "@typescript-eslint/prefer-literal-enum-member": "off",
1400
+ "@typescript-eslint/prefer-namespace-keyword": "off",
1151
1401
  "@typescript-eslint/prefer-nullish-coalescing": "off",
1152
1402
  "@typescript-eslint/prefer-optional-chain": "off",
1153
1403
  "@typescript-eslint/prefer-promise-reject-errors": "off",
1404
+ "@typescript-eslint/prefer-readonly": "off",
1154
1405
  "@typescript-eslint/prefer-readonly-parameter-types": "off",
1155
1406
  "@typescript-eslint/prefer-reduce-type-parameter": "off",
1156
1407
  "@typescript-eslint/prefer-regexp-exec": "off",
1157
1408
  "@typescript-eslint/prefer-return-this-type": "off",
1158
1409
  "@typescript-eslint/prefer-string-starts-ends-with": "off",
1410
+ "@typescript-eslint/promise-function-async": "off",
1159
1411
  "@typescript-eslint/related-getter-setter-pairs": "off",
1412
+ "@typescript-eslint/require-array-sort-compare": "off",
1160
1413
  "@typescript-eslint/require-await": "off",
1161
1414
  "@typescript-eslint/restrict-plus-operands": "off",
1162
1415
  "@typescript-eslint/restrict-template-expressions": "off",
1163
1416
  "@typescript-eslint/return-await": "off",
1164
1417
  "@typescript-eslint/strict-boolean-expressions": "off",
1165
1418
  "@typescript-eslint/strict-void-return": "off",
1419
+ "@typescript-eslint/switch-exhaustiveness-check": "off",
1420
+ "@typescript-eslint/triple-slash-reference": "off",
1166
1421
  "@typescript-eslint/unbound-method": "off",
1422
+ "@typescript-eslint/unified-signatures": "off",
1167
1423
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
1168
1424
  "constructor-super": "error",
1425
+ "dot-notation": "off",
1169
1426
  "getter-return": "error",
1427
+ "no-array-constructor": "off",
1170
1428
  "no-class-assign": "error",
1171
1429
  "no-const-assign": "error",
1172
1430
  "no-dupe-args": "error",
1173
1431
  "no-dupe-class-members": "error",
1174
1432
  "no-dupe-keys": "error",
1433
+ "no-empty-function": "off",
1175
1434
  "no-func-assign": "error",
1435
+ "no-implied-eval": "off",
1176
1436
  "no-import-assign": "error",
1177
1437
  "no-new-native-nonconstructor": "error",
1178
1438
  "no-new-symbol": "off",
1179
1439
  "no-obj-calls": "error",
1180
1440
  "no-redeclare": "error",
1441
+ "no-return-await": "off",
1181
1442
  "no-setter-return": "error",
1443
+ "no-shadow": "off",
1182
1444
  "no-this-before-super": "error",
1445
+ "no-throw-literal": "off",
1183
1446
  "no-undef": "error",
1184
1447
  "no-unreachable": "error",
1185
1448
  "no-unsafe-negation": "error",
1186
- "no-with": "error"
1449
+ "no-unused-expressions": "off",
1450
+ "no-unused-vars": "error",
1451
+ "no-useless-constructor": "off",
1452
+ "no-with": "error",
1453
+ "prefer-const": [
1454
+ "error",
1455
+ {
1456
+ "destructuring": "all"
1457
+ }
1458
+ ],
1459
+ "prefer-promise-reject-errors": "off",
1460
+ "require-await": "off"
1187
1461
  },
1188
1462
  },
1189
1463
 
@@ -1442,7 +1716,137 @@ export default [
1442
1716
  // Markdown/MDX code block linting
1443
1717
  {
1444
1718
  ...mdxPlugin.flatCodeBlocks,
1719
+ languageOptions: {
1720
+ ...mdxPlugin.flatCodeBlocks.languageOptions,
1721
+ parserOptions: {
1722
+ ...mdxPlugin.flatCodeBlocks.languageOptions?.parserOptions,
1723
+ projectService: false,
1724
+ },
1725
+ },
1445
1726
  rules: {
1727
+ ...{
1728
+ "@typescript-eslint/adjacent-overload-signatures": "off",
1729
+ "@typescript-eslint/array-type": "off",
1730
+ "@typescript-eslint/await-thenable": "off",
1731
+ "@typescript-eslint/ban-ts-comment": "off",
1732
+ "@typescript-eslint/ban-tslint-comment": "off",
1733
+ "@typescript-eslint/class-literal-property-style": "off",
1734
+ "@typescript-eslint/consistent-generic-constructors": "off",
1735
+ "@typescript-eslint/consistent-indexed-object-style": "off",
1736
+ "@typescript-eslint/consistent-type-assertions": "off",
1737
+ "@typescript-eslint/consistent-type-definitions": "off",
1738
+ "@typescript-eslint/consistent-type-exports": "off",
1739
+ "@typescript-eslint/consistent-type-imports": "off",
1740
+ "@typescript-eslint/dot-notation": "off",
1741
+ "@typescript-eslint/explicit-function-return-type": "off",
1742
+ "@typescript-eslint/explicit-member-accessibility": "off",
1743
+ "@typescript-eslint/member-ordering": "off",
1744
+ "@typescript-eslint/method-signature-style": "off",
1745
+ "@typescript-eslint/naming-convention": "off",
1746
+ "@typescript-eslint/no-array-constructor": "off",
1747
+ "@typescript-eslint/no-array-delete": "off",
1748
+ "@typescript-eslint/no-base-to-string": "off",
1749
+ "@typescript-eslint/no-confusing-non-null-assertion": "off",
1750
+ "@typescript-eslint/no-confusing-void-expression": "off",
1751
+ "@typescript-eslint/no-deprecated": "off",
1752
+ "@typescript-eslint/no-duplicate-enum-values": "off",
1753
+ "@typescript-eslint/no-duplicate-type-constituents": "off",
1754
+ "@typescript-eslint/no-dynamic-delete": "off",
1755
+ "@typescript-eslint/no-empty-function": "off",
1756
+ "@typescript-eslint/no-empty-object-type": "off",
1757
+ "@typescript-eslint/no-explicit-any": "off",
1758
+ "@typescript-eslint/no-extra-non-null-assertion": "off",
1759
+ "@typescript-eslint/no-extraneous-class": "off",
1760
+ "@typescript-eslint/no-floating-promises": "off",
1761
+ "@typescript-eslint/no-for-in-array": "off",
1762
+ "@typescript-eslint/no-implied-eval": "off",
1763
+ "@typescript-eslint/no-import-type-side-effects": "off",
1764
+ "@typescript-eslint/no-inferrable-types": "off",
1765
+ "@typescript-eslint/no-invalid-void-type": "off",
1766
+ "@typescript-eslint/no-magic-numbers": "off",
1767
+ "@typescript-eslint/no-meaningless-void-operator": "off",
1768
+ "@typescript-eslint/no-misused-new": "off",
1769
+ "@typescript-eslint/no-misused-spread": "off",
1770
+ "@typescript-eslint/no-mixed-enums": "off",
1771
+ "@typescript-eslint/no-namespace": "off",
1772
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "off",
1773
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "off",
1774
+ "@typescript-eslint/no-non-null-assertion": "off",
1775
+ "@typescript-eslint/no-redundant-type-constituents": "off",
1776
+ "@typescript-eslint/no-require-imports": "off",
1777
+ "@typescript-eslint/no-shadow": "off",
1778
+ "@typescript-eslint/no-this-alias": "off",
1779
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
1780
+ "@typescript-eslint/no-unnecessary-condition": "off",
1781
+ "@typescript-eslint/no-unnecessary-parameter-property-assignment": "off",
1782
+ "@typescript-eslint/no-unnecessary-qualifier": "off",
1783
+ "@typescript-eslint/no-unnecessary-template-expression": "off",
1784
+ "@typescript-eslint/no-unnecessary-type-arguments": "off",
1785
+ "@typescript-eslint/no-unnecessary-type-assertion": "off",
1786
+ "@typescript-eslint/no-unnecessary-type-constraint": "off",
1787
+ "@typescript-eslint/no-unnecessary-type-conversion": "off",
1788
+ "@typescript-eslint/no-unnecessary-type-parameters": "off",
1789
+ "@typescript-eslint/no-unsafe-argument": "off",
1790
+ "@typescript-eslint/no-unsafe-assignment": "off",
1791
+ "@typescript-eslint/no-unsafe-call": "off",
1792
+ "@typescript-eslint/no-unsafe-declaration-merging": "off",
1793
+ "@typescript-eslint/no-unsafe-enum-comparison": "off",
1794
+ "@typescript-eslint/no-unsafe-function-type": "off",
1795
+ "@typescript-eslint/no-unsafe-member-access": "off",
1796
+ "@typescript-eslint/no-unsafe-return": "off",
1797
+ "@typescript-eslint/no-unsafe-type-assertion": "off",
1798
+ "@typescript-eslint/no-unsafe-unary-minus": "off",
1799
+ "@typescript-eslint/no-unused-expressions": "off",
1800
+ "@typescript-eslint/no-unused-vars": "off",
1801
+ "@typescript-eslint/no-useless-constructor": "off",
1802
+ "@typescript-eslint/no-useless-default-assignment": "off",
1803
+ "@typescript-eslint/no-useless-empty-export": "off",
1804
+ "@typescript-eslint/no-wrapper-object-types": "off",
1805
+ "@typescript-eslint/non-nullable-type-assertion-style": "off",
1806
+ "@typescript-eslint/only-throw-error": "off",
1807
+ "@typescript-eslint/prefer-as-const": "off",
1808
+ "@typescript-eslint/prefer-enum-initializers": "off",
1809
+ "@typescript-eslint/prefer-find": "off",
1810
+ "@typescript-eslint/prefer-for-of": "off",
1811
+ "@typescript-eslint/prefer-function-type": "off",
1812
+ "@typescript-eslint/prefer-includes": "off",
1813
+ "@typescript-eslint/prefer-literal-enum-member": "off",
1814
+ "@typescript-eslint/prefer-namespace-keyword": "off",
1815
+ "@typescript-eslint/prefer-nullish-coalescing": "off",
1816
+ "@typescript-eslint/prefer-optional-chain": "off",
1817
+ "@typescript-eslint/prefer-promise-reject-errors": "off",
1818
+ "@typescript-eslint/prefer-readonly": "off",
1819
+ "@typescript-eslint/prefer-reduce-type-parameter": "off",
1820
+ "@typescript-eslint/prefer-regexp-exec": "off",
1821
+ "@typescript-eslint/prefer-return-this-type": "off",
1822
+ "@typescript-eslint/prefer-string-starts-ends-with": "off",
1823
+ "@typescript-eslint/promise-function-async": "off",
1824
+ "@typescript-eslint/related-getter-setter-pairs": "off",
1825
+ "@typescript-eslint/require-array-sort-compare": "off",
1826
+ "@typescript-eslint/require-await": "off",
1827
+ "@typescript-eslint/restrict-plus-operands": "off",
1828
+ "@typescript-eslint/restrict-template-expressions": "off",
1829
+ "@typescript-eslint/return-await": "off",
1830
+ "@typescript-eslint/strict-boolean-expressions": "off",
1831
+ "@typescript-eslint/strict-void-return": "off",
1832
+ "@typescript-eslint/switch-exhaustiveness-check": "off",
1833
+ "@typescript-eslint/triple-slash-reference": "off",
1834
+ "@typescript-eslint/unbound-method": "off",
1835
+ "@typescript-eslint/unified-signatures": "off",
1836
+ "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
1837
+ "dot-notation": "off",
1838
+ "no-array-constructor": "off",
1839
+ "no-empty-function": "off",
1840
+ "no-implied-eval": "off",
1841
+ "no-return-await": "off",
1842
+ "no-shadow": "off",
1843
+ "no-throw-literal": "off",
1844
+ "no-useless-constructor": "off",
1845
+ "prefer-promise-reject-errors": "off",
1846
+ "require-await": "off",
1847
+ "strict": "off",
1848
+ "unicode-bom": "off"
1849
+ },
1446
1850
  ...mdxPlugin.flatCodeBlocks.rules,
1447
1851
  "eol-last": "off",
1448
1852
  "no-undef": "off",