@tb-dev/eslint-config 1.5.15 → 1.6.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.
package/dist/index.cjs CHANGED
@@ -1,946 +1,937 @@
1
- 'use strict';
2
-
3
- const eslintConfigPrettier = require('eslint-config-prettier');
4
- const globals = require('globals');
5
- const process = require('node:process');
6
-
7
- var Glob;
8
- (function (Glob) {
9
- Glob["ALL"] = "**/*.?([cm])[jt]s?(x)";
10
- Glob["JAVASCRIPT"] = "**/*.?([cm])js?(x)";
11
- Glob["TYPESCRIPT"] = "**/*.?([cm])ts?(x)";
12
- Glob["VITEST"] = "**/*.{test,spec}.[jt]s";
13
- Glob["VUE"] = "**/*.vue";
14
- })(Glob || (Glob = {}));
15
- var GlobIgnore;
16
- (function (GlobIgnore) {
17
- GlobIgnore["CACHE"] = "**/cache";
18
- GlobIgnore["DIST"] = "**/dist";
19
- GlobIgnore["LOG"] = "**/log?(s)";
20
- GlobIgnore["NODE_MODULES"] = "**/node_modules";
21
- GlobIgnore["OUT"] = "**/out";
22
- GlobIgnore["TARGET"] = "**/target";
23
- GlobIgnore["TEMP"] = "**/?(.)temp";
24
- })(GlobIgnore || (GlobIgnore = {}));
25
-
26
- /* eslint-disable @typescript-eslint/no-unsafe-return */
27
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
28
- /* eslint-disable @typescript-eslint/no-explicit-any */
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ const eslintConfigPrettier = require("eslint-config-prettier");
25
+ const globals = require("globals");
26
+ const process = require("node:process");
27
+ var Glob = /* @__PURE__ */ ((Glob2) => {
28
+ Glob2["ALL"] = "**/*.?([cm])[jt]s?(x)";
29
+ Glob2["JAVASCRIPT"] = "**/*.?([cm])js?(x)";
30
+ Glob2["TYPESCRIPT"] = "**/*.?([cm])ts?(x)";
31
+ Glob2["VITEST"] = "**/*.{test,spec}.[jt]s";
32
+ Glob2["VUE"] = "**/*.vue";
33
+ return Glob2;
34
+ })(Glob || {});
35
+ var GlobIgnore = /* @__PURE__ */ ((GlobIgnore2) => {
36
+ GlobIgnore2["CACHE"] = "**/cache";
37
+ GlobIgnore2["DIST"] = "**/dist";
38
+ GlobIgnore2["LOG"] = "**/log?(s)";
39
+ GlobIgnore2["NODE_MODULES"] = "**/node_modules";
40
+ GlobIgnore2["OUT"] = "**/out";
41
+ GlobIgnore2["TARGET"] = "**/target";
42
+ GlobIgnore2["TEMP"] = "**/?(.)temp";
43
+ return GlobIgnore2;
44
+ })(GlobIgnore || {});
29
45
  async function interopDefault(promise) {
30
- const result = await promise;
31
- return result.default ?? result;
46
+ const result = await promise;
47
+ return result.default ?? result;
32
48
  }
33
49
  function getIgnores() {
34
- return Object.values(GlobIgnore);
50
+ return Object.values(GlobIgnore);
35
51
  }
36
-
37
- /**
38
- * @see https://eslint.org/docs/latest/rules/
39
- */
40
52
  function javascript(options) {
41
- const { overrides } = options;
42
- const files = [Glob.ALL];
43
- if (options.vue)
44
- files.push(Glob.VUE);
45
- return {
46
- files,
47
- languageOptions: {
48
- ecmaVersion: 'latest',
49
- sourceType: 'module',
50
- globals: {
51
- ...globals.browser,
52
- ...globals.es2021,
53
- ...globals.node,
54
- document: 'readonly',
55
- window: 'readonly'
56
- }
57
- },
58
- rules: {
59
- 'accessor-pairs': ['error', { enforceForClassMembers: true, setWithoutGet: true }],
60
- 'array-callback-return': [
61
- 'error',
62
- {
63
- checkForEach: true,
64
- allowVoid: true
65
- }
66
- ],
67
- 'block-scoped-var': 'error',
68
- 'consistent-this': ['error', 'self'],
69
- 'default-case-last': 'error',
70
- eqeqeq: ['error', 'always'],
71
- 'for-direction': 'error',
72
- 'func-style': ['error', 'declaration', { allowArrowFunctions: true }],
73
- 'grouped-accessor-pairs': ['error', 'getBeforeSet'],
74
- 'guard-for-in': 'error',
75
- 'init-declarations': 'off',
76
- 'logical-assignment-operators': ['error', 'always', { enforceForIfStatements: true }],
77
- 'max-params': 'off',
78
- 'new-cap': ['error', { newIsCap: true, capIsNew: false, properties: true }],
79
- 'no-alert': 'error',
80
- 'no-async-promise-executor': 'error',
81
- 'no-caller': 'error',
82
- 'no-case-declarations': 'error',
83
- 'no-class-assign': 'error',
84
- 'no-compare-neg-zero': 'error',
85
- 'no-cond-assign': ['error', 'always'],
86
- 'no-constant-binary-expression': 'error',
87
- 'no-constant-condition': 'error',
88
- 'no-constructor-return': 'error',
89
- 'no-control-regex': 'error',
90
- 'no-debugger': 'error',
91
- 'no-delete-var': 'error',
92
- 'no-dupe-else-if': 'error',
93
- 'no-duplicate-case': 'error',
94
- 'no-duplicate-imports': ['error', { includeExports: false }],
95
- 'no-else-return': 'error',
96
- 'no-empty': ['error', { allowEmptyCatch: true }],
97
- 'no-empty-character-class': 'error',
98
- 'no-empty-pattern': 'error',
99
- 'no-empty-static-block': 'error',
100
- 'no-eval': 'error',
101
- 'no-ex-assign': 'error',
102
- 'no-extend-native': 'error',
103
- 'no-extra-bind': 'error',
104
- 'no-extra-boolean-cast': 'error',
105
- 'no-fallthrough': ['error', { allowEmptyCase: true }],
106
- 'no-global-assign': 'error',
107
- 'no-implicit-coercion': ['error', { disallowTemplateShorthand: true }],
108
- 'no-import-assign': 'error',
109
- 'no-inner-declarations': ['error', 'both'],
110
- 'no-invalid-regexp': 'error',
111
- 'no-irregular-whitespace': 'error',
112
- 'no-iterator': 'error',
113
- 'no-labels': ['error', { allowLoop: false, allowSwitch: false }],
114
- 'no-lone-blocks': 'error',
115
- 'no-lonely-if': 'error',
116
- 'no-misleading-character-class': 'error',
117
- 'no-multi-assign': 'error',
118
- 'no-multi-str': 'error',
119
- 'no-new': 'error',
120
- 'no-new-func': 'error',
121
- 'no-new-native-nonconstructor': 'error',
122
- 'no-new-wrappers': 'error',
123
- 'no-nonoctal-decimal-escape': 'error',
124
- 'no-object-constructor': 'error',
125
- 'no-octal': 'error',
126
- 'no-octal-escape': 'error',
127
- 'no-promise-executor-return': ['error', { allowVoid: true }],
128
- 'no-proto': 'error',
129
- 'no-prototype-builtins': 'error',
130
- 'no-regex-spaces': 'error',
131
- 'no-script-url': 'error',
132
- 'no-self-assign': 'error',
133
- 'no-self-compare': 'error',
134
- 'no-sequences': 'error',
135
- 'no-shadow-restricted-names': 'error',
136
- 'no-sparse-arrays': 'error',
137
- 'no-template-curly-in-string': 'error',
138
- 'no-undef-init': 'error',
139
- 'no-undefined': 'error',
140
- 'no-unexpected-multiline': 'error',
141
- 'no-unmodified-loop-condition': 'error',
142
- 'no-unneeded-ternary': ['error', { defaultAssignment: false }],
143
- 'no-unreachable-loop': 'error',
144
- 'no-unsafe-finally': 'error',
145
- 'no-unsafe-optional-chaining': ['error', { disallowArithmeticOperators: true }],
146
- 'no-unused-vars': 'off',
147
- 'no-useless-backreference': 'error',
148
- 'no-useless-call': 'error',
149
- 'no-useless-catch': 'error',
150
- 'no-useless-computed-key': 'error',
151
- 'no-useless-concat': 'error',
152
- 'no-useless-rename': 'error',
153
- 'no-useless-return': 'error',
154
- 'no-var': 'error',
155
- 'no-with': 'error',
156
- 'object-shorthand': ['error', 'always'],
157
- 'operator-assignment': ['error', 'always'],
158
- 'prefer-arrow-callback': 'error',
159
- 'prefer-const': [
160
- 'error',
161
- {
162
- destructuring: 'all',
163
- ignoreReadBeforeAssign: true
164
- }
165
- ],
166
- 'prefer-destructuring': 'off',
167
- 'prefer-exponentiation-operator': 'error',
168
- 'prefer-object-has-own': 'error',
169
- 'prefer-object-spread': 'error',
170
- 'prefer-promise-reject-errors': 'error',
171
- 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],
172
- 'prefer-rest-params': 'error',
173
- 'prefer-spread': 'error',
174
- 'prefer-template': 'error',
175
- 'require-atomic-updates': 'error',
176
- 'sort-imports': [
177
- 'error',
178
- {
179
- allowSeparatedGroups: false,
180
- ignoreCase: false,
181
- ignoreDeclarationSort: true,
182
- ignoreMemberSort: false,
183
- memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single']
184
- }
185
- ],
186
- 'symbol-description': 'error',
187
- 'use-isnan': 'error',
188
- 'valid-typeof': 'error',
189
- yoda: ['error', 'never'],
190
- ...overrides?.javascript
53
+ const { overrides } = options;
54
+ const files = [Glob.ALL];
55
+ if (options.vue)
56
+ files.push(Glob.VUE);
57
+ return {
58
+ files,
59
+ languageOptions: {
60
+ ecmaVersion: "latest",
61
+ sourceType: "module",
62
+ globals: {
63
+ ...globals.browser,
64
+ ...globals.es2021,
65
+ ...globals.node,
66
+ document: "readonly",
67
+ window: "readonly"
68
+ }
69
+ },
70
+ rules: {
71
+ "accessor-pairs": ["error", { enforceForClassMembers: true, setWithoutGet: true }],
72
+ "array-callback-return": [
73
+ "error",
74
+ {
75
+ checkForEach: true,
76
+ allowVoid: true
77
+ }
78
+ ],
79
+ "block-scoped-var": "error",
80
+ "consistent-this": ["error", "self"],
81
+ "default-case-last": "error",
82
+ eqeqeq: ["error", "always"],
83
+ "for-direction": "error",
84
+ "func-style": ["error", "declaration", { allowArrowFunctions: true }],
85
+ "grouped-accessor-pairs": ["error", "getBeforeSet"],
86
+ "guard-for-in": "error",
87
+ "init-declarations": "off",
88
+ "logical-assignment-operators": ["error", "always", { enforceForIfStatements: true }],
89
+ "max-params": "off",
90
+ "new-cap": ["error", { newIsCap: true, capIsNew: false, properties: true }],
91
+ "no-alert": "error",
92
+ "no-async-promise-executor": "error",
93
+ "no-caller": "error",
94
+ "no-case-declarations": "error",
95
+ "no-class-assign": "error",
96
+ "no-compare-neg-zero": "error",
97
+ "no-cond-assign": ["error", "always"],
98
+ "no-constant-binary-expression": "error",
99
+ "no-constant-condition": "error",
100
+ "no-constructor-return": "error",
101
+ "no-control-regex": "error",
102
+ "no-debugger": "error",
103
+ "no-delete-var": "error",
104
+ "no-dupe-else-if": "error",
105
+ "no-duplicate-case": "error",
106
+ "no-duplicate-imports": ["error", { includeExports: false }],
107
+ "no-else-return": "error",
108
+ "no-empty": ["error", { allowEmptyCatch: true }],
109
+ "no-empty-character-class": "error",
110
+ "no-empty-pattern": "error",
111
+ "no-empty-static-block": "error",
112
+ "no-eval": "error",
113
+ "no-ex-assign": "error",
114
+ "no-extend-native": "error",
115
+ "no-extra-bind": "error",
116
+ "no-extra-boolean-cast": "error",
117
+ "no-fallthrough": ["error", { allowEmptyCase: true }],
118
+ "no-global-assign": "error",
119
+ "no-implicit-coercion": ["error", { disallowTemplateShorthand: true }],
120
+ "no-import-assign": "error",
121
+ "no-inner-declarations": ["error", "both"],
122
+ "no-invalid-regexp": "error",
123
+ "no-irregular-whitespace": "error",
124
+ "no-iterator": "error",
125
+ "no-labels": ["error", { allowLoop: false, allowSwitch: false }],
126
+ "no-lone-blocks": "error",
127
+ "no-lonely-if": "error",
128
+ "no-misleading-character-class": "error",
129
+ "no-multi-assign": "error",
130
+ "no-multi-str": "error",
131
+ "no-new": "error",
132
+ "no-new-func": "error",
133
+ "no-new-native-nonconstructor": "error",
134
+ "no-new-wrappers": "error",
135
+ "no-nonoctal-decimal-escape": "error",
136
+ "no-object-constructor": "error",
137
+ "no-octal": "error",
138
+ "no-octal-escape": "error",
139
+ "no-promise-executor-return": ["error", { allowVoid: true }],
140
+ "no-proto": "error",
141
+ "no-prototype-builtins": "error",
142
+ "no-regex-spaces": "error",
143
+ "no-script-url": "error",
144
+ "no-self-assign": "error",
145
+ "no-self-compare": "error",
146
+ "no-sequences": "error",
147
+ "no-shadow-restricted-names": "error",
148
+ "no-sparse-arrays": "error",
149
+ "no-template-curly-in-string": "error",
150
+ "no-undef-init": "error",
151
+ "no-undefined": "error",
152
+ "no-unexpected-multiline": "error",
153
+ "no-unmodified-loop-condition": "error",
154
+ "no-unneeded-ternary": ["error", { defaultAssignment: false }],
155
+ "no-unreachable-loop": "error",
156
+ "no-unsafe-finally": "error",
157
+ "no-unsafe-optional-chaining": ["error", { disallowArithmeticOperators: true }],
158
+ "no-unused-vars": "off",
159
+ "no-useless-backreference": "error",
160
+ "no-useless-call": "error",
161
+ "no-useless-catch": "error",
162
+ "no-useless-computed-key": "error",
163
+ "no-useless-concat": "error",
164
+ "no-useless-rename": "error",
165
+ "no-useless-return": "error",
166
+ "no-var": "error",
167
+ "no-with": "error",
168
+ "object-shorthand": ["error", "always"],
169
+ "operator-assignment": ["error", "always"],
170
+ "prefer-arrow-callback": "error",
171
+ "prefer-const": [
172
+ "error",
173
+ {
174
+ destructuring: "all",
175
+ ignoreReadBeforeAssign: true
176
+ }
177
+ ],
178
+ "prefer-destructuring": "off",
179
+ "prefer-exponentiation-operator": "error",
180
+ "prefer-object-has-own": "error",
181
+ "prefer-object-spread": "error",
182
+ "prefer-regex-literals": ["error", { disallowRedundantWrapping: true }],
183
+ "prefer-rest-params": "error",
184
+ "prefer-spread": "error",
185
+ "prefer-template": "error",
186
+ "require-atomic-updates": "error",
187
+ "sort-imports": [
188
+ "error",
189
+ {
190
+ allowSeparatedGroups: false,
191
+ ignoreCase: false,
192
+ ignoreDeclarationSort: true,
193
+ ignoreMemberSort: false,
194
+ memberSyntaxSortOrder: ["none", "all", "multiple", "single"]
191
195
  }
192
- };
196
+ ],
197
+ "symbol-description": "error",
198
+ "use-isnan": "error",
199
+ "valid-typeof": "error",
200
+ yoda: ["error", "never"],
201
+ ...overrides == null ? void 0 : overrides.javascript
202
+ }
203
+ };
193
204
  }
194
-
195
- /**
196
- * @see https://eslint-plugin-perfectionist.azat.io/rules/
197
- */
198
205
  async function perfectionist(options) {
199
- const { overrides, perfectionist: enabled = true } = options;
200
- if (!enabled)
201
- return {};
202
- const plugin = await interopDefault(import('eslint-plugin-perfectionist'));
203
- return {
204
- plugins: {
205
- perfectionist: plugin
206
- },
207
- rules: {
208
- 'perfectionist/sort-classes': [
209
- 'error',
210
- {
211
- type: 'natural',
212
- order: 'asc',
213
- groups: [
214
- 'index-signature',
215
- 'property',
216
- 'private-property',
217
- 'constructor',
218
- 'method',
219
- 'private-method',
220
- ['get-method', 'set-method'],
221
- 'static-property',
222
- 'static-method',
223
- 'static-private-method',
224
- 'unknown'
225
- ]
226
- }
227
- ],
228
- 'perfectionist/sort-enums': [
229
- 'error',
230
- {
231
- type: 'natural',
232
- order: 'asc'
233
- }
234
- ],
235
- 'perfectionist/sort-exports': [
236
- 'error',
237
- {
238
- type: 'line-length',
239
- order: 'asc'
240
- }
241
- ],
242
- 'perfectionist/sort-imports': [
243
- 'error',
244
- {
245
- type: 'line-length',
246
- order: 'asc',
247
- 'newlines-between': 'never',
248
- groups: [
249
- ['style', 'side-effect'],
250
- ['builtin', 'builtin-type'],
251
- ['external', 'external-type'],
252
- ['internal', 'internal-type'],
253
- 'unknown'
254
- ]
255
- }
256
- ],
257
- 'perfectionist/sort-interfaces': [
258
- 'error',
259
- {
260
- type: 'natural',
261
- order: 'asc',
262
- 'partition-by-new-line': true
263
- }
264
- ],
265
- 'perfectionist/sort-maps': [
266
- 'error',
267
- {
268
- type: 'natural',
269
- order: 'asc'
270
- }
271
- ],
272
- 'perfectionist/sort-named-exports': [
273
- 'error',
274
- {
275
- type: 'natural',
276
- order: 'asc'
277
- }
278
- ],
279
- 'sort-imports': 'off',
280
- 'perfectionist/sort-named-imports': [
281
- 'error',
282
- {
283
- type: 'natural',
284
- order: 'asc'
285
- }
286
- ],
287
- '@typescript-eslint/adjacent-overload-signatures': 'off',
288
- 'perfectionist/sort-object-types': [
289
- 'error',
290
- {
291
- type: 'natural',
292
- order: 'asc',
293
- 'partition-by-new-line': true
294
- }
295
- ],
296
- ...overrides?.perfectionist
206
+ const { overrides, perfectionist: enabled = true } = options;
207
+ if (!enabled)
208
+ return {};
209
+ const plugin = await interopDefault(import("eslint-plugin-perfectionist"));
210
+ return {
211
+ plugins: {
212
+ perfectionist: plugin
213
+ },
214
+ rules: {
215
+ "perfectionist/sort-classes": [
216
+ "error",
217
+ {
218
+ type: "natural",
219
+ order: "asc",
220
+ groups: [
221
+ "index-signature",
222
+ "property",
223
+ "private-property",
224
+ "constructor",
225
+ "method",
226
+ "private-method",
227
+ ["get-method", "set-method"],
228
+ "static-property",
229
+ "static-method",
230
+ "static-private-method",
231
+ "unknown"
232
+ ]
233
+ }
234
+ ],
235
+ "perfectionist/sort-enums": [
236
+ "error",
237
+ {
238
+ type: "natural",
239
+ order: "asc"
240
+ }
241
+ ],
242
+ "perfectionist/sort-exports": [
243
+ "error",
244
+ {
245
+ type: "line-length",
246
+ order: "asc"
247
+ }
248
+ ],
249
+ "perfectionist/sort-imports": [
250
+ "error",
251
+ {
252
+ type: "line-length",
253
+ order: "asc",
254
+ "newlines-between": "never",
255
+ groups: [
256
+ ["style", "side-effect"],
257
+ ["builtin", "builtin-type"],
258
+ ["external", "external-type"],
259
+ ["internal", "internal-type"],
260
+ "unknown"
261
+ ]
262
+ }
263
+ ],
264
+ "perfectionist/sort-interfaces": [
265
+ "error",
266
+ {
267
+ type: "natural",
268
+ order: "asc",
269
+ "partition-by-new-line": true
270
+ }
271
+ ],
272
+ "perfectionist/sort-maps": [
273
+ "error",
274
+ {
275
+ type: "natural",
276
+ order: "asc"
277
+ }
278
+ ],
279
+ "perfectionist/sort-named-exports": [
280
+ "error",
281
+ {
282
+ type: "natural",
283
+ order: "asc"
284
+ }
285
+ ],
286
+ "sort-imports": "off",
287
+ "perfectionist/sort-named-imports": [
288
+ "error",
289
+ {
290
+ type: "natural",
291
+ order: "asc"
297
292
  }
298
- };
293
+ ],
294
+ "@typescript-eslint/adjacent-overload-signatures": "off",
295
+ "perfectionist/sort-object-types": [
296
+ "error",
297
+ {
298
+ type: "natural",
299
+ order: "asc",
300
+ "partition-by-new-line": true
301
+ }
302
+ ],
303
+ ...overrides == null ? void 0 : overrides.perfectionist
304
+ }
305
+ };
299
306
  }
300
-
301
- /**
302
- * @see https://typescript-eslint.io/rules/
303
- */
304
307
  async function typescript(options) {
305
- const { project, overrides } = options;
306
- const [tsParser, tsPlugin] = await Promise.all([
307
- await interopDefault(import('@typescript-eslint/parser')),
308
- await interopDefault(import('@typescript-eslint/eslint-plugin'))
309
- ]);
310
- const files = [Glob.TYPESCRIPT];
311
- if (options.vue)
312
- files.push(Glob.VUE);
313
- const rules = {
314
- '@typescript-eslint/adjacent-overload-signatures': 'error',
315
- 'no-array-constructor': 'off',
316
- '@typescript-eslint/no-array-constructor': 'error',
317
- '@typescript-eslint/array-type': ['error', { default: 'array' }],
318
- '@typescript-eslint/ban-ts-comment': [
319
- 'error',
320
- {
321
- 'ts-expect-error': 'allow-with-description',
322
- 'ts-ignore': true,
323
- 'ts-nocheck': true,
324
- 'ts-check': false,
325
- minimumDescriptionLength: 3
326
- }
327
- ],
328
- '@typescript-eslint/class-literal-property-style': ['error', 'fields'],
329
- 'class-methods-use-this': 'off',
330
- '@typescript-eslint/class-methods-use-this': [
331
- 'error',
332
- {
333
- ignoreOverrideMethods: true,
334
- ignoreClassesThatImplementAnInterface: 'public-fields'
335
- }
336
- ],
337
- '@typescript-eslint/consistent-generic-constructors': ['error', 'constructor'],
338
- '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'],
339
- '@typescript-eslint/consistent-type-assertions': [
340
- 'error',
341
- { assertionStyle: 'as', objectLiteralTypeAssertions: 'allow-as-parameter' }
342
- ],
343
- '@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
344
- 'dot-notation': 'off',
345
- '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }],
346
- '@typescript-eslint/explicit-function-return-type': 'off',
347
- '@typescript-eslint/explicit-member-accessibility': [
348
- 'error',
349
- {
350
- accessibility: 'explicit',
351
- overrides: {
352
- accessors: 'no-public',
353
- constructors: 'no-public',
354
- methods: 'explicit',
355
- properties: 'explicit',
356
- parameterProperties: 'explicit'
357
- }
358
- }
359
- ],
360
- '@typescript-eslint/explicit-module-boundary-types': 'off',
361
- '@typescript-eslint/method-signature-style': ['error', 'property'],
362
- '@typescript-eslint/no-base-to-string': 'error',
363
- '@typescript-eslint/no-confusing-non-null-assertion': 'error',
364
- '@typescript-eslint/no-confusing-void-expression': [
365
- 'error',
366
- {
367
- ignoreArrowShorthand: true,
368
- ignoreVoidOperator: true
369
- }
370
- ],
371
- '@typescript-eslint/no-duplicate-enum-values': 'error',
372
- '@typescript-eslint/no-duplicate-type-constituents': 'error',
373
- '@typescript-eslint/no-dynamic-delete': 'error',
374
- 'no-empty-function': 'off',
375
- '@typescript-eslint/no-empty-function': 'error',
376
- '@typescript-eslint/no-empty-interface': 'error',
377
- '@typescript-eslint/no-explicit-any': ['error', { fixToUnknown: true }],
378
- '@typescript-eslint/no-extra-non-null-assertion': 'error',
379
- '@typescript-eslint/no-extraneous-class': 'error',
380
- '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }],
381
- '@typescript-eslint/no-for-in-array': 'error',
382
- 'no-implied-eval': 'off',
383
- '@typescript-eslint/no-implied-eval': 'error',
384
- '@typescript-eslint/no-import-type-side-effects': 'error',
385
- '@typescript-eslint/no-inferrable-types': 'error',
386
- '@typescript-eslint/no-invalid-void-type': [
387
- 'error',
388
- {
389
- allowInGenericTypeArguments: true,
390
- allowAsThisParameter: true
391
- }
392
- ],
393
- 'no-loop-func': 'off',
394
- '@typescript-eslint/no-loop-func': 'error',
395
- 'no-loss-of-precision': 'off',
396
- '@typescript-eslint/no-loss-of-precision': 'error',
397
- '@typescript-eslint/no-meaningless-void-operator': 'error',
398
- '@typescript-eslint/no-misused-new': 'error',
399
- '@typescript-eslint/no-misused-promises': [
400
- 'error',
401
- {
402
- checksConditionals: true,
403
- checksSpreads: true,
404
- checksVoidReturn: {
405
- arguments: true,
406
- attributes: true,
407
- properties: true,
408
- returns: true,
409
- variables: true
410
- }
411
- }
412
- ],
413
- '@typescript-eslint/no-mixed-enums': 'error',
414
- '@typescript-eslint/no-namespace': 'error',
415
- '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',
416
- '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
417
- '@typescript-eslint/no-non-null-assertion': 'error',
418
- '@typescript-eslint/no-redundant-type-constituents': 'off',
419
- '@typescript-eslint/no-require-imports': 'error',
420
- 'no-shadow': 'off',
421
- '@typescript-eslint/no-shadow': 'error',
422
- '@typescript-eslint/no-this-alias': 'error',
423
- 'no-throw-literal': 'off',
424
- '@typescript-eslint/no-throw-literal': 'error',
425
- '@typescript-eslint/no-unnecessary-boolean-literal-compare': [
426
- 'error',
427
- {
428
- allowComparingNullableBooleansToTrue: false,
429
- allowComparingNullableBooleansToFalse: true
430
- }
431
- ],
432
- '@typescript-eslint/no-unnecessary-condition': 'error',
433
- '@typescript-eslint/no-unnecessary-qualifier': 'error',
434
- '@typescript-eslint/no-unnecessary-type-arguments': 'error',
435
- '@typescript-eslint/no-unnecessary-type-assertion': 'error',
436
- '@typescript-eslint/no-unnecessary-type-constraint': 'error',
437
- '@typescript-eslint/no-unsafe-argument': 'off',
438
- '@typescript-eslint/no-unsafe-assignment': 'off',
439
- '@typescript-eslint/no-unsafe-call': 'error',
440
- '@typescript-eslint/no-unsafe-declaration-merging': 'error',
441
- '@typescript-eslint/no-unsafe-enum-comparison': 'off',
442
- '@typescript-eslint/no-unsafe-member-access': 'error',
443
- '@typescript-eslint/no-unsafe-return': 'off',
444
- '@typescript-eslint/no-unsafe-unary-minus': 'error',
445
- 'no-unused-expressions': 'off',
446
- '@typescript-eslint/no-unused-expressions': [
447
- 'error',
448
- {
449
- allowTaggedTemplates: true
450
- }
451
- ],
452
- 'no-use-before-define': 'off',
453
- '@typescript-eslint/no-use-before-define': [
454
- 'error',
455
- {
456
- functions: false,
457
- enums: true,
458
- typedefs: false
459
- }
460
- ],
461
- 'no-useless-constructor': 'off',
462
- '@typescript-eslint/no-useless-constructor': 'error',
463
- '@typescript-eslint/no-useless-empty-export': 'error',
464
- '@typescript-eslint/non-nullable-type-assertion-style': 'error',
465
- '@typescript-eslint/prefer-as-const': 'error',
466
- '@typescript-eslint/prefer-enum-initializers': 'error',
467
- '@typescript-eslint/prefer-for-of': 'error',
468
- '@typescript-eslint/prefer-function-type': 'error',
469
- '@typescript-eslint/prefer-includes': 'error',
470
- '@typescript-eslint/prefer-literal-enum-member': 'error',
471
- '@typescript-eslint/prefer-nullish-coalescing': [
472
- 'error',
473
- {
474
- ignoreTernaryTests: false,
475
- ignoreConditionalTests: false,
476
- ignoreMixedLogicalExpressions: false,
477
- ignorePrimitives: {
478
- bigint: false,
479
- boolean: false,
480
- number: false,
481
- string: false
482
- }
483
- }
484
- ],
485
- '@typescript-eslint/prefer-optional-chain': 'error',
486
- '@typescript-eslint/prefer-readonly': 'error',
487
- '@typescript-eslint/prefer-readonly-parameter-types': 'off',
488
- '@typescript-eslint/prefer-reduce-type-parameter': 'error',
489
- '@typescript-eslint/prefer-regexp-exec': 'error',
490
- '@typescript-eslint/prefer-return-this-type': 'error',
491
- '@typescript-eslint/prefer-string-starts-ends-with': 'error',
492
- '@typescript-eslint/prefer-ts-expect-error': 'error',
493
- '@typescript-eslint/promise-function-async': 'off',
494
- '@typescript-eslint/require-array-sort-compare': 'error',
495
- 'require-await': 'off',
496
- '@typescript-eslint/require-await': 'error',
497
- '@typescript-eslint/restrict-plus-operands': 'error',
498
- '@typescript-eslint/restrict-template-expressions': 'error',
499
- '@typescript-eslint/strict-boolean-expressions': 'off',
500
- '@typescript-eslint/switch-exhaustiveness-check': [
501
- 'error',
502
- {
503
- requireDefaultForNonUnion: true
504
- }
505
- ],
506
- '@typescript-eslint/unbound-method': 'error',
507
- '@typescript-eslint/unified-signatures': [
508
- 'error',
509
- {
510
- ignoreDifferentlyNamedParameters: true
511
- }
512
- ],
513
- ...overrides?.typescript
514
- };
515
- return {
516
- files,
517
- languageOptions: {
518
- ecmaVersion: 'latest',
519
- sourceType: 'module',
520
- parser: tsParser,
521
- parserOptions: {
522
- project,
523
- tsconfigRootDir: process.cwd(),
524
- extraFileExtensions: options.vue ? ['.vue'] : []
525
- }
526
- },
527
- plugins: {
528
- '@typescript-eslint': tsPlugin
529
- },
530
- rules
531
- };
308
+ const { project, overrides } = options;
309
+ const [tsParser, tsPlugin] = await Promise.all([
310
+ await interopDefault(import("@typescript-eslint/parser")),
311
+ await interopDefault(import("@typescript-eslint/eslint-plugin"))
312
+ ]);
313
+ const files = [Glob.TYPESCRIPT];
314
+ if (options.vue)
315
+ files.push(Glob.VUE);
316
+ const rules = {
317
+ "@typescript-eslint/adjacent-overload-signatures": "error",
318
+ "no-array-constructor": "off",
319
+ "@typescript-eslint/no-array-constructor": "error",
320
+ "@typescript-eslint/array-type": ["error", { default: "array" }],
321
+ "@typescript-eslint/ban-ts-comment": [
322
+ "error",
323
+ {
324
+ "ts-expect-error": "allow-with-description",
325
+ "ts-ignore": true,
326
+ "ts-nocheck": true,
327
+ "ts-check": false,
328
+ minimumDescriptionLength: 3
329
+ }
330
+ ],
331
+ "@typescript-eslint/class-literal-property-style": ["error", "fields"],
332
+ "class-methods-use-this": "off",
333
+ "@typescript-eslint/class-methods-use-this": [
334
+ "error",
335
+ {
336
+ ignoreOverrideMethods: true,
337
+ ignoreClassesThatImplementAnInterface: "public-fields"
338
+ }
339
+ ],
340
+ "@typescript-eslint/consistent-generic-constructors": ["error", "constructor"],
341
+ "@typescript-eslint/consistent-indexed-object-style": ["error", "record"],
342
+ "@typescript-eslint/consistent-type-assertions": [
343
+ "error",
344
+ { assertionStyle: "as", objectLiteralTypeAssertions: "allow-as-parameter" }
345
+ ],
346
+ "@typescript-eslint/consistent-type-definitions": ["error", "interface"],
347
+ "dot-notation": "off",
348
+ "@typescript-eslint/dot-notation": ["error", { allowKeywords: true }],
349
+ "@typescript-eslint/explicit-function-return-type": "off",
350
+ "@typescript-eslint/explicit-member-accessibility": [
351
+ "error",
352
+ {
353
+ accessibility: "explicit",
354
+ overrides: {
355
+ accessors: "no-public",
356
+ constructors: "no-public",
357
+ methods: "explicit",
358
+ properties: "explicit",
359
+ parameterProperties: "explicit"
360
+ }
361
+ }
362
+ ],
363
+ "@typescript-eslint/explicit-module-boundary-types": "off",
364
+ "@typescript-eslint/method-signature-style": ["error", "property"],
365
+ "@typescript-eslint/no-array-delete": "error",
366
+ "@typescript-eslint/no-base-to-string": "error",
367
+ "@typescript-eslint/no-confusing-non-null-assertion": "error",
368
+ "@typescript-eslint/no-confusing-void-expression": [
369
+ "error",
370
+ {
371
+ ignoreArrowShorthand: true,
372
+ ignoreVoidOperator: true
373
+ }
374
+ ],
375
+ "@typescript-eslint/no-duplicate-enum-values": "error",
376
+ "@typescript-eslint/no-duplicate-type-constituents": "error",
377
+ "@typescript-eslint/no-dynamic-delete": "error",
378
+ "no-empty-function": "off",
379
+ "@typescript-eslint/no-empty-function": "error",
380
+ "@typescript-eslint/no-empty-interface": "error",
381
+ "@typescript-eslint/no-explicit-any": ["error", { fixToUnknown: true }],
382
+ "@typescript-eslint/no-extra-non-null-assertion": "error",
383
+ "@typescript-eslint/no-extraneous-class": "error",
384
+ "@typescript-eslint/no-floating-promises": ["error", { ignoreVoid: true }],
385
+ "@typescript-eslint/no-for-in-array": "error",
386
+ "no-implied-eval": "off",
387
+ "@typescript-eslint/no-implied-eval": "error",
388
+ "@typescript-eslint/no-import-type-side-effects": "error",
389
+ "@typescript-eslint/no-inferrable-types": "error",
390
+ "@typescript-eslint/no-invalid-void-type": [
391
+ "error",
392
+ {
393
+ allowInGenericTypeArguments: true,
394
+ allowAsThisParameter: true
395
+ }
396
+ ],
397
+ "no-loop-func": "off",
398
+ "@typescript-eslint/no-loop-func": "error",
399
+ "no-loss-of-precision": "off",
400
+ "@typescript-eslint/no-loss-of-precision": "error",
401
+ "@typescript-eslint/no-meaningless-void-operator": "error",
402
+ "@typescript-eslint/no-misused-new": "error",
403
+ "@typescript-eslint/no-misused-promises": [
404
+ "error",
405
+ {
406
+ checksConditionals: true,
407
+ checksSpreads: true,
408
+ checksVoidReturn: {
409
+ arguments: true,
410
+ attributes: true,
411
+ properties: true,
412
+ returns: true,
413
+ variables: true
414
+ }
415
+ }
416
+ ],
417
+ "@typescript-eslint/no-mixed-enums": "error",
418
+ "@typescript-eslint/no-namespace": "error",
419
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
420
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
421
+ "@typescript-eslint/no-non-null-assertion": "error",
422
+ "@typescript-eslint/no-redundant-type-constituents": "off",
423
+ "@typescript-eslint/no-require-imports": "error",
424
+ "no-shadow": "off",
425
+ "@typescript-eslint/no-shadow": "error",
426
+ "@typescript-eslint/no-this-alias": "error",
427
+ "no-throw-literal": "off",
428
+ "@typescript-eslint/no-throw-literal": "error",
429
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": [
430
+ "error",
431
+ {
432
+ allowComparingNullableBooleansToTrue: false,
433
+ allowComparingNullableBooleansToFalse: true
434
+ }
435
+ ],
436
+ "@typescript-eslint/no-unnecessary-condition": "error",
437
+ "@typescript-eslint/no-unnecessary-qualifier": "error",
438
+ "@typescript-eslint/no-unnecessary-type-arguments": "error",
439
+ "@typescript-eslint/no-unnecessary-type-assertion": "error",
440
+ "@typescript-eslint/no-unnecessary-type-constraint": "error",
441
+ "@typescript-eslint/no-unsafe-argument": "off",
442
+ "@typescript-eslint/no-unsafe-assignment": "off",
443
+ "@typescript-eslint/no-unsafe-call": "error",
444
+ "@typescript-eslint/no-unsafe-declaration-merging": "error",
445
+ "@typescript-eslint/no-unsafe-enum-comparison": "off",
446
+ "@typescript-eslint/no-unsafe-member-access": "error",
447
+ "@typescript-eslint/no-unsafe-return": "off",
448
+ "@typescript-eslint/no-unsafe-unary-minus": "error",
449
+ "no-unused-expressions": "off",
450
+ "@typescript-eslint/no-unused-expressions": [
451
+ "error",
452
+ {
453
+ allowTaggedTemplates: true
454
+ }
455
+ ],
456
+ "no-use-before-define": "off",
457
+ "@typescript-eslint/no-use-before-define": [
458
+ "error",
459
+ {
460
+ functions: false,
461
+ enums: true,
462
+ typedefs: false
463
+ }
464
+ ],
465
+ "no-useless-constructor": "off",
466
+ "@typescript-eslint/no-useless-constructor": "error",
467
+ "@typescript-eslint/no-useless-empty-export": "error",
468
+ "@typescript-eslint/no-useless-template-literals": "error",
469
+ "@typescript-eslint/non-nullable-type-assertion-style": "error",
470
+ "@typescript-eslint/prefer-as-const": "error",
471
+ "@typescript-eslint/prefer-enum-initializers": "error",
472
+ "@typescript-eslint/prefer-for-of": "error",
473
+ "@typescript-eslint/prefer-function-type": "error",
474
+ "@typescript-eslint/prefer-includes": "error",
475
+ "@typescript-eslint/prefer-literal-enum-member": "error",
476
+ "@typescript-eslint/prefer-nullish-coalescing": [
477
+ "error",
478
+ {
479
+ ignoreTernaryTests: false,
480
+ ignoreConditionalTests: false,
481
+ ignoreMixedLogicalExpressions: false,
482
+ ignorePrimitives: {
483
+ bigint: false,
484
+ boolean: false,
485
+ number: false,
486
+ string: false
487
+ }
488
+ }
489
+ ],
490
+ "@typescript-eslint/prefer-optional-chain": "error",
491
+ "prefer-promise-reject-errors": "off",
492
+ "@typescript-eslint/prefer-promise-reject-errors": "error",
493
+ "@typescript-eslint/prefer-readonly": "error",
494
+ "@typescript-eslint/prefer-readonly-parameter-types": "off",
495
+ "@typescript-eslint/prefer-reduce-type-parameter": "error",
496
+ "@typescript-eslint/prefer-regexp-exec": "error",
497
+ "@typescript-eslint/prefer-return-this-type": "error",
498
+ "@typescript-eslint/prefer-string-starts-ends-with": "error",
499
+ "@typescript-eslint/prefer-ts-expect-error": "error",
500
+ "@typescript-eslint/promise-function-async": "off",
501
+ "@typescript-eslint/require-array-sort-compare": "error",
502
+ "require-await": "off",
503
+ "@typescript-eslint/require-await": "error",
504
+ "@typescript-eslint/restrict-plus-operands": "error",
505
+ "@typescript-eslint/restrict-template-expressions": "error",
506
+ "@typescript-eslint/strict-boolean-expressions": "off",
507
+ "@typescript-eslint/switch-exhaustiveness-check": [
508
+ "error",
509
+ {
510
+ requireDefaultForNonUnion: true
511
+ }
512
+ ],
513
+ "@typescript-eslint/unbound-method": "error",
514
+ "@typescript-eslint/unified-signatures": [
515
+ "error",
516
+ {
517
+ ignoreDifferentlyNamedParameters: true
518
+ }
519
+ ],
520
+ ...overrides == null ? void 0 : overrides.typescript
521
+ };
522
+ return {
523
+ files,
524
+ languageOptions: {
525
+ ecmaVersion: "latest",
526
+ sourceType: "module",
527
+ parser: tsParser,
528
+ parserOptions: {
529
+ project,
530
+ tsconfigRootDir: process.cwd(),
531
+ extraFileExtensions: options.vue ? [".vue"] : []
532
+ }
533
+ },
534
+ plugins: {
535
+ "@typescript-eslint": tsPlugin
536
+ },
537
+ rules
538
+ };
532
539
  }
533
-
534
- /**
535
- * @see https://github.com/sindresorhus/eslint-plugin-unicorn#rules
536
- */
537
540
  async function unicorn(options) {
538
- const { overrides, unicorn: enabled = true } = options;
539
- if (!enabled)
540
- return {};
541
- const plugin = await interopDefault(import('eslint-plugin-unicorn'));
542
- return {
543
- plugins: {
544
- unicorn: plugin
545
- },
546
- rules: {
547
- 'unicorn/catch-error-name': [
548
- 'error',
549
- {
550
- name: 'err'
551
- }
552
- ],
553
- 'unicorn/consistent-function-scoping': [
554
- 'error',
555
- {
556
- checkArrowFunctions: true
557
- }
558
- ],
559
- 'unicorn/custom-error-definition': 'error',
560
- 'unicorn/error-message': 'error',
561
- 'unicorn/no-array-for-each': 'error',
562
- 'unicorn/no-array-method-this-argument': 'error',
563
- 'unicorn/no-array-push-push': 'error',
564
- 'unicorn/no-await-expression-member': 'error',
565
- 'unicorn/no-invalid-remove-event-listener': 'error',
566
- 'unicorn/no-thenable': 'error',
567
- 'unicorn/no-typeof-undefined': 'off',
568
- 'unicorn/no-useless-fallback-in-spread': 'error',
569
- 'unicorn/no-useless-length-check': 'error',
570
- 'unicorn/no-useless-promise-resolve-reject': 'error',
571
- 'unicorn/prefer-at': 'error',
572
- 'unicorn/prefer-date-now': 'error',
573
- 'unicorn/prefer-dom-node-append': 'error',
574
- 'unicorn/prefer-dom-node-dataset': 'error',
575
- 'unicorn/prefer-dom-node-remove': 'error',
576
- 'unicorn/prefer-dom-node-text-content': 'error',
577
- 'unicorn/prefer-modern-dom-apis': 'error',
578
- 'unicorn/prefer-node-protocol': 'error',
579
- 'unicorn/prefer-number-properties': 'error',
580
- 'unicorn/prefer-object-from-entries': 'error',
581
- 'unicorn/prefer-prototype-methods': 'error',
582
- 'unicorn/prefer-query-selector': 'error',
583
- 'unicorn/prefer-reflect-apply': 'error',
584
- 'unicorn/prefer-regexp-test': 'error',
585
- 'unicorn/prefer-string-slice': 'error',
586
- 'unicorn/prefer-type-error': 'error',
587
- 'unicorn/relative-url-style': ['error', 'never'],
588
- ...overrides?.unicorn
541
+ const { overrides, unicorn: enabled = true } = options;
542
+ if (!enabled)
543
+ return {};
544
+ const plugin = await interopDefault(import("eslint-plugin-unicorn"));
545
+ return {
546
+ plugins: {
547
+ unicorn: plugin
548
+ },
549
+ rules: {
550
+ "unicorn/catch-error-name": [
551
+ "error",
552
+ {
553
+ name: "err"
554
+ }
555
+ ],
556
+ "unicorn/consistent-function-scoping": [
557
+ "error",
558
+ {
559
+ checkArrowFunctions: true
589
560
  }
590
- };
561
+ ],
562
+ "unicorn/custom-error-definition": "error",
563
+ "unicorn/error-message": "error",
564
+ "unicorn/no-array-for-each": "error",
565
+ "unicorn/no-array-method-this-argument": "error",
566
+ "unicorn/no-array-push-push": "error",
567
+ "unicorn/no-await-expression-member": "error",
568
+ "unicorn/no-invalid-remove-event-listener": "error",
569
+ "unicorn/no-thenable": "error",
570
+ "unicorn/no-typeof-undefined": "off",
571
+ "unicorn/no-useless-fallback-in-spread": "error",
572
+ "unicorn/no-useless-length-check": "error",
573
+ "unicorn/no-useless-promise-resolve-reject": "error",
574
+ "unicorn/prefer-at": "error",
575
+ "unicorn/prefer-date-now": "error",
576
+ "unicorn/prefer-dom-node-append": "error",
577
+ "unicorn/prefer-dom-node-dataset": "error",
578
+ "unicorn/prefer-dom-node-remove": "error",
579
+ "unicorn/prefer-dom-node-text-content": "error",
580
+ "unicorn/prefer-modern-dom-apis": "error",
581
+ "unicorn/prefer-node-protocol": "error",
582
+ "unicorn/prefer-number-properties": "error",
583
+ "unicorn/prefer-object-from-entries": "error",
584
+ "unicorn/prefer-prototype-methods": "error",
585
+ "unicorn/prefer-query-selector": "error",
586
+ "unicorn/prefer-reflect-apply": "error",
587
+ "unicorn/prefer-regexp-test": "error",
588
+ "unicorn/prefer-string-slice": "error",
589
+ "unicorn/prefer-type-error": "error",
590
+ "unicorn/relative-url-style": ["error", "never"],
591
+ ...overrides == null ? void 0 : overrides.unicorn
592
+ }
593
+ };
591
594
  }
592
-
593
595
  async function vitest(options) {
594
- const { overrides, vitest: enabled } = options;
595
- if (!enabled)
596
- return {};
597
- const plugin = await interopDefault(import('eslint-plugin-vitest'));
598
- return {
599
- plugins: {
600
- vitest: plugin
601
- },
602
- files: [Glob.VITEST],
603
- rules: {
604
- 'vitest/consistent-test-it': ['error', { fn: 'it', withinDescribe: 'it' }],
605
- 'vitest/expect-expect': [
606
- 'error',
607
- {
608
- assertFunctionNames: ['expect']
609
- }
610
- ],
611
- 'vitest/max-expects': ['error', { max: 5 }],
612
- 'vitest/max-nested-describe': ['error', { max: 1 }],
613
- 'vitest/no-alias-methods': 'error',
614
- 'vitest/no-commented-out-tests': 'error',
615
- 'vitest/no-conditional-expect': 'error',
616
- 'vitest/no-conditional-in-test': 'error',
617
- 'vitest/no-conditional-tests': 'error',
618
- 'vitest/no-done-callback': 'error',
619
- 'vitest/no-duplicate-hooks': 'error',
620
- 'vitest/no-identical-title': 'error',
621
- 'vitest/no-import-node-test': 'error',
622
- 'vitest/no-standalone-expect': 'error',
623
- 'vitest/no-test-return-statement': 'error',
624
- 'vitest/prefer-comparison-matcher': 'error',
625
- 'vitest/prefer-each': 'error',
626
- 'vitest/prefer-equality-matcher': 'error',
627
- 'vitest/prefer-expect-resolves': 'error',
628
- 'vitest/prefer-hooks-in-order': 'error',
629
- 'vitest/prefer-hooks-on-top': 'error',
630
- 'vitest/prefer-lowercase-title': 'error',
631
- 'vitest/prefer-mock-promise-shorthand': 'error',
632
- 'vitest/prefer-spy-on': 'error',
633
- 'vitest/prefer-to-be-object': 'error',
634
- 'vitest/prefer-to-contain': 'error',
635
- 'vitest/prefer-to-have-length': 'error',
636
- 'vitest/prefer-todo': 'error',
637
- 'vitest/require-top-level-describe': [
638
- 'error',
639
- {
640
- maxNumberOfTopLevelDescribes: 10
641
- }
642
- ],
643
- 'vitest/valid-describe-callback': 'error',
644
- 'vitest/valid-expect': 'error',
645
- ...overrides?.vitest
596
+ const { overrides, vitest: enabled } = options;
597
+ if (!enabled)
598
+ return {};
599
+ const plugin = await interopDefault(import("eslint-plugin-vitest"));
600
+ return {
601
+ plugins: {
602
+ vitest: plugin
603
+ },
604
+ files: [Glob.VITEST],
605
+ rules: {
606
+ "vitest/consistent-test-it": ["error", { fn: "it", withinDescribe: "it" }],
607
+ "vitest/expect-expect": [
608
+ "error",
609
+ {
610
+ assertFunctionNames: ["expect"]
646
611
  }
647
- };
612
+ ],
613
+ "vitest/max-expects": ["error", { max: 5 }],
614
+ "vitest/max-nested-describe": ["error", { max: 1 }],
615
+ "vitest/no-alias-methods": "error",
616
+ "vitest/no-commented-out-tests": "error",
617
+ "vitest/no-conditional-expect": "error",
618
+ "vitest/no-conditional-in-test": "error",
619
+ "vitest/no-conditional-tests": "error",
620
+ "vitest/no-done-callback": "error",
621
+ "vitest/no-duplicate-hooks": "error",
622
+ "vitest/no-identical-title": "error",
623
+ "vitest/no-import-node-test": "error",
624
+ "vitest/no-standalone-expect": "error",
625
+ "vitest/no-test-return-statement": "error",
626
+ "vitest/prefer-comparison-matcher": "error",
627
+ "vitest/prefer-each": "error",
628
+ "vitest/prefer-equality-matcher": "error",
629
+ "vitest/prefer-expect-resolves": "error",
630
+ "vitest/prefer-hooks-in-order": "error",
631
+ "vitest/prefer-hooks-on-top": "error",
632
+ "vitest/prefer-lowercase-title": "error",
633
+ "vitest/prefer-mock-promise-shorthand": "error",
634
+ "vitest/prefer-spy-on": "error",
635
+ "vitest/prefer-to-be-object": "error",
636
+ "vitest/prefer-to-contain": "error",
637
+ "vitest/prefer-to-have-length": "error",
638
+ "vitest/prefer-todo": "error",
639
+ "vitest/require-top-level-describe": [
640
+ "error",
641
+ {
642
+ maxNumberOfTopLevelDescribes: 10
643
+ }
644
+ ],
645
+ "vitest/valid-describe-callback": "error",
646
+ "vitest/valid-expect": "error",
647
+ ...overrides == null ? void 0 : overrides.vitest
648
+ }
649
+ };
648
650
  }
649
-
650
- /* eslint-disable @typescript-eslint/no-explicit-any */
651
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
652
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
653
- /**
654
- * @see https://eslint.vuejs.org/rules/
655
- */
656
651
  async function vue(options) {
657
- const { overrides, vue: enabled } = options;
658
- if (!enabled)
659
- return [];
660
- const [vuePlugin, vueParser, tsParser] = await Promise.all([
661
- // @ts-expect-error no types
662
- await interopDefault(import('eslint-plugin-vue')),
663
- await interopDefault(import('vue-eslint-parser')),
664
- await interopDefault(import('@typescript-eslint/parser'))
665
- ]);
666
- const rules = {
667
- ...vuePlugin.configs.base.rules,
668
- 'vue/attribute-hyphenation': ['error', 'always'],
669
- 'vue/attributes-order': 'error',
670
- 'vue/block-lang': [
671
- 'error',
672
- {
673
- script: {
674
- lang: 'ts'
675
- },
676
- style: {
677
- lang: 'scss',
678
- allowNoLang: true
679
- }
680
- }
681
- ],
682
- 'vue/block-order': [
683
- 'error',
684
- {
685
- order: [['script', 'template'], 'style:not([scoped])', 'style[scoped]']
686
- }
687
- ],
688
- 'vue/block-tag-newline': [
689
- 'error',
690
- {
691
- singleline: 'always',
692
- multiline: 'always',
693
- maxEmptyLines: 0
694
- }
695
- ],
696
- 'vue/component-api-style': ['error', ['script-setup']],
697
- 'vue/component-definition-name-casing': ['error', 'PascalCase'],
698
- 'vue/component-name-in-template-casing': ['error', 'PascalCase'],
699
- 'vue/custom-event-name-casing': ['error', 'camelCase'],
700
- 'vue/define-emits-declaration': ['error', 'type-based'],
701
- 'vue/define-macros-order': [
702
- 'error',
703
- {
704
- order: ['defineProps', 'defineEmits']
705
- }
706
- ],
707
- 'vue/define-props-declaration': ['error', 'type-based'],
708
- 'vue/first-attribute-linebreak': 'off',
709
- 'vue/html-button-has-type': [
710
- 'error',
711
- {
712
- button: true,
713
- submit: true,
714
- reset: true
715
- }
716
- ],
717
- 'vue/html-closing-bracket-newline': [
718
- 'error',
719
- {
720
- singleline: 'never',
721
- multiline: 'always'
722
- }
723
- ],
724
- 'vue/html-closing-bracket-spacing': [
725
- 'error',
726
- {
727
- startTag: 'never',
728
- endTag: 'never',
729
- selfClosingTag: 'always'
730
- }
731
- ],
732
- 'vue/html-self-closing': [
733
- 'error',
734
- {
735
- html: {
736
- void: 'never',
737
- normal: 'always',
738
- component: 'always'
739
- },
740
- svg: 'always',
741
- math: 'always'
742
- }
743
- ],
744
- 'vue/match-component-file-name': [
745
- 'off',
746
- {
747
- extensions: ['tsx', 'vue'],
748
- shouldMatchCase: false
749
- }
750
- ],
751
- 'vue/match-component-import-name': 'error',
752
- 'vue/multi-word-component-names': 'off',
753
- 'vue/mustache-interpolation-spacing': ['error', 'always'],
754
- 'vue/no-arrow-functions-in-watch': 'off',
755
- 'vue/no-async-in-computed-properties': 'error',
756
- 'vue/no-boolean-default': ['error', 'no-default'],
757
- 'vue/no-computed-properties-in-data': 'error',
758
- 'vue/no-dupe-keys': 'error',
759
- 'vue/no-dupe-v-else-if': 'error',
760
- 'vue/no-duplicate-attributes': [
761
- 'error',
762
- {
763
- allowCoexistClass: true,
764
- allowCoexistStyle: true
765
- }
766
- ],
767
- 'vue/no-export-in-script-setup': 'error',
768
- 'vue/no-expose-after-await': 'error',
769
- 'vue/no-lifecycle-after-await': 'error',
770
- 'vue/no-lone-template': 'error',
771
- 'vue/no-multi-spaces': 'error',
772
- 'vue/no-multiple-objects-in-class': 'error',
773
- 'vue/no-mutating-props': 'error',
774
- 'vue/no-parsing-error': 'error',
775
- 'vue/no-ref-as-operand': 'error',
776
- 'vue/no-ref-object-reactivity-loss': 'error',
777
- 'vue/no-reserved-component-names': 'error',
778
- 'vue/no-reserved-keys': 'error',
779
- 'vue/no-reserved-props': 'error',
780
- 'vue/no-required-prop-with-default': [
781
- 'error',
782
- {
783
- autofix: true
784
- }
785
- ],
786
- 'vue/no-root-v-if': 'error',
787
- 'vue/no-setup-props-reactivity-loss': 'error',
788
- 'vue/no-shared-component-data': 'error',
789
- 'vue/no-side-effects-in-computed-properties': 'error',
790
- 'vue/no-spaces-around-equal-signs-in-attribute': 'error',
791
- 'vue/no-static-inline-styles': [
792
- 'error',
793
- {
794
- allowBinding: false
795
- }
796
- ],
797
- 'vue/no-template-key': 'error',
798
- 'vue/no-template-shadow': 'error',
799
- 'vue/no-template-target-blank': 'error',
800
- 'vue/no-textarea-mustache': 'error',
801
- 'vue/no-unused-components': 'error',
802
- 'vue/no-unused-emit-declarations': 'error',
803
- 'vue/no-unused-properties': 'error',
804
- 'vue/no-unused-refs': 'error',
805
- 'vue/no-unused-vars': [
806
- 'error',
807
- {
808
- ignorePattern: '^_'
809
- }
810
- ],
811
- 'vue/no-use-computed-property-like-method': 'error',
812
- 'vue/no-use-v-else-with-v-for': 'error',
813
- 'vue/no-use-v-if-with-v-for': 'error',
814
- 'vue/no-useless-mustaches': [
815
- 'error',
816
- {
817
- ignoreIncludesComment: false,
818
- ignoreStringEscape: false
819
- }
820
- ],
821
- 'vue/no-useless-template-attributes': 'error',
822
- 'vue/no-useless-v-bind': 'error',
823
- 'vue/no-v-for-template-key-on-child': 'error',
824
- 'vue/no-v-text-v-html-on-component': 'error',
825
- 'vue/no-v-html': 'off',
826
- 'vue/no-watch-after-await': 'error',
827
- 'vue/order-in-components': 'error',
828
- 'vue/padding-line-between-blocks': ['error', 'always'],
829
- 'vue/prefer-define-options': 'error',
830
- 'vue/prefer-import-from-vue': 'error',
831
- 'vue/prefer-separate-static-class': 'error',
832
- 'vue/prefer-true-attribute-shorthand': 'error',
833
- 'vue/prop-name-casing': ['error', 'camelCase'],
834
- 'vue/require-component-is': 'error',
835
- 'vue/require-default-prop': 'off',
836
- 'vue/require-explicit-emits': [
837
- 'error',
838
- {
839
- allowProps: false
840
- }
841
- ],
842
- 'vue/require-macro-variable-name': [
843
- 'error',
844
- {
845
- defineProps: 'props',
846
- defineEmits: 'emit',
847
- defineSlots: 'slots',
848
- useSlots: 'slots',
849
- useAttrs: 'attrs'
850
- }
851
- ],
852
- 'vue/require-prop-types': 'error',
853
- 'vue/require-render-return': 'error',
854
- 'vue/require-slots-as-functions': 'error',
855
- 'vue/require-toggle-inside-transition': 'error',
856
- 'vue/require-typed-ref': 'error',
857
- 'vue/require-v-for-key': 'error',
858
- 'vue/require-valid-default-prop': 'error',
859
- 'vue/return-in-computed-property': 'error',
860
- 'vue/return-in-emits-validator': 'error',
861
- 'vue/this-in-template': ['error', 'never'],
862
- 'vue/use-v-on-exact': 'error',
863
- 'vue/v-bind-style': ['error', 'shorthand'],
864
- 'vue/v-for-delimiter-style': ['error', 'of'],
865
- 'vue/v-on-handler-style': 'off',
866
- 'vue/v-on-style': ['error', 'shorthand'],
867
- 'vue/v-slot-style': [
868
- 'error',
869
- {
870
- atComponent: 'shorthand',
871
- default: 'shorthand',
872
- named: 'shorthand'
873
- }
874
- ],
875
- 'vue/v-on-event-hyphenation': ['error', 'always'],
876
- 'vue/valid-attribute-name': 'error',
877
- 'vue/valid-define-emits': 'error',
878
- 'vue/valid-define-options': 'error',
879
- 'vue/valid-define-props': 'error',
880
- 'vue/valid-next-tick': 'error',
881
- 'vue/valid-template-root': 'error',
882
- 'vue/valid-v-bind': 'error',
883
- 'vue/valid-v-cloak': 'error',
884
- 'vue/valid-v-else-if': 'error',
885
- 'vue/valid-v-else': 'error',
886
- 'vue/valid-v-for': 'error',
887
- 'vue/valid-v-html': 'error',
888
- 'vue/valid-v-if': 'error',
889
- 'vue/valid-v-memo': 'error',
890
- 'vue/valid-v-model': 'error',
891
- 'vue/valid-v-on': 'error',
892
- 'vue/valid-v-once': 'error',
893
- 'vue/valid-v-pre': 'error',
894
- 'vue/valid-v-show': 'error',
895
- 'vue/valid-v-slot': 'error',
896
- 'vue/valid-v-text': 'error',
897
- ...overrides?.vue
898
- };
899
- return [
900
- {
901
- plugins: {
902
- vue: vuePlugin
903
- }
652
+ const { overrides, vue: enabled } = options;
653
+ if (!enabled)
654
+ return [];
655
+ const [vuePlugin, vueParser, tsParser] = await Promise.all([
656
+ // @ts-expect-error no types
657
+ await interopDefault(import("eslint-plugin-vue")),
658
+ await interopDefault(import("vue-eslint-parser")),
659
+ await interopDefault(import("@typescript-eslint/parser"))
660
+ ]);
661
+ const rules = {
662
+ ...vuePlugin.configs.base.rules,
663
+ "vue/attribute-hyphenation": ["error", "always"],
664
+ "vue/attributes-order": "error",
665
+ "vue/block-lang": [
666
+ "error",
667
+ {
668
+ script: {
669
+ lang: "ts"
904
670
  },
905
- {
906
- files: [Glob.VUE],
907
- languageOptions: {
908
- parser: vueParser,
909
- parserOptions: {
910
- parser: tsParser,
911
- project: options.project,
912
- tsconfigRootDir: process.cwd(),
913
- extraFileExtensions: ['.vue'],
914
- sourceType: 'module',
915
- ecmaVersion: 'latest'
916
- }
917
- }
671
+ style: {
672
+ lang: "scss",
673
+ allowNoLang: true
674
+ }
675
+ }
676
+ ],
677
+ "vue/block-order": [
678
+ "error",
679
+ {
680
+ order: [["script", "template"], "style:not([scoped])", "style[scoped]"]
681
+ }
682
+ ],
683
+ "vue/block-tag-newline": [
684
+ "error",
685
+ {
686
+ singleline: "always",
687
+ multiline: "always",
688
+ maxEmptyLines: 0
689
+ }
690
+ ],
691
+ "vue/component-api-style": ["error", ["script-setup"]],
692
+ "vue/component-definition-name-casing": ["error", "PascalCase"],
693
+ "vue/component-name-in-template-casing": ["error", "PascalCase"],
694
+ "vue/custom-event-name-casing": ["error", "camelCase"],
695
+ "vue/define-emits-declaration": ["error", "type-based"],
696
+ "vue/define-macros-order": [
697
+ "error",
698
+ {
699
+ order: ["defineProps", "defineEmits"]
700
+ }
701
+ ],
702
+ "vue/define-props-declaration": ["error", "type-based"],
703
+ "vue/first-attribute-linebreak": "off",
704
+ "vue/html-button-has-type": [
705
+ "error",
706
+ {
707
+ button: true,
708
+ submit: true,
709
+ reset: true
710
+ }
711
+ ],
712
+ "vue/html-closing-bracket-newline": [
713
+ "error",
714
+ {
715
+ singleline: "never",
716
+ multiline: "always"
717
+ }
718
+ ],
719
+ "vue/html-closing-bracket-spacing": [
720
+ "error",
721
+ {
722
+ startTag: "never",
723
+ endTag: "never",
724
+ selfClosingTag: "always"
725
+ }
726
+ ],
727
+ "vue/html-self-closing": [
728
+ "error",
729
+ {
730
+ html: {
731
+ void: "never",
732
+ normal: "always",
733
+ component: "always"
918
734
  },
919
- {
920
- // @ts-expect-error no types
921
- processor: vuePlugin.processors['.vue'],
922
- rules
735
+ svg: "always",
736
+ math: "always"
737
+ }
738
+ ],
739
+ "vue/match-component-file-name": [
740
+ "off",
741
+ {
742
+ extensions: ["tsx", "vue"],
743
+ shouldMatchCase: false
744
+ }
745
+ ],
746
+ "vue/match-component-import-name": "error",
747
+ "vue/multi-word-component-names": "off",
748
+ "vue/mustache-interpolation-spacing": ["error", "always"],
749
+ "vue/no-arrow-functions-in-watch": "off",
750
+ "vue/no-async-in-computed-properties": "error",
751
+ "vue/no-boolean-default": ["error", "no-default"],
752
+ "vue/no-computed-properties-in-data": "error",
753
+ "vue/no-dupe-keys": "error",
754
+ "vue/no-dupe-v-else-if": "error",
755
+ "vue/no-duplicate-attributes": [
756
+ "error",
757
+ {
758
+ allowCoexistClass: true,
759
+ allowCoexistStyle: true
760
+ }
761
+ ],
762
+ "vue/no-export-in-script-setup": "error",
763
+ "vue/no-expose-after-await": "error",
764
+ "vue/no-lifecycle-after-await": "error",
765
+ "vue/no-lone-template": "error",
766
+ "vue/no-multi-spaces": "error",
767
+ "vue/no-multiple-objects-in-class": "error",
768
+ "vue/no-mutating-props": "error",
769
+ "vue/no-parsing-error": "error",
770
+ "vue/no-ref-as-operand": "error",
771
+ "vue/no-ref-object-reactivity-loss": "error",
772
+ "vue/no-reserved-component-names": "error",
773
+ "vue/no-reserved-keys": "error",
774
+ "vue/no-reserved-props": "error",
775
+ "vue/no-required-prop-with-default": [
776
+ "error",
777
+ {
778
+ autofix: true
779
+ }
780
+ ],
781
+ "vue/no-root-v-if": "error",
782
+ "vue/no-setup-props-reactivity-loss": "error",
783
+ "vue/no-shared-component-data": "error",
784
+ "vue/no-side-effects-in-computed-properties": "error",
785
+ "vue/no-spaces-around-equal-signs-in-attribute": "error",
786
+ "vue/no-static-inline-styles": [
787
+ "error",
788
+ {
789
+ allowBinding: false
790
+ }
791
+ ],
792
+ "vue/no-template-key": "error",
793
+ "vue/no-template-shadow": "error",
794
+ "vue/no-template-target-blank": "error",
795
+ "vue/no-textarea-mustache": "error",
796
+ "vue/no-unused-components": "error",
797
+ "vue/no-unused-emit-declarations": "error",
798
+ "vue/no-unused-properties": "error",
799
+ "vue/no-unused-refs": "error",
800
+ "vue/no-unused-vars": [
801
+ "error",
802
+ {
803
+ ignorePattern: "^_"
804
+ }
805
+ ],
806
+ "vue/no-use-computed-property-like-method": "error",
807
+ "vue/no-use-v-else-with-v-for": "error",
808
+ "vue/no-use-v-if-with-v-for": "error",
809
+ "vue/no-useless-mustaches": [
810
+ "error",
811
+ {
812
+ ignoreIncludesComment: false,
813
+ ignoreStringEscape: false
814
+ }
815
+ ],
816
+ "vue/no-useless-template-attributes": "error",
817
+ "vue/no-useless-v-bind": "error",
818
+ "vue/no-v-for-template-key-on-child": "error",
819
+ "vue/no-v-text-v-html-on-component": "error",
820
+ "vue/no-v-html": "off",
821
+ "vue/no-watch-after-await": "error",
822
+ "vue/order-in-components": "error",
823
+ "vue/padding-line-between-blocks": ["error", "always"],
824
+ "vue/prefer-define-options": "error",
825
+ "vue/prefer-import-from-vue": "error",
826
+ "vue/prefer-separate-static-class": "error",
827
+ "vue/prefer-true-attribute-shorthand": "error",
828
+ "vue/prop-name-casing": ["error", "camelCase"],
829
+ "vue/require-component-is": "error",
830
+ "vue/require-default-prop": "off",
831
+ "vue/require-explicit-emits": [
832
+ "error",
833
+ {
834
+ allowProps: false
835
+ }
836
+ ],
837
+ "vue/require-macro-variable-name": [
838
+ "error",
839
+ {
840
+ defineProps: "props",
841
+ defineEmits: "emit",
842
+ defineSlots: "slots",
843
+ useSlots: "slots",
844
+ useAttrs: "attrs"
845
+ }
846
+ ],
847
+ "vue/require-prop-types": "error",
848
+ "vue/require-render-return": "error",
849
+ "vue/require-slots-as-functions": "error",
850
+ "vue/require-toggle-inside-transition": "error",
851
+ "vue/require-typed-ref": "error",
852
+ "vue/require-v-for-key": "error",
853
+ "vue/require-valid-default-prop": "error",
854
+ "vue/return-in-computed-property": "error",
855
+ "vue/return-in-emits-validator": "error",
856
+ "vue/this-in-template": ["error", "never"],
857
+ "vue/use-v-on-exact": "error",
858
+ "vue/v-bind-style": ["error", "shorthand"],
859
+ "vue/v-for-delimiter-style": ["error", "of"],
860
+ "vue/v-on-handler-style": "off",
861
+ "vue/v-on-style": ["error", "shorthand"],
862
+ "vue/v-slot-style": [
863
+ "error",
864
+ {
865
+ atComponent: "shorthand",
866
+ default: "shorthand",
867
+ named: "shorthand"
868
+ }
869
+ ],
870
+ "vue/v-on-event-hyphenation": ["error", "always"],
871
+ "vue/valid-attribute-name": "error",
872
+ "vue/valid-define-emits": "error",
873
+ "vue/valid-define-options": "error",
874
+ "vue/valid-define-props": "error",
875
+ "vue/valid-next-tick": "error",
876
+ "vue/valid-template-root": "error",
877
+ "vue/valid-v-bind": "error",
878
+ "vue/valid-v-cloak": "error",
879
+ "vue/valid-v-else-if": "error",
880
+ "vue/valid-v-else": "error",
881
+ "vue/valid-v-for": "error",
882
+ "vue/valid-v-html": "error",
883
+ "vue/valid-v-if": "error",
884
+ "vue/valid-v-memo": "error",
885
+ "vue/valid-v-model": "error",
886
+ "vue/valid-v-on": "error",
887
+ "vue/valid-v-once": "error",
888
+ "vue/valid-v-pre": "error",
889
+ "vue/valid-v-show": "error",
890
+ "vue/valid-v-slot": "error",
891
+ "vue/valid-v-text": "error",
892
+ ...overrides == null ? void 0 : overrides.vue
893
+ };
894
+ return [
895
+ {
896
+ plugins: {
897
+ vue: vuePlugin
898
+ }
899
+ },
900
+ {
901
+ files: [Glob.VUE],
902
+ languageOptions: {
903
+ parser: vueParser,
904
+ parserOptions: {
905
+ parser: tsParser,
906
+ project: options.project,
907
+ tsconfigRootDir: process.cwd(),
908
+ extraFileExtensions: [".vue"],
909
+ sourceType: "module",
910
+ ecmaVersion: "latest"
923
911
  }
924
- ];
912
+ }
913
+ },
914
+ {
915
+ // @ts-expect-error no types
916
+ processor: vuePlugin.processors[".vue"],
917
+ rules
918
+ }
919
+ ];
925
920
  }
926
-
927
- /* eslint-disable @typescript-eslint/no-explicit-any */
928
- /* eslint-disable @typescript-eslint/no-unsafe-return */
929
921
  async function config(options) {
930
- const { prettier = true } = options;
931
- const objs = await Promise.all([
932
- javascript(options),
933
- typescript(options),
934
- ...(await vue(options)),
935
- perfectionist(options),
936
- unicorn(options),
937
- vitest(options),
938
- prettier ? eslintConfigPrettier : {},
939
- {
940
- ignores: [...getIgnores(), ...(options.ignores ?? [])]
941
- }
942
- ]);
943
- return objs;
922
+ const { prettier = true } = options;
923
+ const objs = await Promise.all([
924
+ javascript(options),
925
+ typescript(options),
926
+ ...await vue(options),
927
+ perfectionist(options),
928
+ unicorn(options),
929
+ vitest(options),
930
+ prettier ? eslintConfigPrettier : {},
931
+ {
932
+ ignores: [...getIgnores(), ...options.ignores ?? []]
933
+ }
934
+ ]);
935
+ return objs;
944
936
  }
945
-
946
937
  module.exports = config;