@nekoyasuii/config 0.1.9 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,827 +1,580 @@
1
+ import type { OxlintConfig } from "oxlint";
1
2
  declare const jsPluginEntries: readonly [{
2
3
  readonly name: "github";
3
4
  readonly specifier: "eslint-plugin-github";
5
+ readonly config: {
6
+ overrides: ({
7
+ files: string[];
8
+ rules: {
9
+ "github/filenames-match-regex": "off";
10
+ };
11
+ } | {
12
+ files: string[];
13
+ rules: {
14
+ "github/filenames-match-regex": ["error", "^_?(?:\\[\\[\\.\\.\\.[a-z0-9-]+\\]\\]|\\[(?:\\.\\.\\.)?[a-z0-9-]+\\]|[a-z0-9-]+)+(?:\\.[a-z0-9-]+)?$"];
15
+ };
16
+ })[];
17
+ rules: {
18
+ "github/a11y-aria-label-is-well-formatted": "error";
19
+ "github/a11y-no-title-attribute": "error";
20
+ "github/a11y-no-visually-hidden-interactive-element": "error";
21
+ "github/a11y-role-supports-aria-props": "error";
22
+ "github/a11y-svg-has-accessible-name": "error";
23
+ "github/array-foreach": "error";
24
+ "github/async-currenttarget": "error";
25
+ "github/async-preventdefault": "error";
26
+ "github/authenticity-token": "error";
27
+ "github/filenames-match-regex": "error";
28
+ "github/get-attribute": "error";
29
+ "github/js-class-name": "error";
30
+ "github/no-blur": "error";
31
+ "github/no-d-none": "error";
32
+ "github/no-dataset": "off";
33
+ "github/no-dynamic-script-tag": "error";
34
+ "github/no-implicit-buggy-globals": "off";
35
+ "github/no-inner-html": "error";
36
+ "github/no-innerText": "error";
37
+ "github/no-then": "error";
38
+ "github/no-useless-passive": "error";
39
+ "github/prefer-observers": "error";
40
+ "github/require-passive-events": "error";
41
+ "github/unescaped-html-literal": "off";
42
+ };
43
+ };
4
44
  }, {
5
45
  readonly name: "sonarjs";
6
46
  readonly specifier: "eslint-plugin-sonarjs";
47
+ readonly config: {
48
+ overrides: {
49
+ files: string[];
50
+ rules: {
51
+ "sonarjs/no-duplicate-string": "off";
52
+ };
53
+ }[];
54
+ rules: {
55
+ "sonarjs/arguments-usage": "error";
56
+ "sonarjs/array-constructor": "error";
57
+ "sonarjs/arrow-function-convention": "off";
58
+ "sonarjs/assertions-in-test-cases": "error";
59
+ "sonarjs/async-test-assertions": "error";
60
+ "sonarjs/avoid-mutating-nested-properties-of-shallow-clones": "error";
61
+ "sonarjs/aws-apigateway-public-api": "error";
62
+ "sonarjs/aws-ec2-rds-dms-public": "error";
63
+ "sonarjs/aws-ec2-unencrypted-ebs-volume": "error";
64
+ "sonarjs/aws-efs-unencrypted": "error";
65
+ "sonarjs/aws-iam-all-privileges": "error";
66
+ "sonarjs/aws-iam-all-resources-accessible": "error";
67
+ "sonarjs/aws-iam-privilege-escalation": "error";
68
+ "sonarjs/aws-iam-public-access": "error";
69
+ "sonarjs/aws-opensearchservice-domain": "error";
70
+ "sonarjs/aws-rds-unencrypted-databases": "error";
71
+ "sonarjs/aws-restricted-ip-admin-access": "error";
72
+ "sonarjs/aws-s3-bucket-granted-access": "error";
73
+ "sonarjs/aws-s3-bucket-insecure-http": "error";
74
+ "sonarjs/aws-s3-bucket-public-access": "error";
75
+ "sonarjs/aws-s3-bucket-versioning": "error";
76
+ "sonarjs/aws-sagemaker-unencrypted-notebook": "error";
77
+ "sonarjs/aws-sns-unencrypted-topics": "error";
78
+ "sonarjs/aws-sqs-unencrypted-queue": "error";
79
+ "sonarjs/block-scoped-var": "error";
80
+ "sonarjs/bool-param-default": "error";
81
+ "sonarjs/call-argument-line": "error";
82
+ "sonarjs/chai-determinate-assertion": "error";
83
+ "sonarjs/class-name": "error";
84
+ "sonarjs/code-eval": "error";
85
+ "sonarjs/cognitive-complexity": ["error", number];
86
+ "sonarjs/comma-or-logical-or-case": "error";
87
+ "sonarjs/comment-regex": "error";
88
+ "sonarjs/composite-assertions": "error";
89
+ "sonarjs/constructor-for-side-effects": "error";
90
+ "sonarjs/content-length": "error";
91
+ "sonarjs/content-security-policy": "error";
92
+ "sonarjs/cookie-no-httponly": "error";
93
+ "sonarjs/cors": "error";
94
+ "sonarjs/csrf": "error";
95
+ "sonarjs/cyclomatic-complexity": "off";
96
+ "sonarjs/declarations-in-global-scope": "error";
97
+ "sonarjs/destructuring-assignment-syntax": "error";
98
+ "sonarjs/disabled-timeout": "error";
99
+ "sonarjs/dynamically-constructed-templates": "error";
100
+ "sonarjs/elseif-without-else": "off";
101
+ "sonarjs/encryption-secure-mode": "error";
102
+ "sonarjs/explicit-test-skip": "error";
103
+ "sonarjs/expression-complexity": "error";
104
+ "sonarjs/file-header": "off";
105
+ "sonarjs/file-name-differ-from-class": "off";
106
+ "sonarjs/file-permissions": "error";
107
+ "sonarjs/file-uploads": "error";
108
+ "sonarjs/fixme-tag": "error";
109
+ "sonarjs/for-in": "error";
110
+ "sonarjs/for-loop-increment-sign": "error";
111
+ "sonarjs/function-inside-loop": "error";
112
+ "sonarjs/function-name": "error";
113
+ "sonarjs/future-reserved-words": "error";
114
+ "sonarjs/generator-without-yield": "error";
115
+ "sonarjs/hardcoded-secret-signatures": "error";
116
+ "sonarjs/hashing": "error";
117
+ "sonarjs/hooks-before-test-cases": "error";
118
+ "sonarjs/inconsistent-function-call": "error";
119
+ "sonarjs/insecure-cookie": "error";
120
+ "sonarjs/insecure-jwt-token": "error";
121
+ "sonarjs/inverted-assertion-arguments": "error";
122
+ "sonarjs/label-position": "error";
123
+ "sonarjs/link-with-target-blank": "error";
124
+ "sonarjs/max-lines": "off";
125
+ "sonarjs/max-lines-per-function": "off";
126
+ "sonarjs/max-switch-cases": "error";
127
+ "sonarjs/max-union-size": "error";
128
+ "sonarjs/memoize-cache-key": "error";
129
+ "sonarjs/misplaced-loop-counter": "error";
130
+ "sonarjs/nested-control-flow": "off";
131
+ "sonarjs/no-all-duplicated-branches": "error";
132
+ "sonarjs/no-angular-bypass-sanitization": "error";
133
+ "sonarjs/no-built-in-override": "error";
134
+ "sonarjs/no-case-label-in-switch": "error";
135
+ "sonarjs/no-clear-text-protocols": "error";
136
+ "sonarjs/no-code-after-done": "error";
137
+ "sonarjs/no-collapsible-if": "error";
138
+ "sonarjs/no-commented-code": "error";
139
+ "sonarjs/no-dead-store": "error";
140
+ "sonarjs/no-debounce-throttle-in-render": "error";
141
+ "sonarjs/no-debug-commands-in-ui-tests": "error";
142
+ "sonarjs/no-default-utility-imports": "error";
143
+ "sonarjs/no-delete-var": "error";
144
+ "sonarjs/no-duplicate-in-composite": "error";
145
+ "sonarjs/no-duplicate-parameterized-test-case": "error";
146
+ "sonarjs/no-duplicate-string": "error";
147
+ "sonarjs/no-duplicate-test-title": "error";
148
+ "sonarjs/no-duplicated-branches": "error";
149
+ "sonarjs/no-element-overwrite": "error";
150
+ "sonarjs/no-empty-collection": "error";
151
+ "sonarjs/no-empty-parameterized-test-dataset": "error";
152
+ "sonarjs/no-empty-test-file": "error";
153
+ "sonarjs/no-empty-test-title": "error";
154
+ "sonarjs/no-equals-in-for-termination": "error";
155
+ "sonarjs/no-exclusive-tests": "error";
156
+ "sonarjs/no-extra-arguments": "error";
157
+ "sonarjs/no-fallthrough": "error";
158
+ "sonarjs/no-fixed-wait-in-tests": "error";
159
+ "sonarjs/no-floating-point-equality": "error";
160
+ "sonarjs/no-forced-browser-interaction": "error";
161
+ "sonarjs/no-function-declaration-in-block": "error";
162
+ "sonarjs/no-global-this": "error";
163
+ "sonarjs/no-globals-shadowing": "error";
164
+ "sonarjs/no-gratuitous-expressions": "error";
165
+ "sonarjs/no-hardcoded-ip": "error";
166
+ "sonarjs/no-hardcoded-passwords": "error";
167
+ "sonarjs/no-hardcoded-secrets": "error";
168
+ "sonarjs/no-hook-setter-in-body": "error";
169
+ "sonarjs/no-identical-conditions": "error";
170
+ "sonarjs/no-identical-expressions": "error";
171
+ "sonarjs/no-identical-functions": "error";
172
+ "sonarjs/no-ignored-exceptions": "error";
173
+ "sonarjs/no-implicit-dependencies": "off";
174
+ "sonarjs/no-implicit-global": "error";
175
+ "sonarjs/no-incomplete-assertions": "error";
176
+ "sonarjs/no-internal-api-use": "error";
177
+ "sonarjs/no-interpolation-in-inline-snapshots": "error";
178
+ "sonarjs/no-invariant-returns": "error";
179
+ "sonarjs/no-inverted-boolean-check": "error";
180
+ "sonarjs/no-labels": "error";
181
+ "sonarjs/no-literal-call": "error";
182
+ "sonarjs/no-mime-sniff": "error";
183
+ "sonarjs/no-mixed-completion-style": "error";
184
+ "sonarjs/no-mutate-reactive-state-in-updated-hook": "error";
185
+ "sonarjs/no-nested-assignment": "error";
186
+ "sonarjs/no-nested-conditional": "error";
187
+ "sonarjs/no-nested-functions": ["error", {
188
+ threshold: number;
189
+ }];
190
+ "sonarjs/no-nested-incdec": "error";
191
+ "sonarjs/no-nested-switch": "error";
192
+ "sonarjs/no-nested-template-literals": "error";
193
+ "sonarjs/no-networkidle-wait": "error";
194
+ "sonarjs/no-os-command-from-path": "error";
195
+ "sonarjs/no-parameter-reassignment": "error";
196
+ "sonarjs/no-primitive-wrappers": "error";
197
+ "sonarjs/no-redundant-assignments": "error";
198
+ "sonarjs/no-redundant-boolean": "error";
199
+ "sonarjs/no-redundant-jump": "error";
200
+ "sonarjs/no-reference-error": "off";
201
+ "sonarjs/no-referrer-policy": "error";
202
+ "sonarjs/no-same-argument-assert": "error";
203
+ "sonarjs/no-same-line-conditional": "error";
204
+ "sonarjs/no-session-cookies-on-static-assets": "error";
205
+ "sonarjs/no-skipped-tests": "error";
206
+ "sonarjs/no-sonar-comments": "error";
207
+ "sonarjs/no-table-as-layout": "error";
208
+ "sonarjs/no-trivial-assertions": "error";
209
+ "sonarjs/no-undefined-assignment": "error";
210
+ "sonarjs/no-unenclosed-multiline-block": "error";
211
+ "sonarjs/no-uniq-key": "error";
212
+ "sonarjs/no-unthrown-error": "error";
213
+ "sonarjs/no-unused-collection": "error";
214
+ "sonarjs/no-unused-function-argument": "error";
215
+ "sonarjs/no-unused-vars": "error";
216
+ "sonarjs/no-use-of-empty-return-value": "error";
217
+ "sonarjs/no-useless-catch": "error";
218
+ "sonarjs/no-useless-increment": "error";
219
+ "sonarjs/no-useless-react-setstate": "error";
220
+ "sonarjs/no-variable-usage-before-declaration": "error";
221
+ "sonarjs/no-vue-class-component": "error";
222
+ "sonarjs/no-vue-mixins": "error";
223
+ "sonarjs/no-weak-cipher": "error";
224
+ "sonarjs/no-weak-keys": "error";
225
+ "sonarjs/no-wildcard-import": "error";
226
+ "sonarjs/non-existent-operator": "error";
227
+ "sonarjs/object-alt-content": "error";
228
+ "sonarjs/parameterized-tests": "error";
229
+ "sonarjs/prefer-cypress-should": "error";
230
+ "sonarjs/prefer-default-last": "error";
231
+ "sonarjs/prefer-native-axios-alternative": "error";
232
+ "sonarjs/prefer-native-jquery-alternative": "error";
233
+ "sonarjs/prefer-native-lodash-alternative": "error";
234
+ "sonarjs/prefer-object-literal": "error";
235
+ "sonarjs/prefer-promise-shorthand": "error";
236
+ "sonarjs/prefer-single-boolean-return": "error";
237
+ "sonarjs/prefer-specific-assertions": "error";
238
+ "sonarjs/prefer-type-guard": "error";
239
+ "sonarjs/prefer-while": "error";
240
+ "sonarjs/production-debug": "error";
241
+ "sonarjs/pseudo-random": "error";
242
+ "sonarjs/public-static-readonly": "error";
243
+ "sonarjs/publicly-writable-directories": "error";
244
+ "sonarjs/redundant-type-aliases": "error";
245
+ "sonarjs/review-blockchain-mnemonic": "error";
246
+ "sonarjs/session-regeneration": "error";
247
+ "sonarjs/shorthand-property-grouping": "off";
248
+ "sonarjs/stable-tests": "error";
249
+ "sonarjs/stateful-regex": "error";
250
+ "sonarjs/strict-transport-security": "error";
251
+ "sonarjs/super-linear-regex": "error";
252
+ "sonarjs/synchronous-suite-callback": "error";
253
+ "sonarjs/table-header": "error";
254
+ "sonarjs/table-header-reference": "error";
255
+ "sonarjs/test-check-exception": "error";
256
+ "sonarjs/testing-library-prefer-query-by-disappearance": "error";
257
+ "sonarjs/testing-library-query-assertion": "error";
258
+ "sonarjs/todo-tag": "error";
259
+ "sonarjs/too-many-break-or-continue-in-loop": "error";
260
+ "sonarjs/unverified-certificate": "error";
261
+ "sonarjs/unverified-hostname": "error";
262
+ "sonarjs/updated-const-var": "error";
263
+ "sonarjs/updated-loop-counter": "error";
264
+ "sonarjs/use-type-alias": "error";
265
+ "sonarjs/variable-name": "error";
266
+ "sonarjs/vitest-mock-at-module-scope": "error";
267
+ "sonarjs/weak-ssl": "error";
268
+ "sonarjs/x-powered-by": "error";
269
+ "sonarjs/xml-parser-xxe": "error";
270
+ };
271
+ };
7
272
  }, {
8
273
  readonly name: "react-doctor";
9
274
  readonly specifier: "oxlint-plugin-react-doctor";
275
+ readonly config: {
276
+ rules: {
277
+ "react-doctor/activity-wraps-effect-heavy-subtree": "error";
278
+ "react-doctor/advanced-event-handler-refs": "error";
279
+ "react-doctor/async-await-in-loop": "error";
280
+ "react-doctor/async-defer-await": "error";
281
+ "react-doctor/async-parallel": "error";
282
+ "react-doctor/auth-token-in-web-storage": "error";
283
+ "react-doctor/client-localstorage-no-version": "error";
284
+ "react-doctor/client-passive-event-listeners": "error";
285
+ "react-doctor/dialog-has-accessible-name": "error";
286
+ "react-doctor/effect-needs-cleanup": "error";
287
+ "react-doctor/hooks-no-nan-in-deps": "error";
288
+ "react-doctor/html-no-invalid-paragraph-child": "error";
289
+ "react-doctor/html-no-invalid-table-nesting": "error";
290
+ "react-doctor/html-no-nested-interactive": "error";
291
+ "react-doctor/jotai-derived-atom-returns-fresh-object": "error";
292
+ "react-doctor/jotai-select-atom-in-render-body": "error";
293
+ "react-doctor/jotai-tq-use-raw-query-atom": "error";
294
+ "react-doctor/js-async-reduce-without-awaited-acc": "error";
295
+ "react-doctor/js-batch-dom-css": "error";
296
+ "react-doctor/js-cache-property-access": "error";
297
+ "react-doctor/js-cache-storage": "error";
298
+ "react-doctor/js-combine-iterations": "error";
299
+ "react-doctor/js-early-exit": "error";
300
+ "react-doctor/js-flatmap-filter": "error";
301
+ "react-doctor/js-hoist-intl": "error";
302
+ "react-doctor/js-hoist-regexp": "error";
303
+ "react-doctor/js-index-maps": "error";
304
+ "react-doctor/js-length-check-first": "error";
305
+ "react-doctor/js-min-max-loop": "error";
306
+ "react-doctor/js-set-map-lookups": "error";
307
+ "react-doctor/js-tosorted-immutable": "error";
308
+ "react-doctor/no-adjust-state-on-prop-change": "error";
309
+ "react-doctor/no-array-index-as-key": "error";
310
+ "react-doctor/no-async-effect-callback": "error";
311
+ "react-doctor/no-barrel-import": "error";
312
+ "react-doctor/no-call-component-as-function": "error";
313
+ "react-doctor/no-cascading-set-state": "error";
314
+ "react-doctor/no-chain-state-updates": "error";
315
+ "react-doctor/no-create-context-in-render": "error";
316
+ "react-doctor/no-create-ref-in-function-component": "error";
317
+ "react-doctor/no-create-store-in-render": "error";
318
+ "react-doctor/no-derived-state": "error";
319
+ "react-doctor/no-derived-state-effect": "error";
320
+ "react-doctor/no-derived-useState": "error";
321
+ "react-doctor/no-direct-state-mutation": "error";
322
+ "react-doctor/no-disabled-zoom": "error";
323
+ "react-doctor/no-document-start-view-transition": "error";
324
+ "react-doctor/no-document-write": "error";
325
+ "react-doctor/no-dynamic-import-path": "error";
326
+ "react-doctor/no-effect-chain": "error";
327
+ "react-doctor/no-effect-event-handler": "error";
328
+ "react-doctor/no-effect-event-in-deps": "error";
329
+ "react-doctor/no-effect-with-fresh-deps": "error";
330
+ "react-doctor/no-eval": "error";
331
+ "react-doctor/no-event-handler": "error";
332
+ "react-doctor/no-event-trigger-state": "error";
333
+ "react-doctor/no-fetch-in-effect": "error";
334
+ "react-doctor/no-flush-sync": "error";
335
+ "react-doctor/no-full-lodash-import": "error";
336
+ "react-doctor/no-giant-component": "error";
337
+ "react-doctor/no-global-css-variable-animation": "error";
338
+ "react-doctor/no-gray-on-colored-background": "error";
339
+ "react-doctor/no-img-lazy-with-high-fetchpriority": "error";
340
+ "react-doctor/no-initialize-state": "error";
341
+ "react-doctor/no-inline-bounce-easing": "error";
342
+ "react-doctor/no-inline-exhaustive-style": "error";
343
+ "react-doctor/no-inline-prop-on-memo-component": "error";
344
+ "react-doctor/no-json-parse-stringify-clone": "error";
345
+ "react-doctor/no-jsx-element-type": "error";
346
+ "react-doctor/no-large-animated-blur": "error";
347
+ "react-doctor/no-layout-property-animation": "error";
348
+ "react-doctor/no-layout-transition-inline": "error";
349
+ "react-doctor/no-legacy-class-lifecycles": "error";
350
+ "react-doctor/no-legacy-context-api": "error";
351
+ "react-doctor/no-long-transition-duration": "error";
352
+ "react-doctor/no-many-boolean-props": "error";
353
+ "react-doctor/no-mirror-prop-effect": "error";
354
+ "react-doctor/no-moment": "error";
355
+ "react-doctor/no-mutable-in-deps": "error";
356
+ "react-doctor/no-mutating-reducer-state": "error";
357
+ "react-doctor/no-nested-component-definition": "error";
358
+ "react-doctor/no-outline-none": "error";
359
+ "react-doctor/no-pass-data-to-parent": "error";
360
+ "react-doctor/no-pass-live-state-to-parent": "error";
361
+ "react-doctor/no-permanent-will-change": "error";
362
+ "react-doctor/no-polymorphic-children": "error";
363
+ "react-doctor/no-prevent-default": "error";
364
+ "react-doctor/no-prop-callback-in-effect": "error";
365
+ "react-doctor/no-random-key": "error";
366
+ "react-doctor/no-react-dom-deprecated-apis": "error";
367
+ "react-doctor/no-react19-deprecated-apis": "error";
368
+ "react-doctor/no-render-in-render": "error";
369
+ "react-doctor/no-render-prop-children": "error";
370
+ "react-doctor/no-reset-all-state-on-prop-change": "error";
371
+ "react-doctor/no-scale-from-zero": "error";
372
+ "react-doctor/no-secrets-in-client-code": "error";
373
+ "react-doctor/no-self-updating-effect": "error";
374
+ "react-doctor/no-set-state-in-render": "error";
375
+ "react-doctor/no-string-false-on-boolean-attribute": "error";
376
+ "react-doctor/no-sync-xhr": "error";
377
+ "react-doctor/no-tiny-text": "error";
378
+ "react-doctor/no-transition-all": "error";
379
+ "react-doctor/no-uncontrolled-input": "error";
380
+ "react-doctor/no-undeferred-third-party": "error";
381
+ "react-doctor/no-usememo-simple-expression": "error";
382
+ "react-doctor/only-export-components": "error";
383
+ "react-doctor/prefer-dynamic-import": "error";
384
+ "react-doctor/prefer-explicit-variants": "error";
385
+ "react-doctor/prefer-html-dialog": "error";
386
+ "react-doctor/prefer-module-scope-pure-function": "error";
387
+ "react-doctor/prefer-module-scope-static-value": "error";
388
+ "react-doctor/prefer-stable-empty-fallback": "error";
389
+ "react-doctor/prefer-use-effect-event": "error";
390
+ "react-doctor/prefer-use-sync-external-store": "error";
391
+ "react-doctor/prefer-useReducer": "error";
392
+ "react-doctor/react-compiler-no-manual-memoization": "error";
393
+ "react-doctor/redux-useselector-inline-derivation": "error";
394
+ "react-doctor/redux-useselector-returns-new-collection": "error";
395
+ "react-doctor/rendering-animate-svg-wrapper": "error";
396
+ "react-doctor/rendering-conditional-render": "error";
397
+ "react-doctor/rendering-hoist-jsx": "error";
398
+ "react-doctor/rendering-hydration-mismatch-time": "error";
399
+ "react-doctor/rendering-hydration-no-flicker": "error";
400
+ "react-doctor/rendering-script-defer-async": "error";
401
+ "react-doctor/rendering-svg-precision": "error";
402
+ "react-doctor/rendering-usetransition-loading": "error";
403
+ "react-doctor/rerender-defer-reads-hook": "error";
404
+ "react-doctor/rerender-dependencies": "error";
405
+ "react-doctor/rerender-derived-state-from-hook": "error";
406
+ "react-doctor/rerender-functional-setstate": "error";
407
+ "react-doctor/rerender-lazy-ref-init": "error";
408
+ "react-doctor/rerender-lazy-state-init": "error";
409
+ "react-doctor/rerender-memo-before-early-return": "error";
410
+ "react-doctor/rerender-memo-with-default-value": "error";
411
+ "react-doctor/rerender-state-only-in-handlers": "error";
412
+ "react-doctor/rerender-transitions-scroll": "error";
413
+ "react-doctor/server-after-nonblocking": "error";
414
+ "react-doctor/server-auth-actions": "error";
415
+ "react-doctor/server-cache-with-object-literal": "error";
416
+ "react-doctor/server-dedup-props": "error";
417
+ "react-doctor/server-fetch-without-revalidate": "error";
418
+ "react-doctor/server-hoist-static-io": "error";
419
+ "react-doctor/server-no-mutable-module-state": "error";
420
+ "react-doctor/server-sequential-independent-await": "error";
421
+ "react-doctor/use-lazy-motion": "error";
422
+ "react-doctor/zod-v4-no-deprecated-error-apis": "error";
423
+ "react-doctor/zod-v4-no-deprecated-error-customization": "error";
424
+ "react-doctor/zod-v4-no-deprecated-schema-apis": "error";
425
+ "react-doctor/zod-v4-prefer-top-level-string-formats": "error";
426
+ };
427
+ settings: {
428
+ "react-doctor": {
429
+ portedRuleMode: string;
430
+ };
431
+ };
432
+ };
10
433
  }, {
11
434
  readonly name: "tailwindcss";
12
435
  readonly specifier: "oxlint-tailwindcss";
436
+ readonly config: {
437
+ rules: {
438
+ "tailwindcss/no-conflicting-classes": "error";
439
+ "tailwindcss/no-deprecated-classes": "error";
440
+ "tailwindcss/no-duplicate-classes": "warn";
441
+ "tailwindcss/no-unknown-classes": "error";
442
+ "tailwindcss/enforce-canonical": "warn";
443
+ "tailwindcss/no-unnecessary-arbitrary-value": "warn";
444
+ "tailwindcss/enforce-sort-order": "warn";
445
+ "tailwindcss/consistent-variant-order": "warn";
446
+ "tailwindcss/enforce-consistent-important-position": "warn";
447
+ "tailwindcss/no-unnecessary-whitespace": "warn";
448
+ };
449
+ };
13
450
  }, {
14
451
  readonly name: "anti-slop";
15
452
  readonly specifier: string;
453
+ readonly config: {
454
+ overrides: {
455
+ files: string[];
456
+ rules: {
457
+ "anti-slop/no-unknown-parameters": "off";
458
+ "anti-slop/no-unsafe-dictionary-type": "off";
459
+ };
460
+ }[];
461
+ rules: {
462
+ "anti-slop/no-chained-type-assertions": "error";
463
+ "anti-slop/no-conditional-empty-object-spread": "error";
464
+ "anti-slop/no-known-value-widening": "error";
465
+ "anti-slop/no-module-mocking": "error";
466
+ "anti-slop/no-object-parameters": "error";
467
+ "anti-slop/no-reflect-apply": "error";
468
+ "anti-slop/no-reflect-get": "error";
469
+ "anti-slop/no-runtime-typeof": ["error", {
470
+ allowInTypeGuards: boolean;
471
+ }];
472
+ "anti-slop/no-shape-in-symbol-names": "error";
473
+ "anti-slop/no-unknown-parameters": "error";
474
+ "anti-slop/no-unknown-returns": "error";
475
+ "anti-slop/no-unknown-type-aliases": "error";
476
+ "anti-slop/no-unsafe-dictionary-type": "error";
477
+ "anti-slop/no-widen-then-assert": "error";
478
+ "anti-slop/require-safety-comment-for-type-assertion": "error";
479
+ "typescript/consistent-indexed-object-style": "off";
480
+ "unicorn/no-immediate-mutation": "off";
481
+ };
482
+ };
16
483
  }, {
17
484
  readonly name: "no-comment-slop";
18
485
  readonly specifier: string;
486
+ readonly config: {
487
+ rules: {
488
+ "no-comment-slop/max-comment-lines": "error";
489
+ "no-comment-slop/multiline-jsdoc-format": "error";
490
+ "no-comment-slop/no-banner-comment": "error";
491
+ "no-comment-slop/no-em-dash": "error";
492
+ "no-comment-slop/no-foreign-syntax": "error";
493
+ "no-comment-slop/no-jargon": "error";
494
+ "no-comment-slop/no-trailing-comment": "error";
495
+ "no-comment-slop/no-trailing-period": "error";
496
+ "no-comment-slop/prefer-jsdoc-for-exports": "error";
497
+ "no-comment-slop/prefer-jsdoc-for-members": "error";
498
+ "no-comment-slop/require-member-docs": "error";
499
+ };
500
+ };
19
501
  }, {
20
502
  readonly name: "shadcn";
21
503
  readonly specifier: string;
504
+ readonly config: {
505
+ overrides: ({
506
+ files: string[];
507
+ rules: {
508
+ "shadcn/no-arbitrary-values": "off";
509
+ "shadcn/no-restyle": "off";
510
+ "shadcn/require-static-classes": "off";
511
+ "shadcn/no-raw-colors"?: undefined;
512
+ };
513
+ } | {
514
+ files: string[];
515
+ rules: {
516
+ "shadcn/no-arbitrary-values"?: undefined;
517
+ "shadcn/no-restyle"?: undefined;
518
+ "shadcn/require-static-classes"?: undefined;
519
+ "shadcn/no-raw-colors": "off";
520
+ };
521
+ })[];
522
+ rules: {
523
+ "shadcn/no-arbitrary-values": ["error", {
524
+ allow: "layout"[];
525
+ }];
526
+ "shadcn/no-inline-styles": ["error", {
527
+ allow: ("background" | "backgroundColor" | "borderColor" | "color" | "gridTemplateColumns" | "height" | "left" | "paddingLeft" | "top" | "width")[];
528
+ }];
529
+ "shadcn/no-raw-colors": "error";
530
+ "shadcn/no-restyle": ["error", {
531
+ allow: "layout"[];
532
+ contracts: {
533
+ allow: string[];
534
+ pattern: string;
535
+ }[];
536
+ }];
537
+ "shadcn/no-unknown-classes": "error";
538
+ "shadcn/require-static-classes": "error";
539
+ };
540
+ };
22
541
  }, {
23
542
  readonly name: "lazuee";
24
543
  readonly specifier: string;
544
+ readonly config: {
545
+ overrides: ({
546
+ files: string[];
547
+ rules: {
548
+ "lazuee/interface-pascal-case": "error";
549
+ "lazuee/no-ts-accessibility": "error";
550
+ "lazuee/canonical-header-names"?: undefined;
551
+ };
552
+ } | {
553
+ files: string[];
554
+ rules: {
555
+ "lazuee/interface-pascal-case"?: undefined;
556
+ "lazuee/no-ts-accessibility"?: undefined;
557
+ "lazuee/canonical-header-names": "off";
558
+ };
559
+ })[];
560
+ rules: {
561
+ "lazuee/canonical-header-names": "off";
562
+ "lazuee/interface-pascal-case": "off";
563
+ "lazuee/no-ts-accessibility": "off";
564
+ "lazuee/prefer-alias": "error";
565
+ };
566
+ };
25
567
  }];
26
568
  type JSPluginName = (typeof jsPluginEntries)[number]["name"];
27
- export declare const jsPluginSettings: {
28
- "react-doctor": {
29
- portedRuleMode: string;
30
- };
31
- };
32
569
  declare const config: {
33
570
  jsPlugins: {
34
- name: string;
571
+ name: "anti-slop" | "github" | "lazuee" | "no-comment-slop" | "react-doctor" | "shadcn" | "sonarjs" | "tailwindcss";
35
572
  specifier: string;
36
573
  }[];
37
- /**
38
- * Inert until oxlint merges settings from extends; the root config applies
39
- * jsPluginSettings itself (see above)
40
- */
41
- settings: {
42
- "react-doctor": {
43
- portedRuleMode: string;
44
- };
45
- };
46
- overrides: ({
47
- files: string[];
48
- rules: {
49
- /**
50
- * Repeated string literals (test titles, expected values) are normal
51
- * and idiomatic in test files
52
- */
53
- "sonarjs/no-duplicate-string": "off";
54
- "lazuee/no-ts-accessibility"?: undefined;
55
- "lazuee/interface-pascal-case"?: undefined;
56
- "lazuee/canonical-header-names"?: undefined;
57
- /**
58
- * Allow pages-router bracketed route filenames while still rejecting non-route names in `pages/`
59
- */
60
- "github/filenames-match-regex"?: undefined;
61
- "shadcn/no-restyle"?: undefined;
62
- "shadcn/no-arbitrary-values"?: undefined;
63
- "shadcn/require-static-classes"?: undefined;
64
- "shadcn/no-raw-colors"?: undefined;
65
- "anti-slop/no-unknown-parameters"?: undefined;
66
- "anti-slop/no-unsafe-dictionary-type"?: undefined;
67
- };
68
- } | {
69
- files: string[];
70
- rules: {
71
- /**
72
- * Repeated string literals (test titles, expected values) are normal
73
- * and idiomatic in test files
74
- */
75
- "sonarjs/no-duplicate-string"?: undefined;
76
- "lazuee/no-ts-accessibility": "error";
77
- "lazuee/interface-pascal-case": "error";
78
- "lazuee/canonical-header-names"?: undefined;
79
- /**
80
- * Allow pages-router bracketed route filenames while still rejecting non-route names in `pages/`
81
- */
82
- "github/filenames-match-regex"?: undefined;
83
- "shadcn/no-restyle"?: undefined;
84
- "shadcn/no-arbitrary-values"?: undefined;
85
- "shadcn/require-static-classes"?: undefined;
86
- "shadcn/no-raw-colors"?: undefined;
87
- "anti-slop/no-unknown-parameters"?: undefined;
88
- "anti-slop/no-unsafe-dictionary-type"?: undefined;
89
- };
90
- } | {
91
- files: string[];
92
- rules: {
93
- /**
94
- * Repeated string literals (test titles, expected values) are normal
95
- * and idiomatic in test files
96
- */
97
- "sonarjs/no-duplicate-string"?: undefined;
98
- "lazuee/no-ts-accessibility"?: undefined;
99
- "lazuee/interface-pascal-case"?: undefined;
100
- "lazuee/canonical-header-names": "off";
101
- /**
102
- * Allow pages-router bracketed route filenames while still rejecting non-route names in `pages/`
103
- */
104
- "github/filenames-match-regex"?: undefined;
105
- "shadcn/no-restyle"?: undefined;
106
- "shadcn/no-arbitrary-values"?: undefined;
107
- "shadcn/require-static-classes"?: undefined;
108
- "shadcn/no-raw-colors"?: undefined;
109
- "anti-slop/no-unknown-parameters"?: undefined;
110
- "anti-slop/no-unsafe-dictionary-type"?: undefined;
111
- };
112
- } | {
113
- files: string[];
114
- rules: {
115
- /**
116
- * Repeated string literals (test titles, expected values) are normal
117
- * and idiomatic in test files
118
- */
119
- "sonarjs/no-duplicate-string"?: undefined;
120
- "lazuee/no-ts-accessibility"?: undefined;
121
- "lazuee/interface-pascal-case"?: undefined;
122
- "lazuee/canonical-header-names"?: undefined;
123
- /**
124
- * File-based router names (e.g. `__root.tsx`, `posts.$postId.tsx`) do not match the GitHub kebab-case regex
125
- */
126
- "github/filenames-match-regex": "off";
127
- "shadcn/no-restyle"?: undefined;
128
- "shadcn/no-arbitrary-values"?: undefined;
129
- "shadcn/require-static-classes"?: undefined;
130
- "shadcn/no-raw-colors"?: undefined;
131
- "anti-slop/no-unknown-parameters"?: undefined;
132
- "anti-slop/no-unsafe-dictionary-type"?: undefined;
133
- };
134
- } | {
135
- files: string[];
136
- rules: {
137
- /**
138
- * Repeated string literals (test titles, expected values) are normal
139
- * and idiomatic in test files
140
- */
141
- "sonarjs/no-duplicate-string"?: undefined;
142
- "lazuee/no-ts-accessibility"?: undefined;
143
- "lazuee/interface-pascal-case"?: undefined;
144
- "lazuee/canonical-header-names"?: undefined;
145
- /**
146
- * Allow pages-router bracketed route filenames while still rejecting non-route names in `pages/`
147
- */
148
- "github/filenames-match-regex": ["error", string];
149
- "shadcn/no-restyle"?: undefined;
150
- "shadcn/no-arbitrary-values"?: undefined;
151
- "shadcn/require-static-classes"?: undefined;
152
- "shadcn/no-raw-colors"?: undefined;
153
- "anti-slop/no-unknown-parameters"?: undefined;
154
- "anti-slop/no-unsafe-dictionary-type"?: undefined;
155
- };
156
- } | {
157
- files: string[];
158
- rules: {
159
- /**
160
- * Repeated string literals (test titles, expected values) are normal
161
- * and idiomatic in test files
162
- */
163
- "sonarjs/no-duplicate-string"?: undefined;
164
- "lazuee/no-ts-accessibility"?: undefined;
165
- "lazuee/interface-pascal-case"?: undefined;
166
- "lazuee/canonical-header-names"?: undefined;
167
- /**
168
- * Allow pages-router bracketed route filenames while still rejecting non-route names in `pages/`
169
- */
170
- "github/filenames-match-regex"?: undefined;
171
- "shadcn/no-restyle": "off";
172
- "shadcn/no-arbitrary-values": "off";
173
- "shadcn/require-static-classes": "off";
174
- "shadcn/no-raw-colors"?: undefined;
175
- "anti-slop/no-unknown-parameters"?: undefined;
176
- "anti-slop/no-unsafe-dictionary-type"?: undefined;
177
- };
178
- } | {
179
- /** The logo's brand colors are fixed; theme tokens shift between light and dark */
180
- files: string[];
181
- rules: {
182
- /**
183
- * Repeated string literals (test titles, expected values) are normal
184
- * and idiomatic in test files
185
- */
186
- "sonarjs/no-duplicate-string"?: undefined;
187
- "lazuee/no-ts-accessibility"?: undefined;
188
- "lazuee/interface-pascal-case"?: undefined;
189
- "lazuee/canonical-header-names"?: undefined;
190
- /**
191
- * Allow pages-router bracketed route filenames while still rejecting non-route names in `pages/`
192
- */
193
- "github/filenames-match-regex"?: undefined;
194
- "shadcn/no-restyle"?: undefined;
195
- "shadcn/no-arbitrary-values"?: undefined;
196
- "shadcn/require-static-classes"?: undefined;
197
- "shadcn/no-raw-colors": "off";
198
- "anti-slop/no-unknown-parameters"?: undefined;
199
- "anti-slop/no-unsafe-dictionary-type"?: undefined;
200
- };
201
- } | {
202
- files: string[];
203
- rules: {
204
- /**
205
- * Repeated string literals (test titles, expected values) are normal
206
- * and idiomatic in test files
207
- */
208
- "sonarjs/no-duplicate-string"?: undefined;
209
- "lazuee/no-ts-accessibility"?: undefined;
210
- "lazuee/interface-pascal-case"?: undefined;
211
- "lazuee/canonical-header-names"?: undefined;
212
- /**
213
- * Allow pages-router bracketed route filenames while still rejecting non-route names in `pages/`
214
- */
215
- "github/filenames-match-regex"?: undefined;
216
- "shadcn/no-restyle"?: undefined;
217
- "shadcn/no-arbitrary-values"?: undefined;
218
- "shadcn/require-static-classes"?: undefined;
219
- "shadcn/no-raw-colors"?: undefined;
220
- "anti-slop/no-unknown-parameters": "off";
221
- "anti-slop/no-unsafe-dictionary-type": "off";
222
- };
223
- })[];
224
- rules: {
225
- /** ── github ───────────────────────────────────────────────────────── */
226
- "github/a11y-aria-label-is-well-formatted": "error";
227
- "github/a11y-no-title-attribute": "error";
228
- "github/a11y-no-visually-hidden-interactive-element": "error";
229
- "github/a11y-role-supports-aria-props": "error";
230
- "github/a11y-svg-has-accessible-name": "error";
231
- "github/array-foreach": "error";
232
- "github/async-currenttarget": "error";
233
- "github/async-preventdefault": "error";
234
- "github/authenticity-token": "error";
235
- "github/filenames-match-regex": "error";
236
- "github/get-attribute": "error";
237
- "github/js-class-name": "error";
238
- "github/no-blur": "error";
239
- "github/no-d-none": "error";
240
- /** Conflicts with unicorn/prefer-dom-node-dataset, which is the benchmark */
241
- "github/no-dataset": "off";
242
- "github/no-dynamic-script-tag": "error";
243
- /**
244
- * The JS plugin bridge misreads module-scoped declarations (e.g. Astro
245
- * frontmatter) as implicit globals, producing false positives.
246
- */
247
- "github/no-implicit-buggy-globals": "off";
248
- "github/no-inner-html": "error";
249
- "github/no-innerText": "error";
250
- "github/no-then": "error";
251
- "github/no-useless-passive": "error";
252
- "github/prefer-observers": "error";
253
- "github/require-passive-events": "error";
254
- /** Mirrors the ESLint preset */
255
- "github/unescaped-html-literal": "off";
256
- /** ── sonarjs ──────────────────────────────────────────────────────── */
257
- "sonarjs/arguments-usage": "error";
258
- "sonarjs/array-constructor": "error";
259
- /** Fights the formatter (arrowParentheses: always) */
260
- "sonarjs/arrow-function-convention": "off";
261
- "sonarjs/aws-apigateway-public-api": "error";
262
- "sonarjs/aws-ec2-rds-dms-public": "error";
263
- "sonarjs/aws-ec2-unencrypted-ebs-volume": "error";
264
- "sonarjs/aws-efs-unencrypted": "error";
265
- "sonarjs/aws-iam-all-privileges": "error";
266
- "sonarjs/aws-iam-all-resources-accessible": "error";
267
- "sonarjs/aws-iam-privilege-escalation": "error";
268
- "sonarjs/aws-iam-public-access": "error";
269
- "sonarjs/aws-opensearchservice-domain": "error";
270
- "sonarjs/aws-rds-unencrypted-databases": "error";
271
- "sonarjs/aws-restricted-ip-admin-access": "error";
272
- "sonarjs/aws-s3-bucket-granted-access": "error";
273
- "sonarjs/aws-s3-bucket-insecure-http": "error";
274
- "sonarjs/aws-s3-bucket-public-access": "error";
275
- "sonarjs/aws-s3-bucket-versioning": "error";
276
- "sonarjs/aws-sagemaker-unencrypted-notebook": "error";
277
- "sonarjs/aws-sns-unencrypted-topics": "error";
278
- "sonarjs/aws-sqs-unencrypted-queue": "error";
279
- "sonarjs/block-scoped-var": "error";
280
- "sonarjs/bool-param-default": "error";
281
- "sonarjs/call-argument-line": "error";
282
- "sonarjs/chai-determinate-assertion": "error";
283
- "sonarjs/class-name": "error";
284
- "sonarjs/code-eval": "error";
285
- /** Matches Biome"s noExcessiveCognitiveComplexity limit */
286
- "sonarjs/cognitive-complexity": ["error", number];
287
- "sonarjs/comma-or-logical-or-case": "error";
288
- "sonarjs/comment-regex": "error";
289
- "sonarjs/constructor-for-side-effects": "error";
290
- "sonarjs/content-length": "error";
291
- "sonarjs/content-security-policy": "error";
292
- "sonarjs/cookie-no-httponly": "error";
293
- "sonarjs/cors": "error";
294
- "sonarjs/csrf": "error";
295
- /** Duplicate of the core complexity rule */
296
- "sonarjs/cyclomatic-complexity": "off";
297
- "sonarjs/declarations-in-global-scope": "error";
298
- "sonarjs/destructuring-assignment-syntax": "error";
299
- "sonarjs/disabled-timeout": "error";
300
- "sonarjs/dynamically-constructed-templates": "error";
301
- /** Mirrors the ESLint preset */
302
- "sonarjs/elseif-without-else": "off";
303
- "sonarjs/encryption-secure-mode": "error";
304
- "sonarjs/expression-complexity": "error";
305
- /** Requires a headerFormat option; errors on every file without one */
306
- "sonarjs/file-header": "off";
307
- /**
308
- * Fires on any file whose name differs from an exported class, which is
309
- * noise for config and module files that export objects, not classes
310
- */
311
- "sonarjs/file-name-differ-from-class": "off";
312
- "sonarjs/file-permissions": "error";
313
- "sonarjs/file-uploads": "error";
314
- "sonarjs/fixme-tag": "error";
315
- "sonarjs/for-in": "error";
316
- "sonarjs/for-loop-increment-sign": "error";
317
- "sonarjs/function-inside-loop": "error";
318
- "sonarjs/function-name": "error";
319
- "sonarjs/future-reserved-words": "error";
320
- "sonarjs/generator-without-yield": "error";
321
- "sonarjs/hardcoded-secret-signatures": "error";
322
- "sonarjs/hashing": "error";
323
- "sonarjs/inconsistent-function-call": "error";
324
- "sonarjs/insecure-cookie": "error";
325
- "sonarjs/insecure-jwt-token": "error";
326
- "sonarjs/inverted-assertion-arguments": "error";
327
- "sonarjs/label-position": "error";
328
- "sonarjs/link-with-target-blank": "error";
329
- /** The preset disables max-lines everywhere */
330
- "sonarjs/max-lines": "off";
331
- /** The preset disables max-lines-per-function everywhere */
332
- "sonarjs/max-lines-per-function": "off";
333
- "sonarjs/max-switch-cases": "error";
334
- "sonarjs/max-union-size": "error";
335
- "sonarjs/misplaced-loop-counter": "error";
336
- /** Duplicate of max-depth, which is off */
337
- "sonarjs/nested-control-flow": "off";
338
- "sonarjs/no-all-duplicated-branches": "error";
339
- "sonarjs/no-angular-bypass-sanitization": "error";
340
- "sonarjs/no-built-in-override": "error";
341
- "sonarjs/no-case-label-in-switch": "error";
342
- "sonarjs/no-clear-text-protocols": "error";
343
- "sonarjs/no-code-after-done": "error";
344
- "sonarjs/no-collapsible-if": "error";
345
- "sonarjs/no-commented-code": "error";
346
- "sonarjs/no-dead-store": "error";
347
- "sonarjs/no-delete-var": "error";
348
- "sonarjs/no-duplicate-in-composite": "error";
349
- "sonarjs/no-duplicate-string": "error";
350
- "sonarjs/no-duplicated-branches": "error";
351
- "sonarjs/no-element-overwrite": "error";
352
- "sonarjs/no-empty-collection": "error";
353
- "sonarjs/no-empty-test-file": "error";
354
- "sonarjs/no-equals-in-for-termination": "error";
355
- "sonarjs/no-exclusive-tests": "error";
356
- "sonarjs/no-extra-arguments": "error";
357
- "sonarjs/no-fallthrough": "error";
358
- "sonarjs/no-function-declaration-in-block": "error";
359
- "sonarjs/no-global-this": "error";
360
- "sonarjs/no-globals-shadowing": "error";
361
- "sonarjs/no-gratuitous-expressions": "error";
362
- "sonarjs/no-hardcoded-ip": "error";
363
- "sonarjs/no-hardcoded-passwords": "error";
364
- "sonarjs/no-hardcoded-secrets": "error";
365
- "sonarjs/no-hook-setter-in-body": "error";
366
- "sonarjs/no-identical-conditions": "error";
367
- "sonarjs/no-identical-expressions": "error";
368
- "sonarjs/no-identical-functions": "error";
369
- "sonarjs/no-ignored-exceptions": "error";
370
- /**
371
- * The JS plugin bridge has no dependency-manifest resolution, so this
372
- * flags builtin (bun:test) and workspace imports as missing dependencies
373
- */
374
- "sonarjs/no-implicit-dependencies": "off";
375
- "sonarjs/no-implicit-global": "error";
376
- "sonarjs/no-incomplete-assertions": "error";
377
- "sonarjs/no-internal-api-use": "error";
378
- "sonarjs/no-invariant-returns": "error";
379
- "sonarjs/no-inverted-boolean-check": "error";
380
- "sonarjs/no-labels": "error";
381
- "sonarjs/no-literal-call": "error";
382
- "sonarjs/no-mime-sniff": "error";
383
- "sonarjs/no-nested-assignment": "error";
384
- "sonarjs/no-nested-conditional": "error";
385
- "sonarjs/no-nested-functions": "error";
386
- "sonarjs/no-nested-incdec": "error";
387
- "sonarjs/no-nested-switch": "error";
388
- "sonarjs/no-nested-template-literals": "error";
389
- "sonarjs/no-os-command-from-path": "error";
390
- "sonarjs/no-parameter-reassignment": "error";
391
- "sonarjs/no-primitive-wrappers": "error";
392
- "sonarjs/no-redundant-assignments": "error";
393
- "sonarjs/no-redundant-boolean": "error";
394
- "sonarjs/no-redundant-jump": "error";
395
- /** The jsPlugins bridge provides no globals, so every identifier is flagged */
396
- "sonarjs/no-reference-error": "off";
397
- "sonarjs/no-referrer-policy": "error";
398
- "sonarjs/no-same-argument-assert": "error";
399
- "sonarjs/no-same-line-conditional": "error";
400
- "sonarjs/no-session-cookies-on-static-assets": "error";
401
- "sonarjs/no-skipped-tests": "error";
402
- "sonarjs/no-sonar-comments": "error";
403
- "sonarjs/no-table-as-layout": "error";
404
- "sonarjs/no-undefined-assignment": "error";
405
- "sonarjs/no-unenclosed-multiline-block": "error";
406
- "sonarjs/no-uniq-key": "error";
407
- "sonarjs/no-unthrown-error": "error";
408
- "sonarjs/no-unused-collection": "error";
409
- "sonarjs/no-unused-function-argument": "error";
410
- "sonarjs/no-unused-vars": "error";
411
- "sonarjs/no-use-of-empty-return-value": "error";
412
- "sonarjs/no-useless-catch": "error";
413
- "sonarjs/no-useless-increment": "error";
414
- "sonarjs/no-useless-react-setstate": "error";
415
- "sonarjs/no-variable-usage-before-declaration": "error";
416
- "sonarjs/no-weak-cipher": "error";
417
- "sonarjs/no-weak-keys": "error";
418
- "sonarjs/no-wildcard-import": "error";
419
- "sonarjs/non-existent-operator": "error";
420
- "sonarjs/object-alt-content": "error";
421
- "sonarjs/prefer-default-last": "error";
422
- "sonarjs/prefer-object-literal": "error";
423
- "sonarjs/prefer-promise-shorthand": "error";
424
- "sonarjs/prefer-single-boolean-return": "error";
425
- "sonarjs/prefer-type-guard": "error";
426
- "sonarjs/prefer-while": "error";
427
- "sonarjs/production-debug": "error";
428
- "sonarjs/pseudo-random": "error";
429
- "sonarjs/public-static-readonly": "error";
430
- "sonarjs/publicly-writable-directories": "error";
431
- "sonarjs/redundant-type-aliases": "error";
432
- "sonarjs/review-blockchain-mnemonic": "error";
433
- "sonarjs/session-regeneration": "error";
434
- /** Conflicts with sort-keys */
435
- "sonarjs/shorthand-property-grouping": "off";
436
- "sonarjs/stable-tests": "error";
437
- "sonarjs/stateful-regex": "error";
438
- "sonarjs/strict-transport-security": "error";
439
- "sonarjs/table-header": "error";
440
- "sonarjs/table-header-reference": "error";
441
- "sonarjs/test-check-exception": "error";
442
- "sonarjs/todo-tag": "error";
443
- "sonarjs/too-many-break-or-continue-in-loop": "error";
444
- "sonarjs/unverified-certificate": "error";
445
- "sonarjs/unverified-hostname": "error";
446
- "sonarjs/updated-const-var": "error";
447
- "sonarjs/updated-loop-counter": "error";
448
- "sonarjs/use-type-alias": "error";
449
- "sonarjs/variable-name": "error";
450
- "sonarjs/weak-ssl": "error";
451
- "sonarjs/x-powered-by": "error";
452
- "sonarjs/xml-parser-xxe": "error";
453
- /** Generic React rules */
454
- "react-doctor/activity-wraps-effect-heavy-subtree": "error";
455
- "react-doctor/advanced-event-handler-refs": "error";
456
- "react-doctor/async-await-in-loop": "error";
457
- "react-doctor/async-defer-await": "error";
458
- "react-doctor/async-parallel": "error";
459
- "react-doctor/auth-token-in-web-storage": "error";
460
- "react-doctor/client-localstorage-no-version": "error";
461
- "react-doctor/client-passive-event-listeners": "error";
462
- "react-doctor/dialog-has-accessible-name": "error";
463
- "react-doctor/effect-needs-cleanup": "error";
464
- "react-doctor/hooks-no-nan-in-deps": "error";
465
- "react-doctor/html-no-invalid-paragraph-child": "error";
466
- "react-doctor/html-no-invalid-table-nesting": "error";
467
- "react-doctor/html-no-nested-interactive": "error";
468
- "react-doctor/jotai-derived-atom-returns-fresh-object": "error";
469
- "react-doctor/jotai-select-atom-in-render-body": "error";
470
- "react-doctor/jotai-tq-use-raw-query-atom": "error";
471
- "react-doctor/js-async-reduce-without-awaited-acc": "error";
472
- "react-doctor/js-batch-dom-css": "error";
473
- "react-doctor/js-cache-property-access": "error";
474
- "react-doctor/js-cache-storage": "error";
475
- "react-doctor/js-combine-iterations": "error";
476
- "react-doctor/js-early-exit": "error";
477
- "react-doctor/js-flatmap-filter": "error";
478
- "react-doctor/js-hoist-intl": "error";
479
- "react-doctor/js-hoist-regexp": "error";
480
- "react-doctor/js-index-maps": "error";
481
- "react-doctor/js-length-check-first": "error";
482
- "react-doctor/js-min-max-loop": "error";
483
- "react-doctor/js-set-map-lookups": "error";
484
- "react-doctor/js-tosorted-immutable": "error";
485
- "react-doctor/no-adjust-state-on-prop-change": "error";
486
- "react-doctor/no-array-index-as-key": "error";
487
- "react-doctor/no-async-effect-callback": "error";
488
- "react-doctor/no-barrel-import": "error";
489
- "react-doctor/no-call-component-as-function": "error";
490
- "react-doctor/no-cascading-set-state": "error";
491
- "react-doctor/no-chain-state-updates": "error";
492
- "react-doctor/no-create-context-in-render": "error";
493
- "react-doctor/no-create-ref-in-function-component": "error";
494
- "react-doctor/no-create-store-in-render": "error";
495
- "react-doctor/no-derived-state": "error";
496
- "react-doctor/no-derived-state-effect": "error";
497
- "react-doctor/no-derived-useState": "error";
498
- "react-doctor/no-direct-state-mutation": "error";
499
- "react-doctor/no-disabled-zoom": "error";
500
- "react-doctor/no-document-start-view-transition": "error";
501
- "react-doctor/no-document-write": "error";
502
- "react-doctor/no-dynamic-import-path": "error";
503
- "react-doctor/no-effect-chain": "error";
504
- "react-doctor/no-effect-event-handler": "error";
505
- "react-doctor/no-effect-event-in-deps": "error";
506
- "react-doctor/no-effect-with-fresh-deps": "error";
507
- "react-doctor/no-eval": "error";
508
- "react-doctor/no-event-handler": "error";
509
- "react-doctor/no-event-trigger-state": "error";
510
- "react-doctor/no-fetch-in-effect": "error";
511
- "react-doctor/no-flush-sync": "error";
512
- "react-doctor/no-full-lodash-import": "error";
513
- "react-doctor/no-giant-component": "error";
514
- "react-doctor/no-global-css-variable-animation": "error";
515
- "react-doctor/no-gray-on-colored-background": "error";
516
- "react-doctor/no-img-lazy-with-high-fetchpriority": "error";
517
- "react-doctor/no-initialize-state": "error";
518
- "react-doctor/no-inline-bounce-easing": "error";
519
- "react-doctor/no-inline-exhaustive-style": "error";
520
- "react-doctor/no-inline-prop-on-memo-component": "error";
521
- "react-doctor/no-json-parse-stringify-clone": "error";
522
- "react-doctor/no-jsx-element-type": "error";
523
- "react-doctor/no-large-animated-blur": "error";
524
- "react-doctor/no-layout-property-animation": "error";
525
- "react-doctor/no-layout-transition-inline": "error";
526
- "react-doctor/no-legacy-class-lifecycles": "error";
527
- "react-doctor/no-legacy-context-api": "error";
528
- "react-doctor/no-long-transition-duration": "error";
529
- "react-doctor/no-many-boolean-props": "error";
530
- "react-doctor/no-mirror-prop-effect": "error";
531
- "react-doctor/no-moment": "error";
532
- "react-doctor/no-mutable-in-deps": "error";
533
- "react-doctor/no-mutating-reducer-state": "error";
534
- "react-doctor/no-nested-component-definition": "error";
535
- "react-doctor/no-outline-none": "error";
536
- "react-doctor/no-pass-data-to-parent": "error";
537
- "react-doctor/no-pass-live-state-to-parent": "error";
538
- "react-doctor/no-permanent-will-change": "error";
539
- "react-doctor/no-polymorphic-children": "error";
540
- "react-doctor/no-prevent-default": "error";
541
- "react-doctor/no-prop-callback-in-effect": "error";
542
- "react-doctor/no-random-key": "error";
543
- "react-doctor/no-react-dom-deprecated-apis": "error";
544
- "react-doctor/no-react19-deprecated-apis": "error";
545
- "react-doctor/no-render-in-render": "error";
546
- "react-doctor/no-render-prop-children": "error";
547
- "react-doctor/no-reset-all-state-on-prop-change": "error";
548
- "react-doctor/no-scale-from-zero": "error";
549
- "react-doctor/no-secrets-in-client-code": "error";
550
- "react-doctor/no-self-updating-effect": "error";
551
- "react-doctor/no-set-state-in-render": "error";
552
- "react-doctor/no-string-false-on-boolean-attribute": "error";
553
- "react-doctor/no-sync-xhr": "error";
554
- "react-doctor/no-tiny-text": "error";
555
- "react-doctor/no-transition-all": "error";
556
- "react-doctor/no-uncontrolled-input": "error";
557
- "react-doctor/no-undeferred-third-party": "error";
558
- "react-doctor/no-usememo-simple-expression": "error";
559
- /** "react-doctor/only-export-components": "error", */
560
- "react-doctor/prefer-dynamic-import": "error";
561
- "react-doctor/prefer-explicit-variants": "error";
562
- "react-doctor/prefer-html-dialog": "error";
563
- "react-doctor/prefer-module-scope-pure-function": "error";
564
- "react-doctor/prefer-module-scope-static-value": "error";
565
- "react-doctor/prefer-stable-empty-fallback": "error";
566
- "react-doctor/prefer-use-effect-event": "error";
567
- "react-doctor/prefer-use-sync-external-store": "error";
568
- "react-doctor/prefer-useReducer": "error";
569
- "react-doctor/react-compiler-no-manual-memoization": "error";
570
- "react-doctor/redux-useselector-inline-derivation": "error";
571
- "react-doctor/redux-useselector-returns-new-collection": "error";
572
- "react-doctor/rendering-animate-svg-wrapper": "error";
573
- "react-doctor/rendering-conditional-render": "error";
574
- "react-doctor/rendering-hoist-jsx": "error";
575
- "react-doctor/rendering-hydration-mismatch-time": "error";
576
- "react-doctor/rendering-hydration-no-flicker": "error";
577
- "react-doctor/rendering-script-defer-async": "error";
578
- "react-doctor/rendering-svg-precision": "error";
579
- "react-doctor/rendering-usetransition-loading": "error";
580
- "react-doctor/rerender-defer-reads-hook": "error";
581
- "react-doctor/rerender-dependencies": "error";
582
- "react-doctor/rerender-derived-state-from-hook": "error";
583
- "react-doctor/rerender-functional-setstate": "error";
584
- "react-doctor/rerender-lazy-ref-init": "error";
585
- "react-doctor/rerender-lazy-state-init": "error";
586
- "react-doctor/rerender-memo-before-early-return": "error";
587
- "react-doctor/rerender-memo-with-default-value": "error";
588
- "react-doctor/rerender-state-only-in-handlers": "error";
589
- "react-doctor/rerender-transitions-scroll": "error";
590
- "react-doctor/server-after-nonblocking": "error";
591
- "react-doctor/server-auth-actions": "error";
592
- "react-doctor/server-cache-with-object-literal": "error";
593
- "react-doctor/server-dedup-props": "error";
594
- "react-doctor/server-fetch-without-revalidate": "error";
595
- "react-doctor/server-hoist-static-io": "error";
596
- "react-doctor/server-no-mutable-module-state": "error";
597
- "react-doctor/server-sequential-independent-await": "error";
598
- "react-doctor/use-lazy-motion": "error";
599
- "react-doctor/zod-v4-no-deprecated-error-apis": "error";
600
- "react-doctor/zod-v4-no-deprecated-error-customization": "error";
601
- "react-doctor/zod-v4-no-deprecated-schema-apis": "error";
602
- "react-doctor/zod-v4-prefer-top-level-string-formats": "error";
603
- /**
604
- * Full-ruleset parity adjustments: rules the react-doctor CLI ships
605
- * disabled by default (defaultEnabled: false) that only produce noise
606
- * when oxlint force-enables every listed rule, and rules the CLI gates
607
- * behind framework detection (`nextjs`, `pure-preact`) that this
608
- * Bun + Hono + react-router app never satisfies
609
- */
610
- "react-doctor/react-in-jsx-scope": "off";
611
- "react-doctor/jsx-boolean-value": "off";
612
- "react-doctor/jsx-handler-names": "off";
613
- "react-doctor/jsx-props-no-spreading": "off";
614
- "react-doctor/nextjs-missing-metadata": "off";
615
- "react-doctor/nextjs-no-a-element": "off";
616
- "react-doctor/nextjs-no-img-element": "off";
617
- "react-doctor/preact-no-react-hooks-import": "off";
618
- /**
619
- * Small presentational helpers stay colocated in one file (see
620
- * src/components/api-tester.tsx); mirrors `react/no-multi-comp` being off
621
- * in the presets
622
- */
623
- "react-doctor/no-multi-comp": "off";
624
- "react-doctor/no-multi-component-file": "off";
625
- /** src/router.tsx exports the router object rather than a component */
626
- "react-doctor/only-export-components": "off";
627
- /**
628
- * ── tailwindcss ────────────────────────────────────────────────────
629
- * Correctness: catch real bugs
630
- */
631
- "tailwindcss/no-conflicting-classes": "error";
632
- "tailwindcss/no-deprecated-classes": "error";
633
- "tailwindcss/no-duplicate-classes": "warn";
634
- "tailwindcss/no-unknown-classes": "error";
635
- /** Modernization: keep classes in current canonical form */
636
- "tailwindcss/enforce-canonical": "warn";
637
- "tailwindcss/no-unnecessary-arbitrary-value": "warn";
638
- /** Style and consistency */
639
- "tailwindcss/enforce-sort-order": "warn";
640
- "tailwindcss/consistent-variant-order": "warn";
641
- "tailwindcss/enforce-consistent-important-position": "warn";
642
- "tailwindcss/no-unnecessary-whitespace": "warn";
643
- /** ── lazuee ──────────────────────────────────────────────────── */
644
- "lazuee/prefer-alias": "error";
645
- "lazuee/no-ts-accessibility": "off";
646
- "lazuee/interface-pascal-case": "off";
647
- "lazuee/canonical-header-names": "off";
648
- /** ── anti-slop ──────────────────────────────────────────────────── */
649
- "anti-slop/no-chained-type-assertions": "error";
650
- "anti-slop/no-conditional-empty-object-spread": "error";
651
- "anti-slop/no-known-value-widening": "error";
652
- "anti-slop/no-module-mocking": "error";
653
- "anti-slop/no-object-parameters": "error";
654
- "anti-slop/no-reflect-apply": "error";
655
- "anti-slop/no-reflect-get": "error";
656
- /**
657
- * allowInTypeGuards exempts `typeof` inside type predicate functions
658
- * ((x): x is T): predicates are the named-boundary pattern the rule
659
- * pushes toward, and hand-rolled JSON/boundary validation has no other
660
- * way to write the check (dmmulroy/anti-slop#10)
661
- */
662
- "anti-slop/no-runtime-typeof": ["error", {
663
- allowInTypeGuards: boolean;
664
- }];
665
- "anti-slop/no-shape-in-symbol-names": "error";
666
- "anti-slop/no-unknown-parameters": "error";
667
- "anti-slop/no-unknown-returns": "error";
668
- "anti-slop/no-unknown-type-aliases": "error";
669
- "anti-slop/no-unsafe-dictionary-type": "error";
670
- "anti-slop/no-widen-then-assert": "error";
671
- "anti-slop/require-safety-comment-for-type-assertion": "error";
672
- /**
673
- * Core rules that pinch against anti-slop when both are enabled:
674
- * consistent-indexed-object-style's autofix rewrites index-signature
675
- * interfaces into `Record` aliases, which no-known-value-widening
676
- * resolves and re-flags (a fix/break loop)
677
- *
678
- * no-immediate-mutation bans the empty-accumulator escape from the same
679
- * rule. Extending this preset after core turns them off by default
680
- */
681
- "typescript/consistent-indexed-object-style": "off";
682
- "unicorn/no-immediate-mutation": "off";
683
- /** ── no-comment-slop ──────────────────────────────────────────────────── */
684
- "no-comment-slop/max-comment-lines": "error";
685
- "no-comment-slop/no-banner-comment": "error";
686
- "no-comment-slop/no-trailing-comment": "error";
687
- "no-comment-slop/prefer-jsdoc-for-exports": "error";
688
- "no-comment-slop/prefer-jsdoc-for-members": "error";
689
- "no-comment-slop/require-member-docs": "error";
690
- "no-comment-slop/multiline-jsdoc-format": "error";
691
- "no-comment-slop/no-trailing-period": "error";
692
- "no-comment-slop/no-em-dash": "error";
693
- "no-comment-slop/no-jargon": "error";
694
- "no-comment-slop/no-foreign-syntax": "error";
695
- /** ── shadcn ──────────────────────────────────────────────────── */
696
- "shadcn/no-restyle": ["error", {
697
- allow: string[];
698
- contracts: {
699
- pattern: string;
700
- allow: string[];
701
- }[];
702
- }];
703
- "shadcn/no-raw-colors": "error";
704
- "shadcn/no-arbitrary-values": ["error", {
705
- allow: string[];
706
- }];
707
- "shadcn/no-inline-styles": ["error", {
708
- /** Telemetry/measured layout computes waterfall positions, slider markers, and per-series/status colors; no fixed class set can represent them */
709
- allow: string[];
710
- }];
711
- "shadcn/no-unknown-classes": "error";
712
- "shadcn/require-static-classes": "error";
713
- };
714
574
  };
715
575
  export default config;
716
576
  /**
717
- * Returns a copy of this preset narrowed to the given plugin names ("github",
718
- * "sonarjs", "react-doctor"): only the selected jsPlugins entries are loaded
719
- * and only their rules (top-level and per-override) are kept. it wires this
720
- * into generated configs when a subset of the plugins is chosen, so the
721
- * generated file stays a one-line extend instead of inlining the
722
- * filtering logic:
723
- *
724
- * import { selectJsPlugins } from "@lazuee/oxlint/js-plugins";
725
- *
726
- * const jsPlugins = selectJsPlugins(["github", "sonarjs"]);
727
- *
728
- * export default defineConfig({
729
- * extends: [core, jsPlugins],
730
- * ignorePatterns: core.ignorePatterns,
731
- * jsPlugins: jsPlugins.jsPlugins,
732
- * });
577
+ * Annotated so declaration emit doesn't have to name the merged configs'
578
+ * inferred types, which reference rule option types oxlint does not export
733
579
  */
734
- export declare const selectJsPlugins: (pluginNames: JSPluginName[]) => {
735
- /**
736
- * Inert until oxlint merges settings from extends; the root config applies
737
- * jsPluginSettings itself (see above)
738
- */
739
- settings: {
740
- "react-doctor": {
741
- portedRuleMode: string;
742
- };
743
- };
744
- jsPlugins: ({
745
- readonly name: "github";
746
- readonly specifier: "eslint-plugin-github";
747
- } | {
748
- readonly name: "sonarjs";
749
- readonly specifier: "eslint-plugin-sonarjs";
750
- } | {
751
- readonly name: "react-doctor";
752
- readonly specifier: "oxlint-plugin-react-doctor";
753
- } | {
754
- readonly name: "tailwindcss";
755
- readonly specifier: "oxlint-tailwindcss";
756
- } | {
757
- readonly name: "anti-slop";
758
- readonly specifier: string;
759
- } | {
760
- readonly name: "no-comment-slop";
761
- readonly specifier: string;
762
- } | {
763
- readonly name: "shadcn";
764
- readonly specifier: string;
765
- } | {
766
- readonly name: "lazuee";
767
- readonly specifier: string;
768
- })[];
769
- overrides: ({
770
- files: string[];
771
- rules: {
772
- [k: string]: any;
773
- };
774
- } | {
775
- files: string[];
776
- rules: {
777
- [k: string]: any;
778
- };
779
- } | {
780
- files: string[];
781
- rules: {
782
- [k: string]: any;
783
- };
784
- } | {
785
- files: string[];
786
- rules: {
787
- [k: string]: any;
788
- };
789
- } | {
790
- files: string[];
791
- rules: {
792
- [k: string]: any;
793
- };
794
- } | {
795
- files: string[];
796
- rules: {
797
- [k: string]: any;
798
- };
799
- } | {
800
- /** The logo's brand colors are fixed; theme tokens shift between light and dark */
801
- files: string[];
802
- rules: {
803
- [k: string]: any;
804
- };
805
- } | {
806
- files: string[];
807
- rules: {
808
- [k: string]: any;
809
- };
810
- })[];
811
- rules: {
812
- [k: string]: "error" | "off" | "warn" | ["error", number] | ["error", {
813
- allowInTypeGuards: boolean;
814
- }] | ["error", {
815
- allow: string[];
816
- contracts: {
817
- pattern: string;
818
- allow: string[];
819
- }[];
820
- }] | ["error", {
821
- allow: string[];
822
- }] | ["error", {
823
- /** Telemetry/measured layout computes waterfall positions, slider markers, and per-series/status colors; no fixed class set can represent them */
824
- allow: string[];
825
- }];
826
- };
827
- };
580
+ export declare const selectJsPlugins: (pluginNames: JSPluginName[]) => OxlintConfig;