@ntsim/oxlint-config 0.2.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.
package/dist/index.mjs ADDED
@@ -0,0 +1,780 @@
1
+ import { defineConfig } from "oxlint";
2
+ //#endregion
3
+ //#region src/presets/base.ts
4
+ const baseConfig = defineConfig({
5
+ plugins: [
6
+ "unicorn",
7
+ "import",
8
+ "promise",
9
+ "oxc"
10
+ ],
11
+ env: { builtin: true },
12
+ ignorePatterns: [],
13
+ rules: {
14
+ "array-callback-return": ["error", { allowImplicit: true }],
15
+ "block-scoped-var": "error",
16
+ "default-case": ["error", { commentPattern: "^no default$" }],
17
+ "default-case-last": "error",
18
+ "default-param-last": "error",
19
+ eqeqeq: [
20
+ "error",
21
+ "always",
22
+ { null: "ignore" }
23
+ ],
24
+ "grouped-accessor-pairs": "error",
25
+ "guard-for-in": "error",
26
+ "no-alert": "warn",
27
+ "no-caller": "error",
28
+ "no-case-declarations": "error",
29
+ "no-constructor-return": "error",
30
+ "no-empty-function": ["error", { allow: [
31
+ "arrowFunctions",
32
+ "functions",
33
+ "methods"
34
+ ] }],
35
+ "no-eval": "error",
36
+ "no-extend-native": "error",
37
+ "no-extra-bind": "error",
38
+ "no-extra-label": "error",
39
+ "no-fallthrough": "error",
40
+ "no-global-assign": "error",
41
+ "no-labels": ["error", {
42
+ allowLoop: false,
43
+ allowSwitch: false
44
+ }],
45
+ "no-lone-blocks": "error",
46
+ "no-loop-func": "error",
47
+ "no-multi-str": "error",
48
+ "no-new-func": "error",
49
+ "no-new-wrappers": "error",
50
+ "no-param-reassign": ["error", {
51
+ props: true,
52
+ ignorePropertyModificationsFor: [
53
+ "draft",
54
+ "acc",
55
+ "accumulator",
56
+ "e",
57
+ "ctx",
58
+ "context",
59
+ "req",
60
+ "request",
61
+ "res",
62
+ "response",
63
+ "$scope",
64
+ "staticContext"
65
+ ]
66
+ }],
67
+ "no-proto": "error",
68
+ "no-return-assign": ["error", "always"],
69
+ "no-script-url": "error",
70
+ "no-self-assign": ["error", { props: true }],
71
+ "no-self-compare": "error",
72
+ "no-sequences": "error",
73
+ "no-throw-literal": "error",
74
+ "no-unused-expressions": ["error", {
75
+ allowShortCircuit: false,
76
+ allowTernary: false,
77
+ allowTaggedTemplates: false
78
+ }],
79
+ "no-useless-catch": "error",
80
+ "no-useless-concat": "error",
81
+ "no-useless-escape": "error",
82
+ "no-useless-return": "error",
83
+ "no-void": "error",
84
+ "no-with": "error",
85
+ "prefer-promise-reject-errors": ["error", { allowEmptyReject: true }],
86
+ "prefer-object-has-own": "error",
87
+ radix: "error",
88
+ "use-isnan": "error",
89
+ yoda: "error",
90
+ "for-direction": "error",
91
+ "no-async-promise-executor": "error",
92
+ "no-await-in-loop": "error",
93
+ "no-compare-neg-zero": "error",
94
+ "no-cond-assign": ["error", "always"],
95
+ "no-console": "warn",
96
+ "no-constant-binary-expression": "error",
97
+ "no-constant-condition": "warn",
98
+ "no-control-regex": "error",
99
+ "no-debugger": "error",
100
+ "no-dupe-else-if": "error",
101
+ "no-dupe-keys": "error",
102
+ "no-duplicate-case": "error",
103
+ "no-empty": "error",
104
+ "no-empty-character-class": "error",
105
+ "no-empty-pattern": "error",
106
+ "no-empty-static-block": "error",
107
+ "no-ex-assign": "error",
108
+ "no-extra-boolean-cast": "error",
109
+ "no-func-assign": "error",
110
+ "no-import-assign": "error",
111
+ "no-inner-declarations": "error",
112
+ "no-invalid-regexp": "error",
113
+ "no-irregular-whitespace": "error",
114
+ "no-loss-of-precision": "error",
115
+ "no-misleading-character-class": "error",
116
+ "no-new-native-nonconstructor": "error",
117
+ "no-nonoctal-decimal-escape": "error",
118
+ "no-obj-calls": "error",
119
+ "no-promise-executor-return": "error",
120
+ "no-prototype-builtins": "error",
121
+ "no-regex-spaces": "error",
122
+ "no-setter-return": "error",
123
+ "no-sparse-arrays": "error",
124
+ "no-template-curly-in-string": "error",
125
+ "no-unsafe-finally": "error",
126
+ "no-unsafe-negation": "error",
127
+ "no-unsafe-optional-chaining": ["error", { disallowArithmeticOperators: true }],
128
+ "no-useless-backreference": "error",
129
+ "valid-typeof": ["error", { requireStringLiterals: true }],
130
+ "constructor-super": "error",
131
+ "no-const-assign": "error",
132
+ "no-dupe-class-members": "error",
133
+ "no-this-before-super": "error",
134
+ "no-useless-computed-key": "error",
135
+ "no-useless-constructor": "error",
136
+ "no-useless-rename": ["error", {
137
+ ignoreDestructuring: false,
138
+ ignoreImport: false,
139
+ ignoreExport: false
140
+ }],
141
+ "no-var": "error",
142
+ "object-shorthand": [
143
+ "error",
144
+ "always",
145
+ {
146
+ ignoreConstructors: false,
147
+ avoidQuotes: true
148
+ }
149
+ ],
150
+ "prefer-const": ["error", {
151
+ destructuring: "any",
152
+ ignoreReadBeforeAssign: true
153
+ }],
154
+ "prefer-destructuring": [
155
+ "error",
156
+ {
157
+ VariableDeclarator: {
158
+ array: false,
159
+ object: true
160
+ },
161
+ AssignmentExpression: {
162
+ array: true,
163
+ object: false
164
+ }
165
+ },
166
+ { enforceForRenamedProperties: false }
167
+ ],
168
+ "prefer-rest-params": "error",
169
+ "prefer-spread": "error",
170
+ "prefer-template": "error",
171
+ "require-yield": "error",
172
+ "no-array-constructor": "error",
173
+ "no-bitwise": "error",
174
+ "no-lonely-if": "error",
175
+ "no-multi-assign": "error",
176
+ "no-nested-ternary": "error",
177
+ "no-unneeded-ternary": ["error", { defaultAssignment: false }],
178
+ "operator-assignment": ["error", "always"],
179
+ "prefer-exponentiation-operator": "error",
180
+ "prefer-object-spread": "error",
181
+ "unicode-bom": ["error", "never"],
182
+ "no-delete-var": "error",
183
+ "no-label-var": "error",
184
+ "no-redeclare": "error",
185
+ "no-restricted-globals": [
186
+ "error",
187
+ {
188
+ name: "isFinite",
189
+ message: "Use Number.isFinite instead https://github.com/airbnb/javascript#standard-library--isfinite"
190
+ },
191
+ {
192
+ name: "isNaN",
193
+ message: "Use Number.isNaN instead https://github.com/airbnb/javascript#standard-library--isnan"
194
+ },
195
+ ...[
196
+ "addEventListener",
197
+ "blur",
198
+ "close",
199
+ "closed",
200
+ "confirm",
201
+ "defaultStatus",
202
+ "defaultstatus",
203
+ "event",
204
+ "external",
205
+ "find",
206
+ "focus",
207
+ "frameElement",
208
+ "frames",
209
+ "history",
210
+ "innerHeight",
211
+ "innerWidth",
212
+ "length",
213
+ "location",
214
+ "locationbar",
215
+ "menubar",
216
+ "moveBy",
217
+ "moveTo",
218
+ "name",
219
+ "onblur",
220
+ "onerror",
221
+ "onfocus",
222
+ "onload",
223
+ "onresize",
224
+ "onunload",
225
+ "open",
226
+ "opener",
227
+ "opera",
228
+ "outerHeight",
229
+ "outerWidth",
230
+ "pageXOffset",
231
+ "pageYOffset",
232
+ "parent",
233
+ "print",
234
+ "removeEventListener",
235
+ "resizeBy",
236
+ "resizeTo",
237
+ "screen",
238
+ "screenLeft",
239
+ "screenTop",
240
+ "screenX",
241
+ "screenY",
242
+ "scroll",
243
+ "scrollbars",
244
+ "scrollBy",
245
+ "scrollTo",
246
+ "scrollX",
247
+ "scrollY",
248
+ "self",
249
+ "status",
250
+ "statusbar",
251
+ "stop",
252
+ "toolbar",
253
+ "top"
254
+ ].map((name) => ({
255
+ name,
256
+ message: `Use window.${name} instead.`
257
+ }))
258
+ ],
259
+ "no-shadow": "error",
260
+ "no-shadow-restricted-names": "error",
261
+ "no-unused-labels": "error",
262
+ "no-unused-private-class-members": "error",
263
+ "no-unused-vars": ["warn", {
264
+ vars: "all",
265
+ args: "after-used",
266
+ ignoreRestSiblings: true,
267
+ argsIgnorePattern: "^_"
268
+ }],
269
+ "no-use-before-define": ["error", {
270
+ functions: true,
271
+ classes: true,
272
+ variables: true
273
+ }],
274
+ "import/consistent-type-specifier-style": "off",
275
+ "import/extensions": [
276
+ "error",
277
+ "always",
278
+ { ignorePackages: true }
279
+ ],
280
+ "import/first": "error",
281
+ "import/no-absolute-path": "error",
282
+ "import/no-anonymous-default-export": ["error", {
283
+ allowArray: true,
284
+ allowObject: true,
285
+ allowNew: true
286
+ }],
287
+ "import/no-cycle": "error",
288
+ "import/no-duplicates": ["error", { "prefer-inline": true }],
289
+ "import/no-dynamic-require": "error",
290
+ "import/no-empty-named-blocks": "error",
291
+ "import/no-mutable-exports": "error",
292
+ "import/no-named-as-default-member": "error",
293
+ "import/no-named-as-default": "error",
294
+ "import/no-named-default": "error",
295
+ "import/no-namespace": ["error", { ignore: ["@radix-ui/*"] }],
296
+ "import/no-self-import": "error",
297
+ "promise/catch-or-return": "error",
298
+ "promise/no-multiple-resolved": "error",
299
+ "promise/no-new-statics": "error",
300
+ "promise/no-return-in-finally": "error",
301
+ "promise/valid-params": "error",
302
+ "promise/no-nesting": "warn",
303
+ "promise/prefer-await-to-then": "warn",
304
+ "unicorn/no-thenable": "error",
305
+ "unicorn/no-invalid-fetch-options": "error",
306
+ "unicorn/no-invalid-remove-event-listener": "error",
307
+ "unicorn/no-instanceof-array": "error",
308
+ "unicorn/new-for-builtins": "error",
309
+ "unicorn/no-negation-in-equality-check": "error",
310
+ "unicorn/throw-new-error": "error",
311
+ "unicorn/no-single-promise-in-promise-methods": "error",
312
+ "unicorn/no-await-in-promise-methods": "error",
313
+ "unicorn/error-message": "error",
314
+ "unicorn/no-useless-spread": "warn",
315
+ "unicorn/no-useless-promise-resolve-reject": "warn",
316
+ "unicorn/consistent-function-scoping": ["warn", { checkArrowFunctions: false }],
317
+ "unicorn/prefer-array-flat-map": "error",
318
+ "unicorn/prefer-array-find": "error",
319
+ "unicorn/prefer-array-some": "error",
320
+ "unicorn/prefer-array-flat": "error",
321
+ "unicorn/prefer-string-slice": "error",
322
+ "unicorn/prefer-number-properties": "error",
323
+ "unicorn/prefer-node-protocol": "error",
324
+ "unicorn/prefer-date-now": "error",
325
+ "unicorn/prefer-structured-clone": "error",
326
+ "unicorn/prefer-keyboard-event-key": "error",
327
+ "unicorn/prefer-logical-operator-over-ternary": "error",
328
+ "unicorn/prefer-string-replace-all": "warn",
329
+ "unicorn/prefer-optional-catch-binding": "warn",
330
+ "unicorn/catch-error-name": "warn",
331
+ "unicorn/no-lonely-if": "warn",
332
+ "oxc/no-accumulating-spread": "error",
333
+ "oxc/missing-throw": "error",
334
+ "oxc/no-barrel-file": "warn"
335
+ }
336
+ });
337
+ //#endregion
338
+ //#region src/utils/globs.ts
339
+ /** All JavaScript and TypeScript source files, including declarations. */
340
+ const JS_TS_FILES = [
341
+ "**/*.js",
342
+ "**/*.cjs",
343
+ "**/*.mjs",
344
+ "**/*.jsx",
345
+ "**/*.ts",
346
+ "**/*.cts",
347
+ "**/*.mts",
348
+ "**/*.tsx",
349
+ "**/*.d.ts"
350
+ ];
351
+ /** All TypeScript source files, including declarations. */
352
+ const TS_FILES = [
353
+ "**/*.ts",
354
+ "**/*.cts",
355
+ "**/*.mts",
356
+ "**/*.tsx",
357
+ "**/*.d.ts"
358
+ ];
359
+ /** Test files in any JS/TS flavor. */
360
+ const TEST_FILES = ["**/*.{test,spec}.{ts,tsx,js,jsx}"];
361
+ /** Component test files (JSX/TSX only). */
362
+ const COMPONENT_TEST_FILES = ["**/*.{test,spec}.{tsx,jsx}"];
363
+ //#endregion
364
+ //#region src/presets/typescript.ts
365
+ const typescriptConfig = defineConfig({ overrides: [{
366
+ files: TS_FILES,
367
+ rules: {
368
+ "constructor-super": "off",
369
+ "no-const-assign": "off",
370
+ "no-dupe-class-members": "off",
371
+ "no-dupe-keys": "off",
372
+ "no-func-assign": "off",
373
+ "no-import-assign": "off",
374
+ "no-obj-calls": "off",
375
+ "no-redeclare": "off",
376
+ "no-setter-return": "off",
377
+ "no-unsafe-negation": "off",
378
+ "valid-typeof": "off",
379
+ "default-param-last": "error",
380
+ "no-array-constructor": "error",
381
+ "no-empty-function": ["error", { allow: [
382
+ "arrowFunctions",
383
+ "functions",
384
+ "methods"
385
+ ] }],
386
+ "no-loop-func": "error",
387
+ "no-shadow": "error",
388
+ "no-unused-expressions": ["error", {
389
+ allowShortCircuit: false,
390
+ allowTernary: false,
391
+ allowTaggedTemplates: false
392
+ }],
393
+ "no-unused-vars": ["warn", {
394
+ vars: "all",
395
+ args: "after-used",
396
+ ignoreRestSiblings: true,
397
+ argsIgnorePattern: "^_"
398
+ }],
399
+ "no-use-before-define": ["error", {
400
+ classes: false,
401
+ functions: false,
402
+ variables: true,
403
+ typedefs: false
404
+ }],
405
+ "no-useless-constructor": "error",
406
+ "no-throw-literal": "off",
407
+ "prefer-destructuring": "off",
408
+ "typescript/adjacent-overload-signatures": "error",
409
+ "typescript/array-type": ["error", {
410
+ default: "array",
411
+ readonly: "array"
412
+ }],
413
+ "typescript/await-thenable": "error",
414
+ "typescript/ban-ts-comment": ["error", {
415
+ minimumDescriptionLength: 3,
416
+ "ts-check": false,
417
+ "ts-expect-error": "allow-with-description",
418
+ "ts-ignore": true,
419
+ "ts-nocheck": true
420
+ }],
421
+ "typescript/class-literal-property-style": ["error", "fields"],
422
+ "typescript/consistent-generic-constructors": ["error", "constructor"],
423
+ "typescript/consistent-indexed-object-style": "error",
424
+ "typescript/consistent-type-assertions": ["error", {
425
+ arrayLiteralTypeAssertions: "allow",
426
+ assertionStyle: "as",
427
+ objectLiteralTypeAssertions: "allow"
428
+ }],
429
+ "typescript/consistent-type-definitions": ["error", "interface"],
430
+ "typescript/consistent-type-exports": ["error", { fixMixedExportsWithInlineTypeSpecifier: false }],
431
+ "typescript/consistent-type-imports": ["error", { fixStyle: "inline-type-imports" }],
432
+ "typescript/dot-notation": ["error", {
433
+ allowKeywords: true,
434
+ allowPrivateClassPropertyAccess: false,
435
+ allowProtectedClassPropertyAccess: false,
436
+ allowIndexSignaturePropertyAccess: false
437
+ }],
438
+ "typescript/explicit-module-boundary-types": ["error", {
439
+ allowArgumentsExplicitlyTypedAsAny: false,
440
+ allowDirectConstAssertionInArrowFunctions: true,
441
+ allowedNames: [],
442
+ allowHigherOrderFunctions: true,
443
+ allowOverloadFunctions: false,
444
+ allowTypedFunctionExpressions: true
445
+ }],
446
+ "typescript/no-array-delete": "error",
447
+ "typescript/no-confusing-non-null-assertion": "error",
448
+ "typescript/no-confusing-void-expression": ["error", {
449
+ ignoreArrowShorthand: true,
450
+ ignoreVoidOperator: true,
451
+ ignoreVoidReturningFunctions: false
452
+ }],
453
+ "typescript/no-duplicate-enum-values": "error",
454
+ "typescript/no-duplicate-type-constituents": ["error", {
455
+ ignoreIntersections: false,
456
+ ignoreUnions: false
457
+ }],
458
+ "typescript/no-empty-object-type": ["error", {
459
+ allowInterfaces: "never",
460
+ allowObjectTypes: "never"
461
+ }],
462
+ "typescript/no-explicit-any": ["error", {
463
+ fixToUnknown: false,
464
+ ignoreRestArgs: false
465
+ }],
466
+ "typescript/no-extra-non-null-assertion": "error",
467
+ "typescript/no-floating-promises": "error",
468
+ "typescript/no-for-in-array": "error",
469
+ "typescript/no-implied-eval": "error",
470
+ "typescript/no-import-type-side-effects": "error",
471
+ "typescript/no-inferrable-types": ["error", {
472
+ ignoreParameters: false,
473
+ ignoreProperties: false
474
+ }],
475
+ "typescript/no-misused-new": "error",
476
+ "typescript/no-misused-promises": ["error", {
477
+ checksConditionals: true,
478
+ checksSpreads: true,
479
+ checksVoidReturn: false
480
+ }],
481
+ "typescript/no-misused-spread": ["error", { allow: [] }],
482
+ "typescript/no-mixed-enums": "error",
483
+ "typescript/no-namespace": ["error", {
484
+ allowDeclarations: false,
485
+ allowDefinitionFiles: true
486
+ }],
487
+ "typescript/no-non-null-asserted-nullish-coalescing": "warn",
488
+ "typescript/no-non-null-asserted-optional-chain": "error",
489
+ "typescript/no-non-null-assertion": "error",
490
+ "typescript/no-redundant-type-constituents": "error",
491
+ "typescript/no-require-imports": ["error", {
492
+ allow: [],
493
+ allowAsImport: false
494
+ }],
495
+ "typescript/no-unnecessary-boolean-literal-compare": "error",
496
+ "typescript/no-unnecessary-parameter-property-assignment": "error",
497
+ "typescript/no-unnecessary-qualifier": "error",
498
+ "typescript/no-unnecessary-template-expression": "error",
499
+ "typescript/no-unnecessary-type-arguments": "error",
500
+ "typescript/no-unnecessary-type-assertion": "error",
501
+ "typescript/no-unnecessary-type-constraint": "error",
502
+ "typescript/no-unnecessary-type-conversion": "warn",
503
+ "typescript/no-unsafe-declaration-merging": "error",
504
+ "typescript/no-unsafe-enum-comparison": "error",
505
+ "typescript/no-unsafe-function-type": "error",
506
+ "typescript/no-unsafe-return": "error",
507
+ "typescript/no-unsafe-unary-minus": "error",
508
+ "typescript/no-useless-empty-export": "error",
509
+ "typescript/no-wrapper-object-types": "error",
510
+ "typescript/only-throw-error": "off",
511
+ "typescript/prefer-as-const": "error",
512
+ "typescript/prefer-find": "error",
513
+ "typescript/prefer-for-of": "error",
514
+ "typescript/prefer-function-type": "error",
515
+ "typescript/prefer-includes": "warn",
516
+ "typescript/prefer-nullish-coalescing": ["error", { ignoreBooleanCoercion: true }],
517
+ "typescript/prefer-reduce-type-parameter": "error",
518
+ "typescript/prefer-regexp-exec": "error",
519
+ "typescript/prefer-string-starts-ends-with": "warn",
520
+ "typescript/promise-function-async": "error",
521
+ "typescript/require-array-sort-compare": "error",
522
+ "typescript/return-await": ["error", "in-try-catch"],
523
+ "typescript/switch-exhaustiveness-check": ["error", { considerDefaultExhaustiveForUnions: true }],
524
+ "typescript/unified-signatures": ["error", {
525
+ ignoreDifferentlyNamedParameters: false,
526
+ ignoreOverloadsWithDifferentJSDoc: false
527
+ }]
528
+ },
529
+ plugins: ["typescript", "import"]
530
+ }] });
531
+ //#endregion
532
+ //#region src/presets/react.ts
533
+ const reactConfig = defineConfig({ overrides: [{
534
+ files: JS_TS_FILES,
535
+ rules: {
536
+ "react/button-has-type": "error",
537
+ "react/checked-requires-onchange-or-readonly": "error",
538
+ "react/display-name": "off",
539
+ "react/forward-ref-uses-ref": "error",
540
+ "react/iframe-missing-sandbox": "error",
541
+ "react/no-array-index-key": "error",
542
+ "react/no-children-prop": "error",
543
+ "react/no-danger": "warn",
544
+ "react/no-danger-with-children": "error",
545
+ "react/no-direct-mutation-state": "error",
546
+ "react/no-find-dom-node": "error",
547
+ "react/no-namespace": "error",
548
+ "react/no-string-refs": ["error", { noTemplateLiterals: true }],
549
+ "react/no-unknown-property": ["error", {
550
+ ignore: [],
551
+ requireDataLowercase: false
552
+ }],
553
+ "react/self-closing-comp": ["error", {
554
+ component: true,
555
+ html: true
556
+ }],
557
+ "react/style-prop-object": ["error", { allow: [] }],
558
+ "react/void-dom-elements-no-children": "error",
559
+ "react/jsx-boolean-value": [
560
+ "error",
561
+ "never",
562
+ { always: [] }
563
+ ],
564
+ "react/jsx-curly-brace-presence": ["error", {
565
+ props: "never",
566
+ children: "never"
567
+ }],
568
+ "react/jsx-filename-extension": ["error", { extensions: [".jsx", ".tsx"] }],
569
+ "react/jsx-key": ["error", {
570
+ checkFragmentShorthand: true,
571
+ checkKeyMustBeforeSpread: false,
572
+ warnOnDuplicates: true
573
+ }],
574
+ "react/jsx-no-comment-textnodes": "error",
575
+ "react/jsx-no-constructed-context-values": "off",
576
+ "react/jsx-no-duplicate-props": "error",
577
+ "react/jsx-no-script-url": [
578
+ "error",
579
+ [
580
+ {
581
+ name: "Link",
582
+ props: ["to", "href"]
583
+ },
584
+ {
585
+ name: "NavLink",
586
+ props: ["to"]
587
+ },
588
+ {
589
+ name: "NextLink",
590
+ props: ["to", "href"]
591
+ }
592
+ ],
593
+ { includeFromSettings: true }
594
+ ],
595
+ "react/jsx-no-target-blank": ["error", {
596
+ allowReferrer: false,
597
+ enforceDynamicLinks: "always",
598
+ warnOnSpreadAttributes: false,
599
+ links: true,
600
+ forms: false
601
+ }],
602
+ "react/jsx-no-undef": "error",
603
+ "react/jsx-no-useless-fragment": ["error", { allowExpressions: true }],
604
+ "react/jsx-pascal-case": ["error", {
605
+ allowAllCaps: true,
606
+ allowLeadingUnderscore: false,
607
+ allowNamespace: true,
608
+ ignore: []
609
+ }],
610
+ "react/jsx-props-no-spread-multi": "error",
611
+ "react/rules-of-hooks": "error",
612
+ "react/exhaustive-deps": "warn",
613
+ "jsx-a11y/alt-text": ["error", {
614
+ elements: [
615
+ "img",
616
+ "object",
617
+ "area",
618
+ "input[type=\"image\"]"
619
+ ],
620
+ img: [],
621
+ object: [],
622
+ area: [],
623
+ "input[type=\"image\"]": []
624
+ }],
625
+ "jsx-a11y/anchor-has-content": "error",
626
+ "jsx-a11y/anchor-is-valid": ["error", {
627
+ components: ["Link"],
628
+ specialLink: ["to"],
629
+ aspects: [
630
+ "noHref",
631
+ "invalidHref",
632
+ "preferButton"
633
+ ]
634
+ }],
635
+ "jsx-a11y/aria-activedescendant-has-tabindex": "error",
636
+ "jsx-a11y/aria-props": "error",
637
+ "jsx-a11y/aria-proptypes": "error",
638
+ "jsx-a11y/aria-role": ["error", { ignoreNonDOM: false }],
639
+ "jsx-a11y/aria-unsupported-elements": "error",
640
+ "jsx-a11y/autocomplete-valid": ["error", { inputComponents: ["Input"] }],
641
+ "jsx-a11y/click-events-have-key-events": "error",
642
+ "jsx-a11y/heading-has-content": ["error", { components: ["Typography", "Text"] }],
643
+ "jsx-a11y/html-has-lang": "error",
644
+ "jsx-a11y/iframe-has-title": "error",
645
+ "jsx-a11y/img-redundant-alt": "error",
646
+ "jsx-a11y/label-has-associated-control": ["error", {
647
+ labelComponents: [],
648
+ labelAttributes: [],
649
+ controlComponents: [],
650
+ assert: "both",
651
+ depth: 25
652
+ }],
653
+ "jsx-a11y/lang": "error",
654
+ "jsx-a11y/media-has-caption": ["error", {
655
+ audio: [],
656
+ video: [],
657
+ track: []
658
+ }],
659
+ "jsx-a11y/mouse-events-have-key-events": "error",
660
+ "jsx-a11y/no-access-key": "error",
661
+ "jsx-a11y/no-autofocus": ["error", { ignoreNonDOM: true }],
662
+ "jsx-a11y/no-distracting-elements": ["error", { elements: ["marquee", "blink"] }],
663
+ "jsx-a11y/no-noninteractive-tabindex": ["error", {
664
+ tags: [],
665
+ roles: ["tabpanel"],
666
+ allowExpressionValues: true
667
+ }],
668
+ "jsx-a11y/no-redundant-roles": "error",
669
+ "jsx-a11y/no-static-element-interactions": ["error", { handlers: [
670
+ "onClick",
671
+ "onMouseDown",
672
+ "onMouseUp",
673
+ "onKeyPress",
674
+ "onKeyDown",
675
+ "onKeyUp"
676
+ ] }],
677
+ "jsx-a11y/role-has-required-aria-props": "error",
678
+ "jsx-a11y/role-supports-aria-props": "error",
679
+ "jsx-a11y/scope": "error",
680
+ "jsx-a11y/tabindex-no-positive": "error"
681
+ },
682
+ plugins: ["react", "jsx-a11y"],
683
+ env: { browser: true }
684
+ }] });
685
+ //#endregion
686
+ //#region src/presets/vitest.ts
687
+ const vitestConfig = defineConfig({ overrides: [{
688
+ files: TEST_FILES,
689
+ rules: {
690
+ "vitest/expect-expect": "error",
691
+ "vitest/no-commented-out-tests": "error",
692
+ "vitest/no-conditional-expect": "error",
693
+ "vitest/no-disabled-tests": "warn",
694
+ "vitest/no-focused-tests": "error",
695
+ "vitest/no-identical-title": "error",
696
+ "vitest/no-import-node-test": "error",
697
+ "vitest/no-interpolation-in-snapshots": "error",
698
+ "vitest/no-mocks-import": "error",
699
+ "vitest/no-standalone-expect": "error",
700
+ "vitest/no-unneeded-async-expect-function": "error",
701
+ "vitest/prefer-called-exactly-once-with": "error",
702
+ "vitest/require-local-test-context-for-concurrent-snapshots": "error",
703
+ "vitest/require-mock-type-parameters": "off",
704
+ "vitest/valid-describe-callback": "error",
705
+ "vitest/valid-expect": "error",
706
+ "vitest/valid-expect-in-promise": "error",
707
+ "vitest/valid-title": "error",
708
+ "vitest/consistent-test-filename": ["error", {
709
+ allTestPattern: ".*\\.(test|spec)\\.[tj]sx?$",
710
+ pattern: ".*\\.test\\.[tj]sx?$"
711
+ }],
712
+ "vitest/consistent-test-it": "error",
713
+ "vitest/no-alias-methods": "error",
714
+ "vitest/no-conditional-in-test": "off",
715
+ "vitest/no-conditional-tests": "error",
716
+ "vitest/no-duplicate-hooks": "error",
717
+ "vitest/no-test-return-statement": "error",
718
+ "vitest/prefer-called-with": "error",
719
+ "vitest/prefer-comparison-matcher": "error",
720
+ "vitest/prefer-equality-matcher": "error",
721
+ "vitest/prefer-hooks-in-order": "error",
722
+ "vitest/prefer-hooks-on-top": "error",
723
+ "vitest/prefer-lowercase-title": ["error", { ignore: ["describe"] }],
724
+ "vitest/prefer-mock-promise-shorthand": "error",
725
+ "vitest/prefer-spy-on": "error",
726
+ "vitest/prefer-to-be": "error",
727
+ "vitest/prefer-to-contain": "error",
728
+ "vitest/prefer-to-have-length": "error",
729
+ "vitest/prefer-todo": "error",
730
+ "typescript/unbound-method": "off",
731
+ "typescript/no-non-null-assertion": "off",
732
+ "unicorn/consistent-function-scoping": "off"
733
+ },
734
+ plugins: ["vitest", "typescript"]
735
+ }] });
736
+ //#endregion
737
+ //#region src/presets/testingLibrary.ts
738
+ const testingLibraryConfig = defineConfig({ overrides: [{
739
+ files: COMPONENT_TEST_FILES,
740
+ rules: {
741
+ "unicorn/consistent-function-scoping": "off",
742
+ "testing-library/await-async-events": ["error", { eventModule: "userEvent" }],
743
+ "testing-library/await-async-queries": "error",
744
+ "testing-library/await-async-utils": "error",
745
+ "testing-library/no-await-sync-events": ["error", { eventModules: ["fire-event"] }],
746
+ "testing-library/no-await-sync-queries": "error",
747
+ "testing-library/no-container": "error",
748
+ "testing-library/no-debugging-utils": "warn",
749
+ "testing-library/no-dom-import": ["error", "react"],
750
+ "testing-library/no-global-regexp-flag-in-query": "error",
751
+ "testing-library/no-manual-cleanup": "error",
752
+ "testing-library/no-node-access": "error",
753
+ "testing-library/no-promise-in-fire-event": "error",
754
+ "testing-library/no-render-in-lifecycle": "error",
755
+ "testing-library/no-unnecessary-act": "error",
756
+ "testing-library/no-wait-for-multiple-assertions": "error",
757
+ "testing-library/no-wait-for-side-effects": "error",
758
+ "testing-library/no-wait-for-snapshot": "error",
759
+ "testing-library/prefer-explicit-assert": ["error", { assertion: "toBeInTheDocument" }],
760
+ "testing-library/prefer-find-by": "error",
761
+ "testing-library/prefer-presence-queries": "error",
762
+ "testing-library/prefer-query-by-disappearance": "error",
763
+ "testing-library/prefer-screen-queries": "error",
764
+ "testing-library/render-result-naming-convention": "error",
765
+ "jest-dom/prefer-checked": "error",
766
+ "jest-dom/prefer-empty": "error",
767
+ "jest-dom/prefer-enabled-disabled": "error",
768
+ "jest-dom/prefer-focus": "error",
769
+ "jest-dom/prefer-in-document": "error",
770
+ "jest-dom/prefer-required": "error",
771
+ "jest-dom/prefer-to-have-attribute": "error",
772
+ "jest-dom/prefer-to-have-class": "error",
773
+ "jest-dom/prefer-to-have-style": "error",
774
+ "jest-dom/prefer-to-have-text-content": "error",
775
+ "jest-dom/prefer-to-have-value": "error"
776
+ },
777
+ jsPlugins: ["eslint-plugin-testing-library", "eslint-plugin-jest-dom"]
778
+ }] });
779
+ //#endregion
780
+ export { baseConfig, reactConfig, testingLibraryConfig, typescriptConfig, vitestConfig };