@himynameisdave/oxlint-config 1.0.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.js ADDED
@@ -0,0 +1,23 @@
1
+ import { defineConfig } from 'oxlint';
2
+ import base from './base.js';
3
+ import svelte from './svelte.js';
4
+ import typeAware from './type-aware.js';
5
+ import vitest from './vitest.js';
6
+ export { default as base } from './base.js';
7
+ export { default as svelte } from './svelte.js';
8
+ export { default as typeAware } from './type-aware.js';
9
+ export { default as vitest } from './vitest.js';
10
+ /**
11
+ * Kitchen sink: base + svelte + vitest + type-aware, in override-safe order.
12
+ * Requires `oxlint-tsgolint` installed (type-aware rules are on).
13
+ *
14
+ * For à la carte composition, extend the named exports instead:
15
+ *
16
+ * ```ts
17
+ * import base from "@himynameisdave/oxlint-config/base";
18
+ * export default defineConfig({ extends: [base] });
19
+ * ```
20
+ */
21
+ export default defineConfig({
22
+ extends: [base, svelte, vitest, typeAware]
23
+ });
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Svelte overrides: rule adjustments for `.svelte` (and `.svelte.ts`/`.svelte.js`
3
+ * rune modules).
4
+ *
5
+ * **Svelte 5 (runes) only.** Svelte 4 / legacy-mode syntax errors on purpose: `$:`
6
+ * reactive statements trip `eslint/no-labels` and `export let` props trip
7
+ * `import/no-mutable-exports`. See the "Svelte support" section of the README for the
8
+ * exact rules to relax if you still ship legacy components.
9
+ *
10
+ * Extend AFTER base so these overrides win:
11
+ *
12
+ * ```ts
13
+ * export default defineConfig({ extends: [base, svelte] });
14
+ * ```
15
+ */
16
+ declare const _default: {
17
+ overrides: {
18
+ files: string[];
19
+ rules: {
20
+ 'eslint/prefer-const': "off";
21
+ 'eslint/prefer-destructuring': "off";
22
+ 'eslint/max-classes-per-file': "off";
23
+ 'import/no-namespace': "off";
24
+ };
25
+ }[];
26
+ };
27
+ export default _default;
package/dist/svelte.js ADDED
@@ -0,0 +1,35 @@
1
+ import { defineConfig } from 'oxlint';
2
+ /**
3
+ * Svelte overrides: rule adjustments for `.svelte` (and `.svelte.ts`/`.svelte.js`
4
+ * rune modules).
5
+ *
6
+ * **Svelte 5 (runes) only.** Svelte 4 / legacy-mode syntax errors on purpose: `$:`
7
+ * reactive statements trip `eslint/no-labels` and `export let` props trip
8
+ * `import/no-mutable-exports`. See the "Svelte support" section of the README for the
9
+ * exact rules to relax if you still ship legacy components.
10
+ *
11
+ * Extend AFTER base so these overrides win:
12
+ *
13
+ * ```ts
14
+ * export default defineConfig({ extends: [base, svelte] });
15
+ * ```
16
+ */
17
+ export default defineConfig({
18
+ overrides: [
19
+ {
20
+ files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'],
21
+ rules: {
22
+ // Svelte 5 runes ($state, $derived, $props) declare reactive state with
23
+ // `let` (the compiler reassigns it), so const-ifying is a false positive.
24
+ 'eslint/prefer-const': 'off',
25
+ // Rune destructuring (`let { data } = $props()`) trips the same way.
26
+ 'eslint/prefer-destructuring': 'off',
27
+ // Component modules commonly hold a component + tiny helper classes.
28
+ 'eslint/max-classes-per-file': 'off',
29
+ // import * as Dialog is the compound-component idiom (shadcn-svelte,
30
+ // bits-ui): <Dialog.Root><Dialog.Trigger/> needs the namespace.
31
+ 'import/no-namespace': 'off'
32
+ }
33
+ }
34
+ ]
35
+ });
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Type-aware rules: everything here needs type information, which means the
3
+ * `oxlint-tsgolint` package installed and linting run with `--type-aware`
4
+ * (or this file's `options.typeAware` — set below, so extending is enough).
5
+ *
6
+ * These are the highest-value rules in the whole config — they catch the bugs
7
+ * syntax-level linting can't see (floating promises, impossible conditions,
8
+ * unsound assertions).
9
+ */
10
+ declare const _default: {
11
+ options: {
12
+ typeAware: true;
13
+ };
14
+ rules: {
15
+ 'typescript/await-thenable': "error";
16
+ 'typescript/consistent-return': "off";
17
+ 'typescript/consistent-type-exports': "error";
18
+ 'typescript/dot-notation': "error";
19
+ 'typescript/no-array-delete': "error";
20
+ 'typescript/no-base-to-string': "error";
21
+ 'typescript/no-confusing-void-expression': "error";
22
+ 'typescript/no-deprecated': "error";
23
+ 'typescript/no-duplicate-type-constituents': "error";
24
+ 'typescript/no-floating-promises': "error";
25
+ 'typescript/no-for-in-array': "error";
26
+ 'typescript/no-implied-eval': "error";
27
+ 'typescript/no-meaningless-void-operator': "error";
28
+ 'typescript/no-misused-promises': "error";
29
+ 'typescript/no-misused-spread': "error";
30
+ 'typescript/no-mixed-enums': "error";
31
+ 'typescript/no-redundant-type-constituents': "error";
32
+ 'typescript/no-unnecessary-boolean-literal-compare': "error";
33
+ 'typescript/no-unnecessary-condition': "error";
34
+ 'typescript/no-unnecessary-qualifier': "error";
35
+ 'typescript/no-unnecessary-template-expression': "error";
36
+ 'typescript/no-unnecessary-type-arguments': "error";
37
+ 'typescript/no-unnecessary-type-assertion': "error";
38
+ 'typescript/no-unnecessary-type-conversion': "error";
39
+ 'typescript/no-unnecessary-type-parameters': "error";
40
+ 'typescript/no-unsafe-enum-comparison': "error";
41
+ 'typescript/no-unsafe-unary-minus': "error";
42
+ 'typescript/no-useless-default-assignment': "error";
43
+ 'typescript/non-nullable-type-assertion-style': "error";
44
+ 'typescript/only-throw-error': "error";
45
+ 'typescript/prefer-find': "error";
46
+ 'typescript/prefer-includes': "error";
47
+ 'typescript/prefer-nullish-coalescing': "error";
48
+ 'typescript/prefer-optional-chain': "error";
49
+ 'typescript/prefer-promise-reject-errors': "error";
50
+ 'typescript/prefer-readonly': "error";
51
+ 'typescript/prefer-readonly-parameter-types': ["error", {
52
+ ignoreInferredTypes: true;
53
+ allow: {
54
+ from: "lib";
55
+ name: string;
56
+ }[];
57
+ }];
58
+ 'typescript/prefer-reduce-type-parameter': "error";
59
+ 'typescript/prefer-regexp-exec': "error";
60
+ 'typescript/prefer-return-this-type': "error";
61
+ 'typescript/prefer-string-starts-ends-with': "error";
62
+ 'typescript/promise-function-async': "error";
63
+ 'typescript/related-getter-setter-pairs': "error";
64
+ 'typescript/require-array-sort-compare': "error";
65
+ 'typescript/require-await': "off";
66
+ 'typescript/restrict-plus-operands': "error";
67
+ 'typescript/restrict-template-expressions': "error";
68
+ 'typescript/return-await': ["error", "in-try-catch"];
69
+ 'typescript/strict-boolean-expressions': "off";
70
+ 'typescript/strict-void-return': "error";
71
+ 'typescript/switch-exhaustiveness-check': "error";
72
+ 'typescript/unbound-method': "error";
73
+ 'typescript/use-unknown-in-catch-callback-variable': "error";
74
+ 'typescript/no-unsafe-argument': "off";
75
+ 'typescript/no-unsafe-assignment': "off";
76
+ 'typescript/no-unsafe-call': "off";
77
+ 'typescript/no-unsafe-member-access': "off";
78
+ 'typescript/no-unsafe-return': "off";
79
+ 'typescript/no-unsafe-type-assertion': "off";
80
+ 'eslint/no-implied-eval': "off";
81
+ 'eslint/no-throw-literal': "off";
82
+ 'eslint/prefer-promise-reject-errors': "off";
83
+ 'unicorn/prefer-array-find': "off";
84
+ 'unicorn/prefer-includes': "off";
85
+ 'unicorn/prefer-string-starts-ends-with': "off";
86
+ };
87
+ };
88
+ export default _default;
@@ -0,0 +1,189 @@
1
+ import { defineConfig } from 'oxlint';
2
+ /**
3
+ * Type-aware rules: everything here needs type information, which means the
4
+ * `oxlint-tsgolint` package installed and linting run with `--type-aware`
5
+ * (or this file's `options.typeAware` — set below, so extending is enough).
6
+ *
7
+ * These are the highest-value rules in the whole config — they catch the bugs
8
+ * syntax-level linting can't see (floating promises, impossible conditions,
9
+ * unsound assertions).
10
+ */
11
+ export default defineConfig({
12
+ options: {
13
+ typeAware: true
14
+ },
15
+ rules: {
16
+ // await on a non-Thenable is dead syntax that implies async behavior.
17
+ 'typescript/await-thenable': 'error',
18
+ // tsconfig's noImplicitReturns enforces this at compile time with fewer false positives.
19
+ 'typescript/consistent-return': 'off',
20
+ // export type for type-only exports — keeps them erasable by any transpiler.
21
+ 'typescript/consistent-type-exports': 'error',
22
+ // obj["key"] for a statically-known key is obj.key.
23
+ 'typescript/dot-notation': 'error',
24
+ // NOTE: tsgolint also implements naming-convention and prefer-destructuring,
25
+ // but oxlint 1.75 doesn't register those rule names yet — add them here once
26
+ // they land upstream.
27
+ // delete arr[i] leaves a hole, not a shorter array — splice/filter instead.
28
+ 'typescript/no-array-delete': 'error',
29
+ // `${object}` renders "[object Object]" — the type system knows and can stop it.
30
+ 'typescript/no-base-to-string': 'error',
31
+ // const x = voidFn() assigns undefined while looking meaningful.
32
+ 'typescript/no-confusing-void-expression': 'error',
33
+ // Using @deprecated APIs is scheduled breakage; migrate at lint time, not upgrade time.
34
+ 'typescript/no-deprecated': 'error',
35
+ // string | string unions signal a broken type expression.
36
+ 'typescript/no-duplicate-type-constituents': 'error',
37
+ // An unawaited promise swallows its rejection — the #1 async bug this stack catches.
38
+ 'typescript/no-floating-promises': 'error',
39
+ // for-in over an array iterates string keys and prototype pollution.
40
+ 'typescript/no-for-in-array': 'error',
41
+ // setTimeout("string") — the type-aware twin of the base rule (see off below).
42
+ 'typescript/no-implied-eval': 'error',
43
+ // void x to discard a value the type system says is already void.
44
+ 'typescript/no-meaningless-void-operator': 'error',
45
+ // A promise where a boolean/void is expected (if (asyncCheck()) — always truthy).
46
+ 'typescript/no-misused-promises': 'error',
47
+ // Spreading a Promise/function/Map into an object silently produces garbage.
48
+ 'typescript/no-misused-spread': 'error',
49
+ // Enums mixing string and number members defeat both mental models.
50
+ 'typescript/no-mixed-enums': 'error',
51
+ // `string | never` and friends — a constituent that changes nothing signals a typo.
52
+ 'typescript/no-redundant-type-constituents': 'error',
53
+ // x === true on a boolean is x.
54
+ 'typescript/no-unnecessary-boolean-literal-compare': 'error',
55
+ // A condition the types prove always-true/false is dead code or a wrong type.
56
+ 'typescript/no-unnecessary-condition': 'error',
57
+ // Namespace.member where member is already in scope.
58
+ 'typescript/no-unnecessary-qualifier': 'error',
59
+ // `${"literal"}` — a template around nothing dynamic.
60
+ 'typescript/no-unnecessary-template-expression': 'error',
61
+ // Type args matching the defaults restate the obvious.
62
+ 'typescript/no-unnecessary-type-arguments': 'error',
63
+ // `as T` where the value is already T teaches readers to ignore assertions.
64
+ 'typescript/no-unnecessary-type-assertion': 'error',
65
+ // String(alreadyString) — conversion of a value already that type.
66
+ 'typescript/no-unnecessary-type-conversion': 'error',
67
+ // A type param used once constrains nothing — inline it.
68
+ 'typescript/no-unnecessary-type-parameters': 'error',
69
+ // enumValue === "raw string" bypasses the enum's whole point.
70
+ 'typescript/no-unsafe-enum-comparison': 'error',
71
+ // Unary minus on non-numbers produces NaN silently.
72
+ 'typescript/no-unsafe-unary-minus': 'error',
73
+ // param = defaultValue where the type already guarantees non-undefined.
74
+ 'typescript/no-useless-default-assignment': 'error',
75
+ // x as T where x! expresses exactly "remove null" — say the narrower thing.
76
+ 'typescript/non-nullable-type-assertion-style': 'error',
77
+ // throw of non-Error values loses stack traces (type-aware big sibling of
78
+ // eslint/no-throw-literal, which is off below).
79
+ 'typescript/only-throw-error': 'error',
80
+ // filter(...)[0] over the whole array; find stops early (supersedes unicorn's twin, off below).
81
+ 'typescript/prefer-find': 'error',
82
+ // indexOf !== -1 is includes, with types (supersedes unicorn's twin, off below).
83
+ 'typescript/prefer-includes': 'error',
84
+ // || treats 0/"" as missing; ?? means "nullish only". A/B disagreed — stricter B wins.
85
+ 'typescript/prefer-nullish-coalescing': 'error',
86
+ // a && a.b chains have an a?.b spelling that can't typo the guard.
87
+ 'typescript/prefer-optional-chain': 'error',
88
+ // Rejections must be Errors for stacks (supersedes eslint/prefer-promise-reject-errors below).
89
+ 'typescript/prefer-promise-reject-errors': 'error',
90
+ // A private field never reassigned is readonly — let the type say so.
91
+ 'typescript/prefer-readonly': 'error',
92
+ // Parameters you don't mutate should say so — readonly params make mutation
93
+ // a visible API decision. ignoreInferredTypes spares callback params; the allow
94
+ // list exempts inherently-mutable platform types. Consumers append their own
95
+ // framework types (RequestEvent, Page, ...) via their overrides.
96
+ 'typescript/prefer-readonly-parameter-types': [
97
+ 'error',
98
+ {
99
+ ignoreInferredTypes: true,
100
+ allow: [
101
+ { from: 'lib', name: 'Date' },
102
+ { from: 'lib', name: 'URL' },
103
+ { from: 'lib', name: 'URLSearchParams' },
104
+ { from: 'lib', name: 'FormData' },
105
+ { from: 'lib', name: 'Request' },
106
+ { from: 'lib', name: 'Response' },
107
+ { from: 'lib', name: 'Headers' },
108
+ { from: 'lib', name: 'RegExp' }
109
+ ]
110
+ }
111
+ ],
112
+ // reduce<T>(...) over reduce(...) as T — the type param checks, the cast lies.
113
+ 'typescript/prefer-reduce-type-parameter': 'error',
114
+ // exec() over match() for single-match regexes — same result, no branching on flags.
115
+ 'typescript/prefer-regexp-exec': 'error',
116
+ // Chainable methods returning `this` should say `this`, not the class name.
117
+ 'typescript/prefer-return-this-type': 'error',
118
+ // startsWith over regex/indexOf checks, with types confirming string-ness
119
+ // (supersedes unicorn's twin, off below).
120
+ 'typescript/prefer-string-starts-ends-with': 'error',
121
+ // A function returning Promise should be async — the keyword is the documentation.
122
+ 'typescript/promise-function-async': 'error',
123
+ // A getter/setter pair with mismatched types breaks obj.x = obj.x.
124
+ 'typescript/related-getter-setter-pairs': 'error',
125
+ // sort() without a comparator sorts numbers as strings ([1, 10, 2]).
126
+ 'typescript/require-array-sort-compare': 'error',
127
+ // async-without-await wrappers are common API-uniformity tools (off per smallreads).
128
+ 'typescript/require-await': 'off',
129
+ // "str" + num coercion — make the conversion explicit.
130
+ 'typescript/restrict-plus-operands': 'error',
131
+ // `${obj}` in templates — same [object Object] family as no-base-to-string.
132
+ 'typescript/restrict-template-expressions': 'error',
133
+ // `return promise` inside try/catch returns before it can reject, so the catch
134
+ // never runs: that's a real bug, not a style choice. in-try-catch mode targets
135
+ // only that case (verified: it does not fire on a plain return outside try/catch).
136
+ 'typescript/return-await': ['error', 'in-try-catch'],
137
+ // if (str) conflating "" with absence is idiomatic JS; requiring !== "" everywhere
138
+ // fights the language (off per smallreads).
139
+ 'typescript/strict-boolean-expressions': 'off',
140
+ // Returning a value from a void-typed callback gets silently discarded.
141
+ 'typescript/strict-void-return': 'error',
142
+ // A switch on a union that misses a member compiles today, breaks when the union grows.
143
+ 'typescript/switch-exhaustiveness-check': 'error',
144
+ // Passing obj.method unbound loses `this` at the callsite.
145
+ 'typescript/unbound-method': 'error',
146
+ // catch (e: unknown) in callbacks — forces narrowing instead of assuming Error.
147
+ 'typescript/use-unknown-in-catch-callback-variable': 'error',
148
+ /* ------------------------------------------------------------------ *
149
+ * The unsafe-* family: all off. They exist to quarantine `any`, but
150
+ * no-explicit-any already bans introducing it — what remains is `any`
151
+ * leaking from third-party APIs, where these produce walls of noise
152
+ * at every boundary (both source configs agree).
153
+ * ------------------------------------------------------------------ */
154
+ // any as a function argument.
155
+ 'typescript/no-unsafe-argument': 'off',
156
+ // Assigning an any value.
157
+ 'typescript/no-unsafe-assignment': 'off',
158
+ // Calling an any value.
159
+ 'typescript/no-unsafe-call': 'off',
160
+ // Member access on an any value.
161
+ 'typescript/no-unsafe-member-access': 'off',
162
+ // Returning an any value.
163
+ 'typescript/no-unsafe-return': 'off',
164
+ // Bans any `as` cast that isn't provably safe: fires even without `any`
165
+ // involved (verified: `wide as Narrow` errors with no `any` in sight), so
166
+ // it isn't really part of the any-quarantine family above, despite sitting
167
+ // beside it. Off because boundary casts (JSON.parse(...) as T, DOM node casts)
168
+ // are unavoidable in app code; tests exempt it anyway in base's override.
169
+ // Revisit if #6's dogfood data ever shows a low hit count on real code.
170
+ 'typescript/no-unsafe-type-assertion': 'off',
171
+ /* ------------------------------------------------------------------ *
172
+ * Base-rule handoffs: the type-aware extension version above replaces
173
+ * the syntax-only base rule, so turn the base one off to avoid double
174
+ * reports on the same line.
175
+ * ------------------------------------------------------------------ */
176
+ // Superseded by typescript/no-implied-eval.
177
+ 'eslint/no-implied-eval': 'off',
178
+ // Superseded by typescript/only-throw-error.
179
+ 'eslint/no-throw-literal': 'off',
180
+ // Superseded by typescript/prefer-promise-reject-errors.
181
+ 'eslint/prefer-promise-reject-errors': 'off',
182
+ // Superseded by typescript/prefer-find.
183
+ 'unicorn/prefer-array-find': 'off',
184
+ // Superseded by typescript/prefer-includes.
185
+ 'unicorn/prefer-includes': 'off',
186
+ // Superseded by typescript/prefer-string-starts-ends-with.
187
+ 'unicorn/prefer-string-starts-ends-with': 'off'
188
+ }
189
+ });
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Vitest add-on: every rule from oxlint's `vitest` plugin, decided explicitly.
3
+ * Opt in alongside base if your tests run under Vitest:
4
+ *
5
+ * ```ts
6
+ * export default defineConfig({ extends: [base, vitest] });
7
+ * ```
8
+ *
9
+ * These rules only fire on test-shaped syntax (describe/it/test/expect), so
10
+ * they are inert in app code; no `files` scoping needed.
11
+ *
12
+ * Known limitation: oxlint resolves test functions by import source (`vitest`,
13
+ * `@jest/globals`) or bare globals. `import { it } from 'bun:test'` is NOT
14
+ * recognized, so none of these rules fire on bun:test-style suites. Bun users
15
+ * get no coverage from this add-on until oxlint supports bun:test upstream.
16
+ */
17
+ declare const _default: {
18
+ plugins: "vitest"[];
19
+ rules: {
20
+ 'vitest/expect-expect': "error";
21
+ 'vitest/hoisted-apis-on-top': "error";
22
+ 'vitest/no-conditional-expect': "error";
23
+ 'vitest/no-conditional-tests': "error";
24
+ 'vitest/no-disabled-tests': "error";
25
+ 'vitest/no-focused-tests': "error";
26
+ 'vitest/no-standalone-expect': "error";
27
+ 'vitest/prefer-snapshot-hint': "error";
28
+ 'vitest/require-awaited-expect-poll': "error";
29
+ 'vitest/require-local-test-context-for-concurrent-snapshots': "error";
30
+ 'vitest/require-mock-type-parameters': "error";
31
+ 'vitest/require-to-throw-message': "error";
32
+ 'vitest/valid-describe-callback': "error";
33
+ 'vitest/valid-expect': "error";
34
+ 'vitest/valid-expect-in-promise': "error";
35
+ 'vitest/valid-title': "error";
36
+ 'vitest/warn-todo': "off";
37
+ 'vitest/no-commented-out-tests': "error";
38
+ 'vitest/no-conditional-in-test': "off";
39
+ 'vitest/consistent-each-for': "off";
40
+ 'vitest/consistent-test-filename': "off";
41
+ 'vitest/consistent-test-it': "error";
42
+ 'vitest/consistent-vitest-vi': "error";
43
+ 'vitest/max-expects': "off";
44
+ 'vitest/max-nested-describe': "off";
45
+ 'vitest/no-alias-methods': "error";
46
+ 'vitest/no-duplicate-hooks': "error";
47
+ 'vitest/no-hooks': "off";
48
+ 'vitest/no-identical-title': "error";
49
+ 'vitest/no-import-node-test': "error";
50
+ 'vitest/no-importing-vitest-globals': "off";
51
+ 'vitest/no-interpolation-in-snapshots': "error";
52
+ 'vitest/no-large-snapshots': "off";
53
+ 'vitest/no-mocks-import': "error";
54
+ 'vitest/no-restricted-matchers': "off";
55
+ 'vitest/no-restricted-vi-methods': "off";
56
+ 'vitest/no-test-prefixes': "error";
57
+ 'vitest/no-test-return-statement': "error";
58
+ 'vitest/no-unneeded-async-expect-function': "error";
59
+ 'vitest/padding-around-after-all-blocks': "off";
60
+ 'vitest/padding-around-test-blocks': "off";
61
+ 'vitest/prefer-called-exactly-once-with': "error";
62
+ 'vitest/prefer-called-once': "error";
63
+ 'vitest/prefer-called-times': "off";
64
+ 'vitest/prefer-called-with': "error";
65
+ 'vitest/prefer-comparison-matcher': "error";
66
+ 'vitest/prefer-describe-function-title': "error";
67
+ 'vitest/prefer-each': "error";
68
+ 'vitest/prefer-equality-matcher': "error";
69
+ 'vitest/prefer-expect-assertions': "off";
70
+ 'vitest/prefer-expect-resolves': "error";
71
+ 'vitest/prefer-expect-type-of': "error";
72
+ 'vitest/prefer-hooks-in-order': "error";
73
+ 'vitest/prefer-hooks-on-top': "error";
74
+ 'vitest/prefer-import-in-mock': "error";
75
+ 'vitest/prefer-importing-vitest-globals': "error";
76
+ 'vitest/prefer-lowercase-title': "off";
77
+ 'vitest/prefer-mock-promise-shorthand': "error";
78
+ 'vitest/prefer-mock-return-shorthand': "error";
79
+ 'vitest/prefer-spy-on': "error";
80
+ 'vitest/prefer-strict-boolean-matchers': "error";
81
+ 'vitest/prefer-strict-equal': "error";
82
+ 'vitest/prefer-to-be': "error";
83
+ 'vitest/prefer-to-be-falsy': "off";
84
+ 'vitest/prefer-to-be-object': "off";
85
+ 'vitest/prefer-to-be-truthy': "off";
86
+ 'vitest/prefer-to-contain': "error";
87
+ 'vitest/prefer-to-have-been-called-times': "error";
88
+ 'vitest/prefer-to-have-length': "error";
89
+ 'vitest/prefer-todo': "error";
90
+ 'vitest/require-hook': "off";
91
+ 'vitest/require-top-level-describe': "off";
92
+ 'vitest/require-test-timeout': "off";
93
+ };
94
+ };
95
+ export default _default;