@forsakringskassan/eslint-config 15.2.0 → 15.3.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.
Files changed (2) hide show
  1. package/index.mjs +34 -105
  2. package/package.json +3 -3
package/index.mjs CHANGED
@@ -206,157 +206,85 @@ export default [
206
206
 
207
207
  /* enable eslint-plugin-unicorn */
208
208
  ...eslintPluginUnicorn.configs.recommended.rules,
209
- "unicorn/better-regex": "off", // covered by eslint-plugin-regexp
210
209
  "unicorn/catch-error-name": "off",
211
210
  "unicorn/consistent-assert": "off",
211
+ "unicorn/consistent-boolean-name": "off",
212
+ "unicorn/consistent-class-member-order": "off",
213
+ "unicorn/consistent-compound-words": "off",
212
214
  "unicorn/consistent-date-clone": "off", // we prefer to use FDate instead of Date and structuredClone does not play well with jest
213
215
  "unicorn/consistent-empty-array-spread": "off",
214
- "unicorn/consistent-existence-index-check": "error",
215
- "unicorn/consistent-function-scoping": "error",
216
- "unicorn/consistent-template-literal-escape": "error",
217
- "unicorn/custom-error-definition": "error",
218
- "unicorn/error-message": "error",
219
- "unicorn/escape-case": "off", // typically not useful for this organisation
216
+ "unicorn/default-export-style": [
217
+ "error",
218
+ {
219
+ /* right now this rule is too restrictive with functions */
220
+ functions: "ignore",
221
+ /* classes should be default exported inline */
222
+ classes: "inline",
223
+ },
224
+ ],
225
+ "unicorn/escape-case": "off", // typically not useful for this organization
220
226
  "unicorn/expiring-todo-comments": "off", // could be useful later
221
227
  "unicorn/explicit-length-check": [
222
228
  "error",
223
229
  { "non-zero": "greater-than" },
224
230
  ],
225
231
  "unicorn/filename-case": [
232
+ /* enforce kebab-case in filenames */
226
233
  "error",
227
234
  {
228
235
  case: "kebabCase",
229
236
  ignore: [
237
+ "^__(fixtures|mocks|snapshots|tests)__$",
230
238
  "^Gruntfile.js$",
231
239
  /* ignore mocks for @forsakringskassan/apimock-express */
232
240
  "_(get|post|put|delete).(js|cjs|mjs|ts)$",
233
241
  ],
234
242
  },
235
- ], // enforce kebab-case in filenames
243
+ ],
236
244
  "unicorn/import-style": "off", // off for now
237
- "unicorn/isolated-functions": "error",
238
- "unicorn/new-for-builtins": "error",
245
+ "unicorn/name-replacements": "off", // maybe later
239
246
  "unicorn/no-abusive-eslint-disable": "off", // covered by eslint-plugin-eslint-comments
240
- "unicorn/no-accessor-recursion": "error",
241
247
  "unicorn/no-anonymous-default-export": "off", // often used with configuration packages
242
- "unicorn/no-array-callback-reference": "off", // opinionated, prefer to allow passing function references to array methods (and for most part typescript will handle this)
243
- "unicorn/no-array-for-each": "error",
244
- "unicorn/no-array-method-this-argument": "error",
248
+ "unicorn/no-array-callback-reference": "off", // opinionated, prefer to allow passing function references to array methods (and for most part TypeScript will handle this)
245
249
  "unicorn/no-array-reduce": "off", // allow usage of reduce()
246
- "unicorn/no-array-reverse": "error", // prefer immutable .toReversed() (available in Node.js 20+)
247
- "unicorn/no-array-sort": "error", // prefer immutable .toSorted() (available in Node.js 20+)
248
- "unicorn/no-await-expression-member": "error",
249
- "unicorn/no-await-in-promise-methods": "error",
250
- "unicorn/no-console-spaces": "error",
251
- "unicorn/no-document-cookie": "error",
252
250
  "unicorn/no-empty-file": "off",
253
- "unicorn/no-for-loop": "error",
254
- "unicorn/no-hex-escape": "error",
255
251
  "unicorn/no-immediate-mutation": "off",
256
- "unicorn/no-instanceof-builtins": "error",
257
- "unicorn/no-invalid-fetch-options": "off", // let typescript and tests handle this
258
- "unicorn/no-invalid-remove-event-listener": "error",
259
- "unicorn/no-magic-array-flat-depth": "error",
260
- "unicorn/no-named-default": "off", // named default is useful for vue
252
+ "unicorn/no-invalid-argument-count": "off", // does not respect optional parameters (e.g. jsdoc [param])
253
+ "unicorn/no-invalid-fetch-options": "off", // let TypeScript and tests handle this
254
+ "unicorn/no-named-default": "off", // named default is useful for Vue.js
261
255
  "unicorn/no-negated-condition": "off", // mostly agree with the rule but sometimes its useful to have the common case first even if negated
262
256
  "unicorn/no-negation-in-equality-check": "off",
263
- "unicorn/no-new-array": "error",
264
- "unicorn/no-new-buffer": "error",
265
257
  "unicorn/no-null": "off", // prefer using null over undefined
266
- "unicorn/no-object-as-default-parameter": "error",
267
- "unicorn/no-process-exit": "off", // covered by n/no-process-exit (enabled by recommended-module preset)
268
- "unicorn/no-single-promise-in-promise-methods": "error",
269
- "unicorn/no-static-only-class": "off",
270
- "unicorn/no-thenable": "off",
271
- "unicorn/no-this-assignment": "error",
272
- "unicorn/no-typeof-undefined": "error",
273
- "unicorn/no-unnecessary-array-flat-depth": "error",
274
- "unicorn/no-unnecessary-array-splice-count": "error",
275
- "unicorn/no-unnecessary-await": "error",
258
+ "unicorn/no-this-outside-of-class": "off", // disagree somewhat with the rule, flags stateful objects
276
259
  "unicorn/no-unnecessary-polyfills": "off",
277
- "unicorn/no-unnecessary-slice-end": "error",
278
260
  "unicorn/no-unreadable-array-destructuring": "off",
279
- "unicorn/no-unreadable-iife": "off",
280
- "unicorn/no-useless-collection-argument": "error",
281
- "unicorn/no-useless-error-capture-stack-trace": "error",
282
- "unicorn/no-useless-fallback-in-spread": "error",
283
- "unicorn/no-useless-iterator-to-array": "error",
284
- "unicorn/no-useless-length-check": "error",
285
- "unicorn/no-useless-promise-resolve-reject": "error",
286
- "unicorn/no-useless-spread": "error",
287
261
  "unicorn/no-useless-switch-case": "off",
288
262
  "unicorn/no-useless-undefined": "off", // opinionated, I prefer to explicitly pass undefined
289
- "unicorn/no-zero-fractions": "error",
290
- "unicorn/number-literal-case": [
291
- "error",
292
- { hexadecimalValue: "lowercase" },
293
- ],
294
- "unicorn/numeric-separators-style": "off",
295
- "unicorn/prefer-add-event-listener": "error",
296
- "unicorn/prefer-array-find": "error",
297
- "unicorn/prefer-array-flat": "error",
298
- "unicorn/prefer-array-flat-map": "error",
299
- "unicorn/prefer-array-index-of": "error",
300
- "unicorn/prefer-array-some": "error",
301
- "unicorn/prefer-at": "error",
302
263
  "unicorn/prefer-bigint-literals": "off",
303
- "unicorn/prefer-blob-reading-methods": "error",
304
- "unicorn/prefer-class-fields": "error",
305
- "unicorn/prefer-classlist-toggle": "error",
306
- "unicorn/prefer-code-point": "error",
307
- "unicorn/prefer-date-now": "error",
308
- "unicorn/prefer-default-parameters": "error",
309
- "unicorn/prefer-dom-node-append": "error",
310
- "unicorn/prefer-dom-node-dataset": "error",
311
- "unicorn/prefer-dom-node-remove": "error",
312
- "unicorn/prefer-dom-node-text-content": "error",
313
- "unicorn/prefer-event-target": "error",
314
- "unicorn/prefer-export-from": "error",
264
+ "unicorn/prefer-boolean-return": "off", // creates inconsistent functions when using multiple conditions
315
265
  "unicorn/prefer-global-this": "off",
266
+ "unicorn/prefer-hoisting-branch-code": "off", // lots of false positives with TypeScript code
316
267
  "unicorn/prefer-import-meta-properties": "error",
317
- "unicorn/prefer-includes": "error",
318
- "unicorn/prefer-keyboard-event-key": "error",
319
- "unicorn/prefer-logical-operator-over-ternary": "off",
320
- "unicorn/prefer-math-min-max": "error",
321
- "unicorn/prefer-math-trunc": "error",
322
- "unicorn/prefer-modern-dom-apis": "error",
323
- "unicorn/prefer-modern-math-apis": "error",
268
+ "unicorn/prefer-minimal-ternary": "off", // situational, i dont think `foo[expr ? "x": "y"].bar` is more readable than `expr ? foo.x.bar : foo.y.bar`.
324
269
  "unicorn/prefer-module": "off",
325
- "unicorn/prefer-native-coercion-functions": "off",
326
- "unicorn/prefer-negative-index": "error",
327
- "unicorn/prefer-number-properties": "error",
328
- "unicorn/prefer-object-from-entries": "error",
329
270
  "unicorn/prefer-optional-catch-binding": "off", // covered by sonarjs/no-ignored-exceptions
330
- "unicorn/prefer-prototype-methods": "error",
331
- "unicorn/prefer-query-selector": "error",
332
- "unicorn/prefer-reflect-apply": "error",
333
- "unicorn/prefer-regexp-test": "error",
334
- "unicorn/prefer-response-static-json": "off",
335
- "unicorn/prefer-set-has": "error",
336
- "unicorn/prefer-set-size": "error",
337
- "unicorn/prefer-simple-condition-first": "error",
271
+ "unicorn/prefer-promise-try": "off", // baseline but requires Node.js 23
272
+ "unicorn/prefer-queue-microtask": [
273
+ "error",
274
+ { checkSetImmediate: true, checkSetTimeout: true },
275
+ ],
276
+ "unicorn/prefer-scoped-selector": "off",
338
277
  "unicorn/prefer-single-call": "off",
339
278
  "unicorn/prefer-spread": "off", // for now
340
279
  "unicorn/prefer-string-raw": "off", // for now
341
- "unicorn/prefer-string-replace-all": "error",
342
- "unicorn/prefer-string-slice": "error",
343
- "unicorn/prefer-string-starts-ends-with": "error",
344
- "unicorn/prefer-string-trim-start-end": "error",
345
280
  "unicorn/prefer-structured-clone": "off", // we use `deepClone` from `@fkui/logic` and structuredClone does not play well with jest
346
- "unicorn/prefer-switch": "error",
347
281
  "unicorn/prefer-ternary": "off",
348
- "unicorn/prefer-top-level-await": "error",
349
- "unicorn/prefer-type-error": "error",
350
- "unicorn/prevent-abbreviations": "off",
351
- "unicorn/relative-url-style": "error",
352
- "unicorn/require-array-join-separator": "error",
282
+ "unicorn/prefer-uint8array-base64": "off",
283
+ "unicorn/relative-url-style": "warn",
353
284
  "unicorn/require-module-attributes": "off",
354
285
  "unicorn/require-module-specifiers": "off",
355
- "unicorn/require-number-to-fixed-digits-argument": "error",
356
286
  "unicorn/switch-case-braces": "off",
357
- "unicorn/switch-case-break-position": "error",
358
287
  "unicorn/text-encoding-identifier-case": "error",
359
- "unicorn/throw-new-error": "error",
360
288
  ...filterRules(prettierConfig.rules, (rule) => {
361
289
  return rule.startsWith("unicorn/");
362
290
  }),
@@ -476,6 +404,7 @@ export default [
476
404
  "error",
477
405
  {
478
406
  case: "pascalCase",
407
+ checkDirectories: false,
479
408
  },
480
409
  ],
481
410
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forsakringskassan/eslint-config",
3
- "version": "15.2.0",
3
+ "version": "15.3.0",
4
4
  "description": "Försäkringskassans eslint shareable config",
5
5
  "keywords": [
6
6
  "eslint"
@@ -33,7 +33,7 @@
33
33
  "eslint-plugin-prettier": "5.5.6",
34
34
  "eslint-plugin-regexp": "3.1.1",
35
35
  "eslint-plugin-sonarjs": "4.1.0",
36
- "eslint-plugin-unicorn": "64.0.0",
36
+ "eslint-plugin-unicorn": "70.0.0",
37
37
  "globals": "17.7.0"
38
38
  },
39
39
  "peerDependencies": {
@@ -42,5 +42,5 @@
42
42
  "engines": {
43
43
  "node": "^22.13 || >= 24"
44
44
  },
45
- "gitHead": "8742bcf2942a0d25f09593c949076ec9aaedc95a"
45
+ "gitHead": "a50f14767cf4c9f687b56f81cf9c790208165ecc"
46
46
  }