eslint-config-complete 4.17.0 → 4.18.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.
@@ -264,7 +264,6 @@ const SUGGESTIONS = {
264
264
  "no-param-reassign": [
265
265
  "error",
266
266
  {
267
- props: true,
268
267
  ignorePropertyModificationsFor: [
269
268
  "acc", // for reduce accumulators
270
269
  "accumulator", // for reduce accumulators
@@ -278,6 +277,7 @@ const SUGGESTIONS = {
278
277
  "$scope", // for Angular 1 scopes
279
278
  "staticContext", // for ReactRouter context
280
279
  ],
280
+ props: true,
281
281
  },
282
282
  ],
283
283
  /**
@@ -310,12 +310,12 @@ const SUGGESTIONS = {
310
310
  "no-restricted-globals": [
311
311
  "error",
312
312
  {
313
- name: "isFinite",
314
313
  message: "Use Number.isFinite instead: https://github.com/airbnb/javascript#standard-library--isfinite",
314
+ name: "isFinite",
315
315
  },
316
316
  {
317
- name: "isNaN",
318
317
  message: "Use Number.isNaN instead: https://github.com/airbnb/javascript#standard-library--isnan",
318
+ name: "isNaN",
319
319
  },
320
320
  ...confusingBrowserGlobals,
321
321
  ],
@@ -328,52 +328,52 @@ const SUGGESTIONS = {
328
328
  "no-restricted-properties": [
329
329
  "error",
330
330
  {
331
+ message: "arguments.callee is deprecated",
331
332
  object: "arguments",
332
333
  property: "callee",
333
- message: "arguments.callee is deprecated",
334
334
  },
335
335
  {
336
+ message: "Please use Number.isFinite instead",
336
337
  object: "global",
337
338
  property: "isFinite",
338
- message: "Please use Number.isFinite instead",
339
339
  },
340
340
  {
341
+ message: "Please use Number.isFinite instead",
341
342
  object: "self",
342
343
  property: "isFinite",
343
- message: "Please use Number.isFinite instead",
344
344
  },
345
345
  {
346
+ message: "Please use Number.isFinite instead",
346
347
  object: "window",
347
348
  property: "isFinite",
348
- message: "Please use Number.isFinite instead",
349
349
  },
350
350
  {
351
+ message: "Please use Number.isNaN instead",
351
352
  object: "global",
352
353
  property: "isNaN",
353
- message: "Please use Number.isNaN instead",
354
354
  },
355
355
  {
356
+ message: "Please use Number.isNaN instead",
356
357
  object: "self",
357
358
  property: "isNaN",
358
- message: "Please use Number.isNaN instead",
359
359
  },
360
360
  {
361
+ message: "Please use Number.isNaN instead",
361
362
  object: "window",
362
363
  property: "isNaN",
363
- message: "Please use Number.isNaN instead",
364
364
  },
365
365
  {
366
- property: "__defineGetter__",
367
366
  message: "Please use Object.defineProperty instead.",
367
+ property: "__defineGetter__",
368
368
  },
369
369
  {
370
- property: "__defineSetter__",
371
370
  message: "Please use Object.defineProperty instead.",
371
+ property: "__defineSetter__",
372
372
  },
373
373
  {
374
+ message: "Use the exponentiation operator (**) instead.",
374
375
  object: "Math",
375
376
  property: "pow",
376
- message: "Use the exponentiation operator (**) instead.",
377
377
  },
378
378
  ],
379
379
  /** Disabled because it is intended for disallowing specific language features per-project. */
@@ -1 +1 @@
1
- {"version":3,"file":"base-import-x.d.ts","sourceRoot":"","sources":["../../../src/base/base-import-x.js"],"names":[],"mappings":"AA4NA;;;;;;;;;GASG;AACH,2DAsFE"}
1
+ {"version":3,"file":"base-import-x.d.ts","sourceRoot":"","sources":["../../../src/base/base-import-x.js"],"names":[],"mappings":"AA4NA;;;;;;;;;GASG;AACH,2DAqFE"}
@@ -189,6 +189,12 @@ export const baseImportX = defineConfig({
189
189
  plugins: {
190
190
  "import-x": esLintPluginImportX,
191
191
  },
192
+ rules: {
193
+ ...HELPFUL_WARNINGS,
194
+ ...MODULE_SYSTEMS,
195
+ ...STATIC_ANALYSIS,
196
+ ...STYLE_GUIDE,
197
+ },
192
198
  // Beyond just specifying the plugin, additional configuration is necessary to make the plugin
193
199
  // work properly with TypeScript:
194
200
  // - First, the "eslint-import-resolver-typescript" package needs to be installed, or else an
@@ -211,12 +217,6 @@ export const baseImportX = defineConfig({
211
217
  typescript: true,
212
218
  },
213
219
  },
214
- rules: {
215
- ...HELPFUL_WARNINGS,
216
- ...MODULE_SYSTEMS,
217
- ...STATIC_ANALYSIS,
218
- ...STYLE_GUIDE,
219
- },
220
220
  },
221
221
  // Disable some TypeScript-specific rules in JavaScript files.
222
222
  {
@@ -139,8 +139,8 @@ export const baseJSDoc = defineConfig({
139
139
  {
140
140
  contexts: [
141
141
  {
142
- context: "FunctionDeclaration",
143
142
  comment: 'JsdocBlock:has(JsdocTag[tag="param"])',
143
+ context: "FunctionDeclaration",
144
144
  },
145
145
  ],
146
146
  },
@@ -20,8 +20,8 @@ export const baseStylistic = defineConfig({
20
20
  "error",
21
21
  {
22
22
  blankLine: "always",
23
- prev: "function",
24
23
  next: "function",
24
+ prev: "function",
25
25
  },
26
26
  ],
27
27
  /**
@@ -33,8 +33,8 @@ export const baseStylistic = defineConfig({
33
33
  "error",
34
34
  "double",
35
35
  {
36
- avoidEscape: true,
37
36
  allowTemplateLiterals: "never",
37
+ avoidEscape: true,
38
38
  },
39
39
  ],
40
40
  /**
@@ -5,9 +5,10 @@ import tseslint from "typescript-eslint";
5
5
  * https://typescript-eslint.io/rules/
6
6
  */
7
7
  export const baseTypeScriptESLint = defineConfig({
8
- plugins: {
9
- "@typescript-eslint": tseslint.plugin,
10
- },
8
+ // Rules that require type information will throw an error on ".json" files. (This is needed
9
+ // when using `eslint-plugin-package-json`. Even though this config does not currently use the
10
+ // plugin, we include it here defensively.)
11
+ ignores: ["**/*.json", "**/*.jsonc", "**/*.code-workspace"],
11
12
  // We need to provide some special configuration to ESLint in order for it to parse TypeScript
12
13
  // files. From:
13
14
  // https://typescript-eslint.io/packages/typescript-eslint/#advanced-usage
@@ -34,6 +35,9 @@ export const baseTypeScriptESLint = defineConfig({
34
35
  },
35
36
  },
36
37
  },
38
+ plugins: {
39
+ "@typescript-eslint": tseslint.plugin,
40
+ },
37
41
  rules: {
38
42
  "@typescript-eslint/adjacent-overload-signatures": "error",
39
43
  /**
@@ -99,23 +103,23 @@ export const baseTypeScriptESLint = defineConfig({
99
103
  // Allow camelCase variables (23.2), PascalCase variables (23.8), and UPPER_CASE variables
100
104
  // (23.10).
101
105
  {
102
- selector: "variable",
103
106
  format: ["camelCase", "PascalCase", "UPPER_CASE"],
104
107
  leadingUnderscore: "allow",
108
+ selector: "variable",
105
109
  },
106
110
  // Allow camelCase functions (23.2), and PascalCase functions (23.8).
107
111
  {
108
- selector: "function",
109
112
  format: ["camelCase", "PascalCase"],
110
113
  leadingUnderscore: "allow",
114
+ selector: "function",
111
115
  },
112
116
  // Airbnb recommends PascalCase for classes (23.3), and although Airbnb does not make
113
117
  // TypeScript recommendations, we are assuming this rule would similarly apply to anything
114
118
  // "type like", including interfaces, type aliases, and enums.
115
119
  {
116
- selector: "typeLike",
117
120
  format: ["PascalCase"],
118
121
  leadingUnderscore: "allow",
122
+ selector: "typeLike",
119
123
  },
120
124
  ],
121
125
  "@typescript-eslint/no-array-constructor": "error",
@@ -299,11 +303,11 @@ export const baseTypeScriptESLint = defineConfig({
299
303
  "@typescript-eslint/prefer-destructuring": [
300
304
  "error",
301
305
  {
302
- VariableDeclarator: {
306
+ AssignmentExpression: {
303
307
  array: false,
304
308
  object: true,
305
309
  },
306
- AssignmentExpression: {
310
+ VariableDeclarator: {
307
311
  array: false,
308
312
  object: true,
309
313
  },
@@ -374,15 +378,15 @@ export const baseTypeScriptESLint = defineConfig({
374
378
  "@typescript-eslint/strict-boolean-expressions": [
375
379
  "error",
376
380
  {
377
- allowString: false,
378
- allowNumber: false,
379
- allowNullableObject: true,
381
+ allowAny: false,
380
382
  allowNullableBoolean: false,
381
- allowNullableString: false,
382
- allowNullableNumber: false,
383
383
  allowNullableEnum: false,
384
- allowAny: false,
384
+ allowNullableNumber: false,
385
+ allowNullableObject: true,
386
+ allowNullableString: false,
387
+ allowNumber: false,
385
388
  allowRuleToRunWithoutStrictNullChecksIKnowWhatIAmDoing: false,
389
+ allowString: false,
386
390
  },
387
391
  ],
388
392
  "@typescript-eslint/strict-void-return": "error",
@@ -396,8 +400,8 @@ export const baseTypeScriptESLint = defineConfig({
396
400
  "error",
397
401
  {
398
402
  allowDefaultCaseForExhaustiveSwitch: false,
399
- requireDefaultForNonUnion: true,
400
403
  considerDefaultExhaustiveForUnions: true,
404
+ requireDefaultForNonUnion: true,
401
405
  },
402
406
  ],
403
407
  "@typescript-eslint/triple-slash-reference": "error",
@@ -411,10 +415,6 @@ export const baseTypeScriptESLint = defineConfig({
411
415
  "@typescript-eslint/unified-signatures": "error",
412
416
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "error",
413
417
  },
414
- // Rules that require type information will throw an error on ".json" files. (This is needed
415
- // when using `eslint-plugin-package-json`. Even though this config does not currently use the
416
- // plugin, we include it here defensively.)
417
- ignores: ["**/*.json", "**/*.jsonc", "**/*.code-workspace"],
418
418
  },
419
419
  // Enable linting on TypeScript file extensions.
420
420
  { files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"] },
@@ -1 +1 @@
1
- {"version":3,"file":"base-unicorn.d.ts","sourceRoot":"","sources":["../../../src/base/base-unicorn.js"],"names":[],"mappings":"AAGA;;;GAGG;AACH,2DAgWG"}
1
+ {"version":3,"file":"base-unicorn.d.ts","sourceRoot":"","sources":["../../../src/base/base-unicorn.js"],"names":[],"mappings":"AAGA;;;GAGG;AACH,2DAsYG"}
@@ -18,6 +18,7 @@ export const baseUnicorn = defineConfig({
18
18
  "unicorn/consistent-boolean-name": "off",
19
19
  "unicorn/consistent-class-member-order": "error",
20
20
  "unicorn/consistent-compound-words": "error",
21
+ "unicorn/consistent-conditional-object-spread": "error",
21
22
  "unicorn/consistent-date-clone": "error",
22
23
  "unicorn/consistent-destructuring": "error",
23
24
  "unicorn/consistent-empty-array-spread": "error",
@@ -29,6 +30,7 @@ export const baseUnicorn = defineConfig({
29
30
  "unicorn/consistent-optional-chaining": "error",
30
31
  "unicorn/consistent-template-literal-escape": "error",
31
32
  "unicorn/custom-error-definition": "error",
33
+ "unicorn/default-export-style": "error",
32
34
  "unicorn/dom-node-dataset": "error",
33
35
  "unicorn/empty-brace-spaces": "off", // eslint-config-prettier
34
36
  "unicorn/error-message": "error",
@@ -43,6 +45,8 @@ export const baseUnicorn = defineConfig({
43
45
  "unicorn/isolated-functions": "error",
44
46
  "unicorn/logical-assignment-operators": "error",
45
47
  "unicorn/max-nested-calls": "error",
48
+ /** Disabled since it is common to use the variable name of "i". */
49
+ "unicorn/name-replacements": "off",
46
50
  "unicorn/new-for-builtins": "error",
47
51
  /**
48
52
  * Disabled because if a line breaks three or more ESLint rules, then it is useful to use a
@@ -50,31 +54,42 @@ export const baseUnicorn = defineConfig({
50
54
  */
51
55
  "unicorn/no-abusive-eslint-disable": "off",
52
56
  "unicorn/no-accessor-recursion": "error",
57
+ "unicorn/no-accidental-bitwise-operator": "error",
53
58
  "unicorn/no-anonymous-default-export": "error",
54
59
  /** Disabled since it is not helpful when using TypeScript. */
55
60
  "unicorn/no-array-callback-reference": "off",
61
+ "unicorn/no-array-concat-in-loop": "error",
56
62
  "unicorn/no-array-fill-with-reference-type": "error",
57
63
  "unicorn/no-array-from-fill": "error",
64
+ "unicorn/no-array-front-mutation": "error",
58
65
  "unicorn/no-array-method-this-argument": "error",
59
66
  "unicorn/no-array-reduce": "error",
60
67
  "unicorn/no-array-reverse": "error",
61
68
  "unicorn/no-array-sort": "error",
69
+ "unicorn/no-array-sort-for-min-max": "error",
62
70
  "unicorn/no-array-splice": "error",
63
71
  /** Disabled because this goes against the standard JSDoc format. */
64
72
  "unicorn/no-asterisk-prefix-in-documentation-comments": "off",
65
73
  "unicorn/no-await-expression-member": "error",
66
74
  "unicorn/no-await-in-promise-methods": "error",
67
75
  "unicorn/no-blob-to-file": "error",
76
+ "unicorn/no-boolean-sort-comparator": "error",
68
77
  /** Disabled since simple double nested loops are common. */
69
78
  "unicorn/no-break-in-nested-loop": "off",
70
79
  "unicorn/no-canvas-to-image": "error",
80
+ "unicorn/no-chained-comparison": "error",
81
+ "unicorn/no-collection-bracket-access": "error",
71
82
  /** Disabled since it is unnecessary with TypeScript objects that are properly typed. */
72
83
  "unicorn/no-computed-property-existence-check": "off",
73
84
  "unicorn/no-confusing-array-splice": "error",
74
85
  "unicorn/no-confusing-array-with": "error",
75
86
  "unicorn/no-console-spaces": "error",
87
+ "unicorn/no-constant-zero-expression": "error",
76
88
  "unicorn/no-declarations-before-early-exit": "error",
77
89
  "unicorn/no-document-cookie": "error",
90
+ "unicorn/no-double-comparison": "error",
91
+ "unicorn/no-duplicate-if-branches": "error",
92
+ "unicorn/no-duplicate-logical-operands": "error",
78
93
  "unicorn/no-duplicate-loops": "error",
79
94
  "unicorn/no-duplicate-set-values": "error",
80
95
  "unicorn/no-empty-file": "error",
@@ -84,10 +99,12 @@ export const baseUnicorn = defineConfig({
84
99
  "unicorn/no-for-loop": "error",
85
100
  "unicorn/no-global-object-property-assignment": "error",
86
101
  "unicorn/no-immediate-mutation": "error",
102
+ "unicorn/no-impossible-length-comparison": "error",
87
103
  "unicorn/no-incorrect-query-selector": "error",
88
104
  "unicorn/no-incorrect-template-string-interpolation": "error",
89
105
  "unicorn/no-instanceof-builtins": "error",
90
106
  "unicorn/no-invalid-argument-count": "error",
107
+ "unicorn/no-invalid-character-comparison": "error",
91
108
  "unicorn/no-invalid-fetch-options": "error",
92
109
  "unicorn/no-invalid-file-input-accept": "error",
93
110
  "unicorn/no-invalid-remove-event-listener": "error",
@@ -95,10 +112,12 @@ export const baseUnicorn = defineConfig({
95
112
  "unicorn/no-keyword-prefix": "off",
96
113
  "unicorn/no-late-current-target-access": "error",
97
114
  "unicorn/no-lonely-if": "error",
115
+ "unicorn/no-loop-iterable-mutation": "error",
98
116
  "unicorn/no-magic-array-flat-depth": "error",
99
117
  /** Superseded by the `complete/format-line-comments` rule. */
100
118
  "unicorn/no-manually-wrapped-comments": "off",
101
119
  "unicorn/no-mismatched-map-key": "error",
120
+ "unicorn/no-misrefactored-assignment": "error",
102
121
  "unicorn/no-named-default": "error",
103
122
  "unicorn/no-negated-array-predicate": "error",
104
123
  "unicorn/no-negated-comparison": "error",
@@ -108,6 +127,7 @@ export const baseUnicorn = defineConfig({
108
127
  "unicorn/no-new-array": "error",
109
128
  "unicorn/no-new-buffer": "error",
110
129
  "unicorn/no-non-function-verb-prefix": "error",
130
+ "unicorn/no-nonstandard-builtin-properties": "error",
111
131
  "unicorn/no-null": "error",
112
132
  "unicorn/no-object-as-default-parameter": "error",
113
133
  "unicorn/no-object-methods-with-collections": "error",
@@ -119,6 +139,7 @@ export const baseUnicorn = defineConfig({
119
139
  "unicorn/no-process-exit": "off",
120
140
  "unicorn/no-redundant-comparison": "error",
121
141
  "unicorn/no-return-array-push": "error",
142
+ "unicorn/no-selector-as-dom-name": "error",
122
143
  "unicorn/no-single-promise-in-promise-methods": "error",
123
144
  "unicorn/no-static-only-class": "error",
124
145
  "unicorn/no-subtraction-comparison": "error",
@@ -134,6 +155,7 @@ export const baseUnicorn = defineConfig({
134
155
  "unicorn/no-unnecessary-array-flat-depth": "error",
135
156
  "unicorn/no-unnecessary-array-splice-count": "error",
136
157
  "unicorn/no-unnecessary-await": "error",
158
+ "unicorn/no-unnecessary-boolean-comparison": "error",
137
159
  "unicorn/no-unnecessary-global-this": "error",
138
160
  "unicorn/no-unnecessary-nested-ternary": "error",
139
161
  "unicorn/no-unnecessary-polyfills": "error",
@@ -154,13 +176,16 @@ export const baseUnicorn = defineConfig({
154
176
  "unicorn/no-useless-boolean-cast": "error",
155
177
  "unicorn/no-useless-coercion": "error",
156
178
  "unicorn/no-useless-collection-argument": "error",
179
+ "unicorn/no-useless-compound-assignment": "error",
157
180
  "unicorn/no-useless-concat": "error",
158
181
  "unicorn/no-useless-continue": "error",
182
+ "unicorn/no-useless-delete-check": "error",
159
183
  "unicorn/no-useless-else": "error",
160
184
  "unicorn/no-useless-error-capture-stack-trace": "error",
161
185
  "unicorn/no-useless-fallback-in-spread": "error",
162
186
  "unicorn/no-useless-iterator-to-array": "error",
163
187
  "unicorn/no-useless-length-check": "error",
188
+ "unicorn/no-useless-logical-operand": "error",
164
189
  "unicorn/no-useless-override": "error",
165
190
  "unicorn/no-useless-promise-resolve-reject": "error",
166
191
  "unicorn/no-useless-recursion": "error",
@@ -169,6 +194,7 @@ export const baseUnicorn = defineConfig({
169
194
  "unicorn/no-useless-template-literals": "error",
170
195
  /** Disabled since it does not work properly with TypeScript. */
171
196
  "unicorn/no-useless-undefined": "off",
197
+ "unicorn/no-xor-as-exponentiation": "error",
172
198
  "unicorn/no-zero-fractions": "error",
173
199
  "unicorn/number-literal-case": "off", // eslint-config-prettier
174
200
  "unicorn/numeric-separators-style": "error",
@@ -178,8 +204,10 @@ export const baseUnicorn = defineConfig({
178
204
  "unicorn/prefer-array-find": "error",
179
205
  "unicorn/prefer-array-flat": "error",
180
206
  "unicorn/prefer-array-flat-map": "error",
207
+ "unicorn/prefer-array-from-async": "error",
181
208
  "unicorn/prefer-array-from-map": "error",
182
209
  "unicorn/prefer-array-index-of": "error",
210
+ "unicorn/prefer-array-iterable-methods": "error",
183
211
  "unicorn/prefer-array-last-methods": "error",
184
212
  "unicorn/prefer-array-slice": "error",
185
213
  "unicorn/prefer-array-some": "error",
@@ -187,9 +215,11 @@ export const baseUnicorn = defineConfig({
187
215
  "unicorn/prefer-await": "error",
188
216
  "unicorn/prefer-bigint-literals": "error",
189
217
  "unicorn/prefer-blob-reading-methods": "error",
218
+ "unicorn/prefer-boolean-return": "error",
190
219
  "unicorn/prefer-class-fields": "error",
191
220
  "unicorn/prefer-classlist-toggle": "error",
192
221
  "unicorn/prefer-code-point": "error",
222
+ "unicorn/prefer-continue": "error",
193
223
  "unicorn/prefer-date-now": "error",
194
224
  "unicorn/prefer-default-parameters": "error",
195
225
  "unicorn/prefer-direct-iteration": "error",
@@ -202,10 +232,12 @@ export const baseUnicorn = defineConfig({
202
232
  "unicorn/prefer-else-if": "error",
203
233
  "unicorn/prefer-event-target": "error",
204
234
  "unicorn/prefer-export-from": "error",
235
+ "unicorn/prefer-flat-math-min-max": "error",
205
236
  "unicorn/prefer-get-or-insert-computed": "error",
206
237
  "unicorn/prefer-global-number-constants": "error",
207
238
  "unicorn/prefer-global-this": "error",
208
239
  "unicorn/prefer-has-check": "error",
240
+ "unicorn/prefer-hoisting-branch-code": "error",
209
241
  "unicorn/prefer-https": "error",
210
242
  "unicorn/prefer-identifier-import-export-specifiers": "error",
211
243
  "unicorn/prefer-import-meta-properties": "error",
@@ -225,6 +257,7 @@ export const baseUnicorn = defineConfig({
225
257
  "unicorn/prefer-logical-operator-over-ternary": "error",
226
258
  "unicorn/prefer-map-from-entries": "error",
227
259
  "unicorn/prefer-math-abs": "error",
260
+ "unicorn/prefer-math-constants": "error",
228
261
  "unicorn/prefer-math-min-max": "error",
229
262
  "unicorn/prefer-math-trunc": "error",
230
263
  "unicorn/prefer-minimal-ternary": "error",
@@ -244,10 +277,12 @@ export const baseUnicorn = defineConfig({
244
277
  "unicorn/prefer-optional-catch-binding": "error",
245
278
  "unicorn/prefer-path2d": "error",
246
279
  "unicorn/prefer-private-class-fields": "error",
280
+ "unicorn/prefer-promise-with-resolvers": "error",
247
281
  "unicorn/prefer-prototype-methods": "error",
248
282
  "unicorn/prefer-query-selector": "error",
249
283
  "unicorn/prefer-queue-microtask": "error",
250
284
  "unicorn/prefer-reflect-apply": "error",
285
+ "unicorn/prefer-regexp-escape": "error",
251
286
  "unicorn/prefer-regexp-test": "error",
252
287
  "unicorn/prefer-response-static-json": "error",
253
288
  "unicorn/prefer-scoped-selector": "error",
@@ -259,6 +294,7 @@ export const baseUnicorn = defineConfig({
259
294
  "unicorn/prefer-single-array-predicate": "error",
260
295
  "unicorn/prefer-single-call": "error",
261
296
  "unicorn/prefer-single-object-destructuring": "error",
297
+ "unicorn/prefer-single-replace": "error",
262
298
  "unicorn/prefer-smaller-scope": "error",
263
299
  "unicorn/prefer-split-limit": "error",
264
300
  "unicorn/prefer-spread": "error",
@@ -283,10 +319,11 @@ export const baseUnicorn = defineConfig({
283
319
  "unicorn/prefer-type-error": "error",
284
320
  "unicorn/prefer-type-literal-last": "error",
285
321
  "unicorn/prefer-uint8array-base64": "error",
322
+ "unicorn/prefer-unary-minus": "error",
286
323
  "unicorn/prefer-unicode-code-point-escapes": "error",
324
+ "unicorn/prefer-url-can-parse": "error",
287
325
  "unicorn/prefer-url-href": "error",
288
- /** Disabled since it is common to use the variable name of "i". */
289
- "unicorn/prevent-abbreviations": "off",
326
+ "unicorn/prefer-while-loop-condition": "error",
290
327
  "unicorn/relative-url-style": "error",
291
328
  "unicorn/require-array-join-separator": "error",
292
329
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-config-complete",
3
- "version": "4.17.0",
3
+ "version": "4.18.0",
4
4
  "description": "A sharable ESLint config for TypeScript projects.",
5
5
  "keywords": [
6
6
  "eslint",
@@ -35,24 +35,24 @@
35
35
  "@stylistic/eslint-plugin": "5.10.0",
36
36
  "confusing-browser-globals": "1.0.11",
37
37
  "eslint-import-resolver-typescript": "4.4.5",
38
- "eslint-plugin-complete": "1.9.0",
38
+ "eslint-plugin-complete": "1.10.0",
39
39
  "eslint-plugin-eslint-plugin": "7.4.0",
40
40
  "eslint-plugin-import-x": "4.16.2",
41
- "eslint-plugin-jsdoc": "63.0.6",
41
+ "eslint-plugin-jsdoc": "63.0.7",
42
42
  "eslint-plugin-n": "18.1.0",
43
43
  "eslint-plugin-perfectionist": "5.9.1",
44
44
  "eslint-plugin-regexp": "3.1.0",
45
- "eslint-plugin-unicorn": "67.0.0",
45
+ "eslint-plugin-unicorn": "68.0.0",
46
46
  "typescript-eslint": "8.61.1"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@eslint/js": "10.0.1",
50
50
  "@types/confusing-browser-globals": "1.0.3",
51
- "@types/node": "25.9.3",
51
+ "@types/node": "26.0.0",
52
52
  "@typescript-eslint/typescript-estree": "8.61.1",
53
53
  "@typescript-eslint/utils": "8.61.1",
54
54
  "complete-common": "2.29.0",
55
- "complete-node": "17.0.2",
55
+ "complete-node": "18.0.0",
56
56
  "eslint-config-prettier": "10.1.8",
57
57
  "typescript": "6.0.3"
58
58
  },