@gooddata/eslint-config 11.62.0-alpha.2 → 11.62.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2392 +0,0 @@
1
- {
2
- "plugins": [
3
- "header",
4
- "no-barrel-files",
5
- "import-x",
6
- "sonarjs",
7
- "react",
8
- "react-hooks",
9
- "playwright",
10
- "chai-friendly",
11
- "no-only-tests"
12
- ],
13
- "rules": {
14
- "constructor-super": "error",
15
- "for-direction": "error",
16
- "getter-return": "error",
17
- "no-async-promise-executor": "error",
18
- "no-case-declarations": "error",
19
- "no-class-assign": "error",
20
- "no-compare-neg-zero": "error",
21
- "no-cond-assign": "error",
22
- "no-const-assign": "error",
23
- "no-constant-binary-expression": "error",
24
- "no-constant-condition": "error",
25
- "no-control-regex": "error",
26
- "no-debugger": "error",
27
- "no-dupe-class-members": "error",
28
- "no-dupe-else-if": "error",
29
- "no-dupe-keys": "error",
30
- "no-duplicate-case": "error",
31
- "no-empty": "error",
32
- "no-empty-character-class": "error",
33
- "no-empty-pattern": "off",
34
- "no-empty-static-block": "error",
35
- "no-ex-assign": "error",
36
- "no-fallthrough": "error",
37
- "no-func-assign": "error",
38
- "no-global-assign": "error",
39
- "no-import-assign": "error",
40
- "no-invalid-regexp": "error",
41
- "no-irregular-whitespace": "error",
42
- "no-loss-of-precision": "error",
43
- "no-misleading-character-class": "error",
44
- "no-new-native-nonconstructor": "error",
45
- "no-nonoctal-decimal-escape": "error",
46
- "no-obj-calls": "error",
47
- "no-prototype-builtins": "error",
48
- "no-redeclare": "error",
49
- "no-regex-spaces": "error",
50
- "no-self-assign": "error",
51
- "no-setter-return": "error",
52
- "no-shadow-restricted-names": "error",
53
- "no-sparse-arrays": "error",
54
- "no-this-before-super": "error",
55
- "no-undef": "error",
56
- "no-unreachable": "error",
57
- "no-unsafe-finally": "error",
58
- "no-unsafe-negation": "error",
59
- "no-unsafe-optional-chaining": "error",
60
- "no-unused-labels": "error",
61
- "no-unused-private-class-members": "error",
62
- "no-unused-vars": "error",
63
- "no-useless-backreference": "error",
64
- "no-useless-catch": "error",
65
- "no-with": "error",
66
- "require-yield": "error",
67
- "use-isnan": "error",
68
- "valid-typeof": "error",
69
- "no-restricted-imports": [
70
- "error",
71
- {
72
- "paths": [
73
- {
74
- "name": "react",
75
- "importNames": [
76
- "default"
77
- ],
78
- "message": "Default import from React is not allowed. Use named imports instead."
79
- },
80
- {
81
- "name": "react-dom",
82
- "importNames": [
83
- "default"
84
- ],
85
- "message": "Default import from React DOM is not allowed. Use named imports instead."
86
- },
87
- {
88
- "name": "@gooddata/sdk-ui-kit",
89
- "importNames": [
90
- "Icon"
91
- ],
92
- "message": "The Icon export cannot be tree-shaken, use {IconName}Icon imports instead."
93
- },
94
- {
95
- "name": "vitest",
96
- "importNames": [
97
- "test"
98
- ],
99
- "message": "Use 'it' instead of 'test' for consistency."
100
- }
101
- ],
102
- "patterns": [
103
- {
104
- "group": [
105
- "lodash-es"
106
- ],
107
- "importNames": [
108
- "get",
109
- "getOr"
110
- ],
111
- "message": "Please use the ?. and ?? operators instead."
112
- },
113
- {
114
- "group": [
115
- "lodash-es"
116
- ],
117
- "importNames": [
118
- "keys"
119
- ],
120
- "message": "Please use Object.keys() instead."
121
- },
122
- {
123
- "group": [
124
- "lodash-es"
125
- ],
126
- "importNames": [
127
- "values"
128
- ],
129
- "message": "Please use Object.values() instead."
130
- },
131
- {
132
- "group": [
133
- "lodash-es"
134
- ],
135
- "importNames": [
136
- "entries",
137
- "toPairs"
138
- ],
139
- "message": "Please use Object.entries() instead."
140
- },
141
- {
142
- "group": [
143
- "lodash-es"
144
- ],
145
- "importNames": [
146
- "map"
147
- ],
148
- "message": "Please use Array.prototype.map() instead."
149
- },
150
- {
151
- "group": [
152
- "lodash-es"
153
- ],
154
- "importNames": [
155
- "flatMap"
156
- ],
157
- "message": "Please use Array.prototype.flatMap() instead."
158
- },
159
- {
160
- "group": [
161
- "lodash-es"
162
- ],
163
- "importNames": [
164
- "filter"
165
- ],
166
- "message": "Please use Array.prototype.filter() instead."
167
- },
168
- {
169
- "group": [
170
- "lodash-es"
171
- ],
172
- "importNames": [
173
- "find"
174
- ],
175
- "message": "Please use Array.prototype.find() instead."
176
- },
177
- {
178
- "group": [
179
- "lodash-es"
180
- ],
181
- "importNames": [
182
- "findIndex"
183
- ],
184
- "message": "Please use Array.prototype.findIndex() instead."
185
- },
186
- {
187
- "group": [
188
- "lodash-es"
189
- ],
190
- "importNames": [
191
- "includes"
192
- ],
193
- "message": "Please use Array.prototype.includes() instead."
194
- },
195
- {
196
- "group": [
197
- "lodash-es"
198
- ],
199
- "importNames": [
200
- "some"
201
- ],
202
- "message": "Please use Array.prototype.some() instead."
203
- },
204
- {
205
- "group": [
206
- "lodash-es"
207
- ],
208
- "importNames": [
209
- "every"
210
- ],
211
- "message": "Please use Array.prototype.every() instead."
212
- },
213
- {
214
- "group": [
215
- "lodash-es"
216
- ],
217
- "importNames": [
218
- "concat"
219
- ],
220
- "message": "Please use Array.prototype.concat() or spread [...arr1, ...arr2] instead."
221
- },
222
- {
223
- "group": [
224
- "lodash-es"
225
- ],
226
- "importNames": [
227
- "reverse"
228
- ],
229
- "message": "Please use Array.prototype.reverse() instead."
230
- },
231
- {
232
- "group": [
233
- "lodash-es"
234
- ],
235
- "importNames": [
236
- "slice"
237
- ],
238
- "message": "Please use Array.prototype.slice() instead."
239
- },
240
- {
241
- "group": [
242
- "lodash-es"
243
- ],
244
- "importNames": [
245
- "indexOf"
246
- ],
247
- "message": "Please use Array.prototype.indexOf() instead."
248
- },
249
- {
250
- "group": [
251
- "lodash-es"
252
- ],
253
- "importNames": [
254
- "lastIndexOf"
255
- ],
256
- "message": "Please use Array.prototype.lastIndexOf() instead."
257
- },
258
- {
259
- "group": [
260
- "lodash-es"
261
- ],
262
- "importNames": [
263
- "fill"
264
- ],
265
- "message": "Please use Array.prototype.fill() instead."
266
- },
267
- {
268
- "group": [
269
- "lodash-es"
270
- ],
271
- "importNames": [
272
- "startsWith"
273
- ],
274
- "message": "Please use String.prototype.startsWith() instead."
275
- },
276
- {
277
- "group": [
278
- "lodash-es"
279
- ],
280
- "importNames": [
281
- "endsWith"
282
- ],
283
- "message": "Please use String.prototype.endsWith() instead."
284
- },
285
- {
286
- "group": [
287
- "lodash-es"
288
- ],
289
- "importNames": [
290
- "repeat"
291
- ],
292
- "message": "Please use String.prototype.repeat() instead."
293
- },
294
- {
295
- "group": [
296
- "lodash-es"
297
- ],
298
- "importNames": [
299
- "padStart"
300
- ],
301
- "message": "Please use String.prototype.padStart() instead."
302
- },
303
- {
304
- "group": [
305
- "lodash-es"
306
- ],
307
- "importNames": [
308
- "padEnd"
309
- ],
310
- "message": "Please use String.prototype.padEnd() instead."
311
- },
312
- {
313
- "group": [
314
- "lodash-es"
315
- ],
316
- "importNames": [
317
- "trim"
318
- ],
319
- "message": "Please use String.prototype.trim() instead."
320
- },
321
- {
322
- "group": [
323
- "lodash-es"
324
- ],
325
- "importNames": [
326
- "trimStart",
327
- "trimLeft"
328
- ],
329
- "message": "Please use String.prototype.trimStart() instead."
330
- },
331
- {
332
- "group": [
333
- "lodash-es"
334
- ],
335
- "importNames": [
336
- "trimEnd",
337
- "trimRight"
338
- ],
339
- "message": "Please use String.prototype.trimEnd() instead."
340
- },
341
- {
342
- "group": [
343
- "lodash-es"
344
- ],
345
- "importNames": [
346
- "toUpper"
347
- ],
348
- "message": "Please use String.prototype.toUpperCase() instead."
349
- },
350
- {
351
- "group": [
352
- "lodash-es"
353
- ],
354
- "importNames": [
355
- "toLower"
356
- ],
357
- "message": "Please use String.prototype.toLowerCase() instead."
358
- },
359
- {
360
- "group": [
361
- "lodash-es"
362
- ],
363
- "importNames": [
364
- "isArray"
365
- ],
366
- "message": "Please use Array.isArray() instead."
367
- },
368
- {
369
- "group": [
370
- "lodash-es"
371
- ],
372
- "importNames": [
373
- "isNaN"
374
- ],
375
- "message": "Please use Number.isNaN() instead."
376
- },
377
- {
378
- "group": [
379
- "lodash-es"
380
- ],
381
- "importNames": [
382
- "isFinite"
383
- ],
384
- "message": "Please use Number.isFinite() instead."
385
- },
386
- {
387
- "group": [
388
- "lodash-es"
389
- ],
390
- "importNames": [
391
- "isInteger"
392
- ],
393
- "message": "Please use Number.isInteger() instead."
394
- },
395
- {
396
- "group": [
397
- "lodash-es"
398
- ],
399
- "importNames": [
400
- "isNull"
401
- ],
402
- "message": "Please use value === null instead."
403
- },
404
- {
405
- "group": [
406
- "lodash-es"
407
- ],
408
- "importNames": [
409
- "isUndefined"
410
- ],
411
- "message": "Please use value === undefined instead."
412
- },
413
- {
414
- "group": [
415
- "lodash-es"
416
- ],
417
- "importNames": [
418
- "defaultTo"
419
- ],
420
- "message": "Please use value ?? defaultValue instead."
421
- },
422
- {
423
- "group": [
424
- "lodash-es"
425
- ],
426
- "importNames": [
427
- "assign"
428
- ],
429
- "message": "Please use Object.assign() or spread syntax {...obj} instead."
430
- },
431
- {
432
- "group": [
433
- "lodash-es"
434
- ],
435
- "importNames": [
436
- "flatten"
437
- ],
438
- "message": "Please use Array.prototype.flat() instead."
439
- },
440
- {
441
- "group": [
442
- "lodash-es"
443
- ],
444
- "importNames": [
445
- "flattenDeep"
446
- ],
447
- "message": "Please use Array.prototype.flat(Infinity) instead."
448
- },
449
- {
450
- "group": [
451
- "lodash-es"
452
- ],
453
- "importNames": [
454
- "isNil"
455
- ],
456
- "message": "Please use value === null || value === undefined instead."
457
- },
458
- {
459
- "group": [
460
- "lodash-es"
461
- ],
462
- "importNames": [
463
- "noop"
464
- ],
465
- "message": "Please use () => {} instead."
466
- },
467
- {
468
- "group": [
469
- "lodash-es"
470
- ],
471
- "importNames": [
472
- "identity"
473
- ],
474
- "message": "Please use x => x instead."
475
- },
476
- {
477
- "group": [
478
- "lodash-es"
479
- ],
480
- "importNames": [
481
- "first",
482
- "head"
483
- ],
484
- "message": "Please use Array.prototype.at(0) instead."
485
- },
486
- {
487
- "group": [
488
- "lodash-es"
489
- ],
490
- "importNames": [
491
- "last"
492
- ],
493
- "message": "Please use Array.prototype.at(-1) instead."
494
- },
495
- {
496
- "group": [
497
- "lodash-es"
498
- ],
499
- "importNames": [
500
- "forEach"
501
- ],
502
- "message": "Please use Array.prototype.forEach() instead."
503
- },
504
- {
505
- "group": [
506
- "lodash-es"
507
- ],
508
- "importNames": [
509
- "fromPairs"
510
- ],
511
- "message": "Please use Object.fromEntries() instead."
512
- },
513
- {
514
- "group": [
515
- "lodash-es"
516
- ],
517
- "importNames": [
518
- "join"
519
- ],
520
- "message": "Please use Array.prototype.join() instead."
521
- },
522
- {
523
- "group": [
524
- "lodash-es"
525
- ],
526
- "importNames": [
527
- "isDate"
528
- ],
529
- "message": "Please use val instanceof Date instead."
530
- },
531
- {
532
- "group": [
533
- "lodash-es"
534
- ],
535
- "importNames": [
536
- "isFunction"
537
- ],
538
- "message": "Please use typeof val === 'function' instead."
539
- },
540
- {
541
- "group": [
542
- "lodash-es"
543
- ],
544
- "importNames": [
545
- "isNumber"
546
- ],
547
- "message": "Please use typeof val === 'number' instead."
548
- },
549
- {
550
- "group": [
551
- "lodash-es"
552
- ],
553
- "importNames": [
554
- "isObject"
555
- ],
556
- "message": "Please use val !== null && typeof val === 'object' instead."
557
- },
558
- {
559
- "group": [
560
- "lodash-es"
561
- ],
562
- "importNames": [
563
- "isString"
564
- ],
565
- "message": "Please use typeof val === 'string' instead."
566
- },
567
- {
568
- "group": [
569
- "lodash-es"
570
- ],
571
- "importNames": [
572
- "toString"
573
- ],
574
- "message": "Please use String(val) instead."
575
- },
576
- {
577
- "group": [
578
- "lodash-es"
579
- ],
580
- "importNames": [
581
- "flow",
582
- "flowRight"
583
- ],
584
- "message": "Please use refactoring your code instead."
585
- }
586
- ]
587
- }
588
- ],
589
- "sort-imports": [
590
- "error",
591
- {
592
- "ignoreCase": false,
593
- "ignoreDeclarationSort": true,
594
- "ignoreMemberSort": false
595
- }
596
- ],
597
- "no-useless-escape": "off",
598
- "no-unneeded-ternary": [
599
- "error",
600
- {
601
- "defaultAssignment": false
602
- }
603
- ],
604
- "no-extra-boolean-cast": "error",
605
- "no-caller": "error",
606
- "no-eval": "error",
607
- "no-delete-var": "error",
608
- "no-restricted-exports": [
609
- "error",
610
- {
611
- "restrictDefaultExports": {
612
- "direct": true,
613
- "named": true,
614
- "defaultFrom": true,
615
- "namedFrom": true,
616
- "namespaceFrom": true
617
- }
618
- }
619
- ],
620
- "no-negated-condition": "error",
621
- "no-duplicate-imports": [
622
- "error",
623
- {
624
- "includeExports": true
625
- }
626
- ],
627
- "prefer-const": "off",
628
- "no-console": [
629
- "error",
630
- {
631
- "allow": [
632
- "warn",
633
- "error"
634
- ]
635
- }
636
- ],
637
- "no-octal": "error",
638
- "no-dupe-args": "error",
639
- "no-restricted-syntax": [
640
- "error",
641
- {
642
- "selector": "MemberExpression[object.name='React']",
643
- "message": "Do not use `React.*`. Use named imports instead."
644
- },
645
- {
646
- "selector": "MemberExpression[object.name='ReactDOM']",
647
- "message": "Do not use `ReactDOM.*`. Use named imports instead."
648
- }
649
- ],
650
- "no-octal-escape": "error",
651
- "header/header": [
652
- 2,
653
- "line",
654
- {
655
- "pattern": "^ \\(C\\) \\d{4}(-\\d{4})? GoodData Corporation$",
656
- "template": " (C) 2026 GoodData Corporation"
657
- }
658
- ],
659
- "no-barrel-files/no-barrel-files": "error",
660
- "import-x/named": "error",
661
- "import-x/namespace": "error",
662
- "import-x/default": "error",
663
- "import-x/export": "error",
664
- "import-x/no-named-as-default": "warn",
665
- "import-x/no-named-as-default-member": "warn",
666
- "import-x/no-duplicates": "warn",
667
- "import-x/no-unassigned-import": [
668
- "error",
669
- {
670
- "allow": [
671
- "**/*.css",
672
- "**/*.scss"
673
- ]
674
- }
675
- ],
676
- "sonarjs/function-name": "off",
677
- "sonarjs/max-lines": "off",
678
- "sonarjs/no-tab": "off",
679
- "sonarjs/variable-name": "off",
680
- "sonarjs/comment-regex": "off",
681
- "sonarjs/elseif-without-else": "off",
682
- "sonarjs/no-fallthrough": "error",
683
- "sonarjs/nested-control-flow": "off",
684
- "sonarjs/too-many-break-or-continue-in-loop": "off",
685
- "sonarjs/max-lines-per-function": "off",
686
- "sonarjs/no-nested-incdec": "off",
687
- "sonarjs/no-equals-in-for-termination": "error",
688
- "sonarjs/no-extra-arguments": "error",
689
- "sonarjs/no-collapsible-if": "off",
690
- "sonarjs/expression-complexity": "off",
691
- "sonarjs/no-redundant-parentheses": "off",
692
- "sonarjs/no-labels": "error",
693
- "sonarjs/no-redundant-boolean": "error",
694
- "sonarjs/prefer-single-boolean-return": "error",
695
- "sonarjs/unused-import": "error",
696
- "sonarjs/useless-string-operation": "off",
697
- "sonarjs/no-unused-function-argument": "off",
698
- "sonarjs/no-case-label-in-switch": "error",
699
- "sonarjs/no-parameter-reassignment": "error",
700
- "sonarjs/prefer-while": "error",
701
- "sonarjs/no-sonar-comments": "off",
702
- "sonarjs/no-small-switch": "error",
703
- "sonarjs/no-hardcoded-ip": "error",
704
- "sonarjs/label-position": "error",
705
- "sonarjs/file-header": "off",
706
- "sonarjs/call-argument-line": "error",
707
- "sonarjs/max-switch-cases": "error",
708
- "sonarjs/prefer-immediate-return": "off",
709
- "sonarjs/function-inside-loop": "error",
710
- "sonarjs/no-variable-usage-before-declaration": "off",
711
- "sonarjs/future-reserved-words": "error",
712
- "sonarjs/array-constructor": "off",
713
- "sonarjs/bitwise-operators": "error",
714
- "sonarjs/no-function-declaration-in-block": "off",
715
- "sonarjs/no-primitive-wrappers": "error",
716
- "sonarjs/for-in": "off",
717
- "sonarjs/cyclomatic-complexity": "off",
718
- "sonarjs/no-identical-expressions": "error",
719
- "sonarjs/no-nested-switch": "off",
720
- "sonarjs/no-identical-conditions": "error",
721
- "sonarjs/no-duplicated-branches": "error",
722
- "sonarjs/misplaced-loop-counter": "error",
723
- "sonarjs/sql-queries": "error",
724
- "sonarjs/insecure-cookie": "error",
725
- "sonarjs/no-useless-increment": "error",
726
- "sonarjs/no-undefined-assignment": "off",
727
- "sonarjs/no-wildcard-import": "off",
728
- "sonarjs/for-loop-increment-sign": "error",
729
- "sonarjs/cookies": "off",
730
- "sonarjs/null-dereference": "error",
731
- "sonarjs/updated-loop-counter": "error",
732
- "sonarjs/block-scoped-var": "error",
733
- "sonarjs/no-built-in-override": "off",
734
- "sonarjs/prefer-object-literal": "off",
735
- "sonarjs/no-gratuitous-expressions": "error",
736
- "sonarjs/file-uploads": "error",
737
- "sonarjs/file-permissions": "error",
738
- "sonarjs/no-empty-character-class": "error",
739
- "sonarjs/no-unenclosed-multiline-block": "error",
740
- "sonarjs/index-of-compare-to-positive-number": "error",
741
- "sonarjs/no-useless-catch": "error",
742
- "sonarjs/xml-parser-xxe": "error",
743
- "sonarjs/non-existent-operator": "error",
744
- "sonarjs/web-sql-database": "off",
745
- "sonarjs/no-array-delete": "error",
746
- "sonarjs/no-incomplete-assertions": "error",
747
- "sonarjs/no-global-this": "error",
748
- "sonarjs/new-operator-misuse": "error",
749
- "sonarjs/no-delete-var": "error",
750
- "sonarjs/strings-comparison": "off",
751
- "sonarjs/file-name-differ-from-class": "off",
752
- "sonarjs/cookie-no-httponly": "error",
753
- "sonarjs/no-incorrect-string-concat": "off",
754
- "sonarjs/inverted-assertion-arguments": "error",
755
- "sonarjs/shorthand-property-grouping": "off",
756
- "sonarjs/updated-const-var": "error",
757
- "sonarjs/arguments-usage": "off",
758
- "sonarjs/destructuring-assignment-syntax": "off",
759
- "sonarjs/arrow-function-convention": "off",
760
- "sonarjs/class-prototype": "off",
761
- "sonarjs/no-require-or-define": "off",
762
- "sonarjs/no-associative-arrays": "error",
763
- "sonarjs/comma-or-logical-or-case": "error",
764
- "sonarjs/no-redundant-jump": "error",
765
- "sonarjs/inconsistent-function-call": "error",
766
- "sonarjs/no-use-of-empty-return-value": "error",
767
- "sonarjs/enforce-trailing-comma": "off",
768
- "sonarjs/operation-returning-nan": "off",
769
- "sonarjs/values-not-convertible-to-numbers": "off",
770
- "sonarjs/non-number-in-arithmetic-expression": "off",
771
- "sonarjs/in-operator-type-error": "error",
772
- "sonarjs/declarations-in-global-scope": "off",
773
- "sonarjs/no-inconsistent-returns": "off",
774
- "sonarjs/no-reference-error": "off",
775
- "sonarjs/super-invocation": "error",
776
- "sonarjs/no-all-duplicated-branches": "error",
777
- "sonarjs/no-same-line-conditional": "error",
778
- "sonarjs/conditional-indentation": "off",
779
- "sonarjs/no-collection-size-mischeck": "error",
780
- "sonarjs/no-unthrown-error": "error",
781
- "sonarjs/no-unused-collection": "error",
782
- "sonarjs/no-for-in-iterable": "off",
783
- "sonarjs/no-element-overwrite": "error",
784
- "sonarjs/no-identical-functions": "error",
785
- "sonarjs/no-empty-collection": "error",
786
- "sonarjs/no-redundant-assignments": "error",
787
- "sonarjs/prefer-type-guard": "error",
788
- "sonarjs/no-return-type-any": "off",
789
- "sonarjs/no-implicit-dependencies": "off",
790
- "sonarjs/weak-ssl": "error",
791
- "sonarjs/no-weak-keys": "error",
792
- "sonarjs/csrf": "error",
793
- "sonarjs/production-debug": "error",
794
- "sonarjs/no-in-misuse": "error",
795
- "sonarjs/no-duplicate-in-composite": "error",
796
- "sonarjs/max-union-size": "off",
797
- "sonarjs/no-nested-template-literals": "error",
798
- "sonarjs/regular-expr": "off",
799
- "sonarjs/encryption": "off",
800
- "sonarjs/hashing": "error",
801
- "sonarjs/bool-param-default": "off",
802
- "sonarjs/xpath": "off",
803
- "sonarjs/sockets": "off",
804
- "sonarjs/process-argv": "off",
805
- "sonarjs/standard-input": "off",
806
- "sonarjs/unverified-certificate": "error",
807
- "sonarjs/cors": "error",
808
- "sonarjs/disabled-auto-escaping": "error",
809
- "sonarjs/no-table-as-layout": "error",
810
- "sonarjs/table-header-reference": "error",
811
- "sonarjs/object-alt-content": "error",
812
- "sonarjs/publicly-writable-directories": "error",
813
- "sonarjs/unverified-hostname": "error",
814
- "sonarjs/encryption-secure-mode": "error",
815
- "sonarjs/no-weak-cipher": "error",
816
- "sonarjs/no-intrusive-permissions": "error",
817
- "sonarjs/insecure-jwt-token": "error",
818
- "sonarjs/x-powered-by": "error",
819
- "sonarjs/hidden-files": "error",
820
- "sonarjs/content-length": "error",
821
- "sonarjs/disabled-resource-integrity": "error",
822
- "sonarjs/content-security-policy": "error",
823
- "sonarjs/no-mixed-content": "error",
824
- "sonarjs/frame-ancestors": "error",
825
- "sonarjs/no-mime-sniff": "error",
826
- "sonarjs/no-referrer-policy": "error",
827
- "sonarjs/strict-transport-security": "error",
828
- "sonarjs/certificate-transparency": "off",
829
- "sonarjs/dns-prefetching": "off",
830
- "sonarjs/confidential-information-logging": "error",
831
- "sonarjs/no-ip-forward": "error",
832
- "sonarjs/no-invalid-regexp": "error",
833
- "sonarjs/unused-named-groups": "error",
834
- "sonarjs/no-same-argument-assert": "error",
835
- "sonarjs/unicode-aware-regex": "off",
836
- "sonarjs/no-misleading-character-class": "error",
837
- "sonarjs/session-regeneration": "error",
838
- "sonarjs/test-check-exception": "error",
839
- "sonarjs/stable-tests": "error",
840
- "sonarjs/no-empty-after-reluctant": "error",
841
- "sonarjs/no-code-after-done": "error",
842
- "sonarjs/disabled-timeout": "error",
843
- "sonarjs/chai-determinate-assertion": "error",
844
- "sonarjs/aws-s3-bucket-server-encryption": "off",
845
- "sonarjs/aws-s3-bucket-insecure-http": "error",
846
- "sonarjs/aws-s3-bucket-versioning": "error",
847
- "sonarjs/aws-s3-bucket-granted-access": "error",
848
- "sonarjs/no-angular-bypass-sanitization": "error",
849
- "sonarjs/aws-iam-public-access": "error",
850
- "sonarjs/aws-ec2-unencrypted-ebs-volume": "error",
851
- "sonarjs/aws-s3-bucket-public-access": "error",
852
- "sonarjs/no-vue-bypass-sanitization": "off",
853
- "sonarjs/aws-iam-all-privileges": "error",
854
- "sonarjs/aws-rds-unencrypted-databases": "error",
855
- "sonarjs/aws-iam-all-resources-accessible": "off",
856
- "sonarjs/aws-opensearchservice-domain": "error",
857
- "sonarjs/aws-iam-privilege-escalation": "error",
858
- "sonarjs/aws-sagemaker-unencrypted-notebook": "error",
859
- "sonarjs/aws-restricted-ip-admin-access": "error",
860
- "sonarjs/no-empty-alternatives": "error",
861
- "sonarjs/no-regex-spaces": "error",
862
- "sonarjs/aws-sns-unencrypted-topics": "error",
863
- "sonarjs/existing-groups": "error",
864
- "sonarjs/aws-ec2-rds-dms-public": "error",
865
- "sonarjs/aws-sqs-unencrypted-queue": "error",
866
- "sonarjs/no-empty-group": "error",
867
- "sonarjs/aws-efs-unencrypted": "error",
868
- "sonarjs/aws-apigateway-public-api": "error",
869
- "sonarjs/stateful-regex": "error",
870
- "sonarjs/single-char-in-character-classes": "error",
871
- "sonarjs/no-exclusive-tests": "error",
872
- "sonarjs/hardcoded-secret-signatures": "error",
873
- "sonarjs/jsx-no-leaked-render": "error",
874
- "sonarjs/no-hook-setter-in-body": "error",
875
- "sonarjs/no-uniq-key": "error",
876
- "sonarjs/no-internal-api-use": "error",
877
- "sonarjs/no-literal-call": "error",
878
- "sonarjs/review-blockchain-mnemonic": "error",
879
- "sonarjs/dynamically-constructed-templates": "error",
880
- "sonarjs/no-duplicate-string": "off",
881
- "sonarjs/cognitive-complexity": "warn",
882
- "sonarjs/todo-tag": "warn",
883
- "sonarjs/no-hardcoded-passwords": "off",
884
- "sonarjs/no-alphabetical-sort": "off",
885
- "sonarjs/no-os-command-from-path": "off",
886
- "sonarjs/os-command": "off",
887
- "sonarjs/prefer-regexp-exec": "off",
888
- "sonarjs/no-clear-text-protocols": "off",
889
- "sonarjs/deprecation": "off",
890
- "sonarjs/no-nested-conditional": "off",
891
- "sonarjs/no-ignored-exceptions": "off",
892
- "sonarjs/slow-regex": "off",
893
- "sonarjs/prefer-read-only-props": "off",
894
- "sonarjs/no-skipped-tests": "off",
895
- "sonarjs/no-commented-code": "off",
896
- "sonarjs/no-ignored-return": "off",
897
- "sonarjs/array-callback-without-return": "off",
898
- "sonarjs/pseudo-random": "off",
899
- "sonarjs/no-nested-functions": "off",
900
- "sonarjs/no-async-constructor": "off",
901
- "sonarjs/assertions-in-tests": "off",
902
- "sonarjs/function-return-type": "off",
903
- "sonarjs/no-unused-vars": "off",
904
- "sonarjs/no-invariant-returns": "off",
905
- "sonarjs/different-types-comparison": "off",
906
- "sonarjs/no-selector-parameter": "off",
907
- "sonarjs/anchor-precedence": "off",
908
- "sonarjs/redundant-type-aliases": "off",
909
- "sonarjs/no-redundant-optional": "off",
910
- "sonarjs/reduce-initial-value": "off",
911
- "sonarjs/no-globals-shadowing": "off",
912
- "sonarjs/use-type-alias": "off",
913
- "sonarjs/void-use": "off",
914
- "sonarjs/no-undefined-argument": "off",
915
- "sonarjs/no-useless-react-setstate": "off",
916
- "sonarjs/no-inverted-boolean-check": "off",
917
- "sonarjs/concise-regex": "off",
918
- "sonarjs/no-dead-store": "off",
919
- "sonarjs/public-static-readonly": "off",
920
- "sonarjs/code-eval": "off",
921
- "sonarjs/no-misleading-array-reverse": "off",
922
- "sonarjs/fixme-tag": "off",
923
- "sonarjs/argument-type": "off",
924
- "sonarjs/constructor-for-side-effects": "off",
925
- "sonarjs/no-useless-intersection": "off",
926
- "sonarjs/no-empty-test-file": "off",
927
- "sonarjs/prefer-default-last": "off",
928
- "sonarjs/prefer-promise-shorthand": "off",
929
- "sonarjs/no-unsafe-unzip": "off",
930
- "sonarjs/no-nested-assignment": "off",
931
- "sonarjs/generator-without-yield": "off",
932
- "sonarjs/no-try-promise": "off",
933
- "sonarjs/single-character-alternation": "off",
934
- "sonarjs/class-name": "off",
935
- "sonarjs/no-hardcoded-secrets": "off",
936
- "sonarjs/regex-complexity": "off",
937
- "sonarjs/post-message": "off",
938
- "sonarjs/link-with-target-blank": "off",
939
- "sonarjs/duplicates-in-character-class": "off",
940
- "sonarjs/arguments-order": "off",
941
- "sonarjs/empty-string-repetition": "off",
942
- "sonarjs/table-header": "off",
943
- "sonarjs/no-implicit-global": "off",
944
- "sonarjs/no-control-regex": "off",
945
- "react/no-danger": "error",
946
- "react/jsx-boolean-value": [
947
- "error",
948
- "never"
949
- ],
950
- "react/react-in-jsx-scope": "off",
951
- "react/jsx-no-leaked-render": [
952
- "warn",
953
- {
954
- "validStrategies": [
955
- "ternary",
956
- "coerce"
957
- ]
958
- }
959
- ],
960
- "react/function-component-definition": [
961
- "error",
962
- {
963
- "namedComponents": "function-declaration",
964
- "unnamedComponents": "arrow-function"
965
- }
966
- ],
967
- "react-hooks/rules-of-hooks": "error",
968
- "react-hooks/exhaustive-deps": "error",
969
- "playwright/consistent-spacing-between-blocks": "warn",
970
- "playwright/expect-expect": "warn",
971
- "playwright/max-nested-describe": "warn",
972
- "playwright/missing-playwright-await": "error",
973
- "playwright/no-conditional-expect": "warn",
974
- "playwright/no-conditional-in-test": "warn",
975
- "playwright/no-duplicate-hooks": "warn",
976
- "playwright/no-duplicate-slow": "warn",
977
- "playwright/no-element-handle": "warn",
978
- "playwright/no-eval": "warn",
979
- "playwright/no-focused-test": "error",
980
- "playwright/no-force-option": "warn",
981
- "playwright/no-nested-step": "warn",
982
- "playwright/no-networkidle": "error",
983
- "playwright/no-page-pause": "warn",
984
- "playwright/no-skipped-test": "warn",
985
- "playwright/no-standalone-expect": "error",
986
- "playwright/no-unsafe-references": "error",
987
- "playwright/no-unused-locators": "error",
988
- "playwright/no-useless-await": "warn",
989
- "playwright/no-useless-not": "warn",
990
- "playwright/no-wait-for-navigation": "error",
991
- "playwright/no-wait-for-selector": "warn",
992
- "playwright/no-wait-for-timeout": "warn",
993
- "playwright/prefer-hooks-in-order": "warn",
994
- "playwright/prefer-hooks-on-top": "warn",
995
- "playwright/prefer-locator": "warn",
996
- "playwright/prefer-to-have-count": "warn",
997
- "playwright/prefer-to-have-length": "warn",
998
- "playwright/prefer-web-first-assertions": "error",
999
- "playwright/valid-describe-callback": "error",
1000
- "playwright/valid-expect": "error",
1001
- "playwright/valid-expect-in-promise": "error",
1002
- "playwright/valid-test-tags": "error",
1003
- "playwright/valid-title": "error",
1004
- "chai-friendly/no-unused-expressions": "error",
1005
- "no-only-tests/no-only-tests": [
1006
- "error",
1007
- {
1008
- "block": [
1009
- "fixture"
1010
- ],
1011
- "focus": [
1012
- "only"
1013
- ]
1014
- }
1015
- ]
1016
- },
1017
- "overrides": [
1018
- {
1019
- "files": [
1020
- "**/*.ts",
1021
- "**/*.tsx"
1022
- ],
1023
- "rules": {
1024
- "no-restricted-imports": [
1025
- "error",
1026
- {
1027
- "paths": [
1028
- {
1029
- "name": "react",
1030
- "importNames": [
1031
- "default"
1032
- ],
1033
- "message": "Default import from React is not allowed. Use named imports instead."
1034
- },
1035
- {
1036
- "name": "react-dom",
1037
- "importNames": [
1038
- "default"
1039
- ],
1040
- "message": "Default import from React DOM is not allowed. Use named imports instead."
1041
- },
1042
- {
1043
- "name": "@gooddata/sdk-ui-kit",
1044
- "importNames": [
1045
- "Icon"
1046
- ],
1047
- "message": "The Icon export cannot be tree-shaken, use {IconName}Icon imports instead."
1048
- },
1049
- {
1050
- "name": "vitest",
1051
- "importNames": [
1052
- "test"
1053
- ],
1054
- "message": "Use 'it' instead of 'test' for consistency."
1055
- }
1056
- ],
1057
- "patterns": [
1058
- {
1059
- "group": [
1060
- "lodash-es"
1061
- ],
1062
- "importNames": [
1063
- "get",
1064
- "getOr"
1065
- ],
1066
- "message": "Please use the ?. and ?? operators instead."
1067
- },
1068
- {
1069
- "group": [
1070
- "lodash-es"
1071
- ],
1072
- "importNames": [
1073
- "keys"
1074
- ],
1075
- "message": "Please use Object.keys() instead."
1076
- },
1077
- {
1078
- "group": [
1079
- "lodash-es"
1080
- ],
1081
- "importNames": [
1082
- "values"
1083
- ],
1084
- "message": "Please use Object.values() instead."
1085
- },
1086
- {
1087
- "group": [
1088
- "lodash-es"
1089
- ],
1090
- "importNames": [
1091
- "entries",
1092
- "toPairs"
1093
- ],
1094
- "message": "Please use Object.entries() instead."
1095
- },
1096
- {
1097
- "group": [
1098
- "lodash-es"
1099
- ],
1100
- "importNames": [
1101
- "map"
1102
- ],
1103
- "message": "Please use Array.prototype.map() instead."
1104
- },
1105
- {
1106
- "group": [
1107
- "lodash-es"
1108
- ],
1109
- "importNames": [
1110
- "flatMap"
1111
- ],
1112
- "message": "Please use Array.prototype.flatMap() instead."
1113
- },
1114
- {
1115
- "group": [
1116
- "lodash-es"
1117
- ],
1118
- "importNames": [
1119
- "filter"
1120
- ],
1121
- "message": "Please use Array.prototype.filter() instead."
1122
- },
1123
- {
1124
- "group": [
1125
- "lodash-es"
1126
- ],
1127
- "importNames": [
1128
- "find"
1129
- ],
1130
- "message": "Please use Array.prototype.find() instead."
1131
- },
1132
- {
1133
- "group": [
1134
- "lodash-es"
1135
- ],
1136
- "importNames": [
1137
- "findIndex"
1138
- ],
1139
- "message": "Please use Array.prototype.findIndex() instead."
1140
- },
1141
- {
1142
- "group": [
1143
- "lodash-es"
1144
- ],
1145
- "importNames": [
1146
- "includes"
1147
- ],
1148
- "message": "Please use Array.prototype.includes() instead."
1149
- },
1150
- {
1151
- "group": [
1152
- "lodash-es"
1153
- ],
1154
- "importNames": [
1155
- "some"
1156
- ],
1157
- "message": "Please use Array.prototype.some() instead."
1158
- },
1159
- {
1160
- "group": [
1161
- "lodash-es"
1162
- ],
1163
- "importNames": [
1164
- "every"
1165
- ],
1166
- "message": "Please use Array.prototype.every() instead."
1167
- },
1168
- {
1169
- "group": [
1170
- "lodash-es"
1171
- ],
1172
- "importNames": [
1173
- "concat"
1174
- ],
1175
- "message": "Please use Array.prototype.concat() or spread [...arr1, ...arr2] instead."
1176
- },
1177
- {
1178
- "group": [
1179
- "lodash-es"
1180
- ],
1181
- "importNames": [
1182
- "reverse"
1183
- ],
1184
- "message": "Please use Array.prototype.reverse() instead."
1185
- },
1186
- {
1187
- "group": [
1188
- "lodash-es"
1189
- ],
1190
- "importNames": [
1191
- "slice"
1192
- ],
1193
- "message": "Please use Array.prototype.slice() instead."
1194
- },
1195
- {
1196
- "group": [
1197
- "lodash-es"
1198
- ],
1199
- "importNames": [
1200
- "indexOf"
1201
- ],
1202
- "message": "Please use Array.prototype.indexOf() instead."
1203
- },
1204
- {
1205
- "group": [
1206
- "lodash-es"
1207
- ],
1208
- "importNames": [
1209
- "lastIndexOf"
1210
- ],
1211
- "message": "Please use Array.prototype.lastIndexOf() instead."
1212
- },
1213
- {
1214
- "group": [
1215
- "lodash-es"
1216
- ],
1217
- "importNames": [
1218
- "fill"
1219
- ],
1220
- "message": "Please use Array.prototype.fill() instead."
1221
- },
1222
- {
1223
- "group": [
1224
- "lodash-es"
1225
- ],
1226
- "importNames": [
1227
- "startsWith"
1228
- ],
1229
- "message": "Please use String.prototype.startsWith() instead."
1230
- },
1231
- {
1232
- "group": [
1233
- "lodash-es"
1234
- ],
1235
- "importNames": [
1236
- "endsWith"
1237
- ],
1238
- "message": "Please use String.prototype.endsWith() instead."
1239
- },
1240
- {
1241
- "group": [
1242
- "lodash-es"
1243
- ],
1244
- "importNames": [
1245
- "repeat"
1246
- ],
1247
- "message": "Please use String.prototype.repeat() instead."
1248
- },
1249
- {
1250
- "group": [
1251
- "lodash-es"
1252
- ],
1253
- "importNames": [
1254
- "padStart"
1255
- ],
1256
- "message": "Please use String.prototype.padStart() instead."
1257
- },
1258
- {
1259
- "group": [
1260
- "lodash-es"
1261
- ],
1262
- "importNames": [
1263
- "padEnd"
1264
- ],
1265
- "message": "Please use String.prototype.padEnd() instead."
1266
- },
1267
- {
1268
- "group": [
1269
- "lodash-es"
1270
- ],
1271
- "importNames": [
1272
- "trim"
1273
- ],
1274
- "message": "Please use String.prototype.trim() instead."
1275
- },
1276
- {
1277
- "group": [
1278
- "lodash-es"
1279
- ],
1280
- "importNames": [
1281
- "trimStart",
1282
- "trimLeft"
1283
- ],
1284
- "message": "Please use String.prototype.trimStart() instead."
1285
- },
1286
- {
1287
- "group": [
1288
- "lodash-es"
1289
- ],
1290
- "importNames": [
1291
- "trimEnd",
1292
- "trimRight"
1293
- ],
1294
- "message": "Please use String.prototype.trimEnd() instead."
1295
- },
1296
- {
1297
- "group": [
1298
- "lodash-es"
1299
- ],
1300
- "importNames": [
1301
- "toUpper"
1302
- ],
1303
- "message": "Please use String.prototype.toUpperCase() instead."
1304
- },
1305
- {
1306
- "group": [
1307
- "lodash-es"
1308
- ],
1309
- "importNames": [
1310
- "toLower"
1311
- ],
1312
- "message": "Please use String.prototype.toLowerCase() instead."
1313
- },
1314
- {
1315
- "group": [
1316
- "lodash-es"
1317
- ],
1318
- "importNames": [
1319
- "isArray"
1320
- ],
1321
- "message": "Please use Array.isArray() instead."
1322
- },
1323
- {
1324
- "group": [
1325
- "lodash-es"
1326
- ],
1327
- "importNames": [
1328
- "isNaN"
1329
- ],
1330
- "message": "Please use Number.isNaN() instead."
1331
- },
1332
- {
1333
- "group": [
1334
- "lodash-es"
1335
- ],
1336
- "importNames": [
1337
- "isFinite"
1338
- ],
1339
- "message": "Please use Number.isFinite() instead."
1340
- },
1341
- {
1342
- "group": [
1343
- "lodash-es"
1344
- ],
1345
- "importNames": [
1346
- "isInteger"
1347
- ],
1348
- "message": "Please use Number.isInteger() instead."
1349
- },
1350
- {
1351
- "group": [
1352
- "lodash-es"
1353
- ],
1354
- "importNames": [
1355
- "isNull"
1356
- ],
1357
- "message": "Please use value === null instead."
1358
- },
1359
- {
1360
- "group": [
1361
- "lodash-es"
1362
- ],
1363
- "importNames": [
1364
- "isUndefined"
1365
- ],
1366
- "message": "Please use value === undefined instead."
1367
- },
1368
- {
1369
- "group": [
1370
- "lodash-es"
1371
- ],
1372
- "importNames": [
1373
- "defaultTo"
1374
- ],
1375
- "message": "Please use value ?? defaultValue instead."
1376
- },
1377
- {
1378
- "group": [
1379
- "lodash-es"
1380
- ],
1381
- "importNames": [
1382
- "assign"
1383
- ],
1384
- "message": "Please use Object.assign() or spread syntax {...obj} instead."
1385
- },
1386
- {
1387
- "group": [
1388
- "lodash-es"
1389
- ],
1390
- "importNames": [
1391
- "flatten"
1392
- ],
1393
- "message": "Please use Array.prototype.flat() instead."
1394
- },
1395
- {
1396
- "group": [
1397
- "lodash-es"
1398
- ],
1399
- "importNames": [
1400
- "flattenDeep"
1401
- ],
1402
- "message": "Please use Array.prototype.flat(Infinity) instead."
1403
- },
1404
- {
1405
- "group": [
1406
- "lodash-es"
1407
- ],
1408
- "importNames": [
1409
- "isNil"
1410
- ],
1411
- "message": "Please use value === null || value === undefined instead."
1412
- },
1413
- {
1414
- "group": [
1415
- "lodash-es"
1416
- ],
1417
- "importNames": [
1418
- "noop"
1419
- ],
1420
- "message": "Please use () => {} instead."
1421
- },
1422
- {
1423
- "group": [
1424
- "lodash-es"
1425
- ],
1426
- "importNames": [
1427
- "identity"
1428
- ],
1429
- "message": "Please use x => x instead."
1430
- },
1431
- {
1432
- "group": [
1433
- "lodash-es"
1434
- ],
1435
- "importNames": [
1436
- "first",
1437
- "head"
1438
- ],
1439
- "message": "Please use Array.prototype.at(0) instead."
1440
- },
1441
- {
1442
- "group": [
1443
- "lodash-es"
1444
- ],
1445
- "importNames": [
1446
- "last"
1447
- ],
1448
- "message": "Please use Array.prototype.at(-1) instead."
1449
- },
1450
- {
1451
- "group": [
1452
- "lodash-es"
1453
- ],
1454
- "importNames": [
1455
- "forEach"
1456
- ],
1457
- "message": "Please use Array.prototype.forEach() instead."
1458
- },
1459
- {
1460
- "group": [
1461
- "lodash-es"
1462
- ],
1463
- "importNames": [
1464
- "fromPairs"
1465
- ],
1466
- "message": "Please use Object.fromEntries() instead."
1467
- },
1468
- {
1469
- "group": [
1470
- "lodash-es"
1471
- ],
1472
- "importNames": [
1473
- "join"
1474
- ],
1475
- "message": "Please use Array.prototype.join() instead."
1476
- },
1477
- {
1478
- "group": [
1479
- "lodash-es"
1480
- ],
1481
- "importNames": [
1482
- "isDate"
1483
- ],
1484
- "message": "Please use val instanceof Date instead."
1485
- },
1486
- {
1487
- "group": [
1488
- "lodash-es"
1489
- ],
1490
- "importNames": [
1491
- "isFunction"
1492
- ],
1493
- "message": "Please use typeof val === 'function' instead."
1494
- },
1495
- {
1496
- "group": [
1497
- "lodash-es"
1498
- ],
1499
- "importNames": [
1500
- "isNumber"
1501
- ],
1502
- "message": "Please use typeof val === 'number' instead."
1503
- },
1504
- {
1505
- "group": [
1506
- "lodash-es"
1507
- ],
1508
- "importNames": [
1509
- "isObject"
1510
- ],
1511
- "message": "Please use val !== null && typeof val === 'object' instead."
1512
- },
1513
- {
1514
- "group": [
1515
- "lodash-es"
1516
- ],
1517
- "importNames": [
1518
- "isString"
1519
- ],
1520
- "message": "Please use typeof val === 'string' instead."
1521
- },
1522
- {
1523
- "group": [
1524
- "lodash-es"
1525
- ],
1526
- "importNames": [
1527
- "toString"
1528
- ],
1529
- "message": "Please use String(val) instead."
1530
- },
1531
- {
1532
- "group": [
1533
- "lodash-es"
1534
- ],
1535
- "importNames": [
1536
- "flow",
1537
- "flowRight"
1538
- ],
1539
- "message": "Please use refactoring your code instead."
1540
- },
1541
- {
1542
- "group": [
1543
- "vitest"
1544
- ],
1545
- "message": "Importing from vitest is only allowed in test files."
1546
- }
1547
- ]
1548
- }
1549
- ]
1550
- }
1551
- },
1552
- {
1553
- "files": [
1554
- "**/vitest.config.ts",
1555
- "**/vitest.*.config.ts",
1556
- "**/vitest.setup.ts",
1557
- "**/vitest.setup.tsx",
1558
- "**/*.test.ts",
1559
- "**/*.test.tsx",
1560
- "**/*.test.utils.ts",
1561
- "**/*.test.utils.tsx",
1562
- "**/*.test.helpers.ts",
1563
- "**/*.test.helpers.tsx"
1564
- ],
1565
- "rules": {
1566
- "no-restricted-imports": [
1567
- "error",
1568
- {
1569
- "paths": [
1570
- {
1571
- "name": "react",
1572
- "importNames": [
1573
- "default"
1574
- ],
1575
- "message": "Default import from React is not allowed. Use named imports instead."
1576
- },
1577
- {
1578
- "name": "react-dom",
1579
- "importNames": [
1580
- "default"
1581
- ],
1582
- "message": "Default import from React DOM is not allowed. Use named imports instead."
1583
- },
1584
- {
1585
- "name": "@gooddata/sdk-ui-kit",
1586
- "importNames": [
1587
- "Icon"
1588
- ],
1589
- "message": "The Icon export cannot be tree-shaken, use {IconName}Icon imports instead."
1590
- },
1591
- {
1592
- "name": "vitest",
1593
- "importNames": [
1594
- "test"
1595
- ],
1596
- "message": "Use 'it' instead of 'test' for consistency."
1597
- }
1598
- ],
1599
- "patterns": [
1600
- {
1601
- "group": [
1602
- "lodash-es"
1603
- ],
1604
- "importNames": [
1605
- "get",
1606
- "getOr"
1607
- ],
1608
- "message": "Please use the ?. and ?? operators instead."
1609
- },
1610
- {
1611
- "group": [
1612
- "lodash-es"
1613
- ],
1614
- "importNames": [
1615
- "keys"
1616
- ],
1617
- "message": "Please use Object.keys() instead."
1618
- },
1619
- {
1620
- "group": [
1621
- "lodash-es"
1622
- ],
1623
- "importNames": [
1624
- "values"
1625
- ],
1626
- "message": "Please use Object.values() instead."
1627
- },
1628
- {
1629
- "group": [
1630
- "lodash-es"
1631
- ],
1632
- "importNames": [
1633
- "entries",
1634
- "toPairs"
1635
- ],
1636
- "message": "Please use Object.entries() instead."
1637
- },
1638
- {
1639
- "group": [
1640
- "lodash-es"
1641
- ],
1642
- "importNames": [
1643
- "map"
1644
- ],
1645
- "message": "Please use Array.prototype.map() instead."
1646
- },
1647
- {
1648
- "group": [
1649
- "lodash-es"
1650
- ],
1651
- "importNames": [
1652
- "flatMap"
1653
- ],
1654
- "message": "Please use Array.prototype.flatMap() instead."
1655
- },
1656
- {
1657
- "group": [
1658
- "lodash-es"
1659
- ],
1660
- "importNames": [
1661
- "filter"
1662
- ],
1663
- "message": "Please use Array.prototype.filter() instead."
1664
- },
1665
- {
1666
- "group": [
1667
- "lodash-es"
1668
- ],
1669
- "importNames": [
1670
- "find"
1671
- ],
1672
- "message": "Please use Array.prototype.find() instead."
1673
- },
1674
- {
1675
- "group": [
1676
- "lodash-es"
1677
- ],
1678
- "importNames": [
1679
- "findIndex"
1680
- ],
1681
- "message": "Please use Array.prototype.findIndex() instead."
1682
- },
1683
- {
1684
- "group": [
1685
- "lodash-es"
1686
- ],
1687
- "importNames": [
1688
- "includes"
1689
- ],
1690
- "message": "Please use Array.prototype.includes() instead."
1691
- },
1692
- {
1693
- "group": [
1694
- "lodash-es"
1695
- ],
1696
- "importNames": [
1697
- "some"
1698
- ],
1699
- "message": "Please use Array.prototype.some() instead."
1700
- },
1701
- {
1702
- "group": [
1703
- "lodash-es"
1704
- ],
1705
- "importNames": [
1706
- "every"
1707
- ],
1708
- "message": "Please use Array.prototype.every() instead."
1709
- },
1710
- {
1711
- "group": [
1712
- "lodash-es"
1713
- ],
1714
- "importNames": [
1715
- "concat"
1716
- ],
1717
- "message": "Please use Array.prototype.concat() or spread [...arr1, ...arr2] instead."
1718
- },
1719
- {
1720
- "group": [
1721
- "lodash-es"
1722
- ],
1723
- "importNames": [
1724
- "reverse"
1725
- ],
1726
- "message": "Please use Array.prototype.reverse() instead."
1727
- },
1728
- {
1729
- "group": [
1730
- "lodash-es"
1731
- ],
1732
- "importNames": [
1733
- "slice"
1734
- ],
1735
- "message": "Please use Array.prototype.slice() instead."
1736
- },
1737
- {
1738
- "group": [
1739
- "lodash-es"
1740
- ],
1741
- "importNames": [
1742
- "indexOf"
1743
- ],
1744
- "message": "Please use Array.prototype.indexOf() instead."
1745
- },
1746
- {
1747
- "group": [
1748
- "lodash-es"
1749
- ],
1750
- "importNames": [
1751
- "lastIndexOf"
1752
- ],
1753
- "message": "Please use Array.prototype.lastIndexOf() instead."
1754
- },
1755
- {
1756
- "group": [
1757
- "lodash-es"
1758
- ],
1759
- "importNames": [
1760
- "fill"
1761
- ],
1762
- "message": "Please use Array.prototype.fill() instead."
1763
- },
1764
- {
1765
- "group": [
1766
- "lodash-es"
1767
- ],
1768
- "importNames": [
1769
- "startsWith"
1770
- ],
1771
- "message": "Please use String.prototype.startsWith() instead."
1772
- },
1773
- {
1774
- "group": [
1775
- "lodash-es"
1776
- ],
1777
- "importNames": [
1778
- "endsWith"
1779
- ],
1780
- "message": "Please use String.prototype.endsWith() instead."
1781
- },
1782
- {
1783
- "group": [
1784
- "lodash-es"
1785
- ],
1786
- "importNames": [
1787
- "repeat"
1788
- ],
1789
- "message": "Please use String.prototype.repeat() instead."
1790
- },
1791
- {
1792
- "group": [
1793
- "lodash-es"
1794
- ],
1795
- "importNames": [
1796
- "padStart"
1797
- ],
1798
- "message": "Please use String.prototype.padStart() instead."
1799
- },
1800
- {
1801
- "group": [
1802
- "lodash-es"
1803
- ],
1804
- "importNames": [
1805
- "padEnd"
1806
- ],
1807
- "message": "Please use String.prototype.padEnd() instead."
1808
- },
1809
- {
1810
- "group": [
1811
- "lodash-es"
1812
- ],
1813
- "importNames": [
1814
- "trim"
1815
- ],
1816
- "message": "Please use String.prototype.trim() instead."
1817
- },
1818
- {
1819
- "group": [
1820
- "lodash-es"
1821
- ],
1822
- "importNames": [
1823
- "trimStart",
1824
- "trimLeft"
1825
- ],
1826
- "message": "Please use String.prototype.trimStart() instead."
1827
- },
1828
- {
1829
- "group": [
1830
- "lodash-es"
1831
- ],
1832
- "importNames": [
1833
- "trimEnd",
1834
- "trimRight"
1835
- ],
1836
- "message": "Please use String.prototype.trimEnd() instead."
1837
- },
1838
- {
1839
- "group": [
1840
- "lodash-es"
1841
- ],
1842
- "importNames": [
1843
- "toUpper"
1844
- ],
1845
- "message": "Please use String.prototype.toUpperCase() instead."
1846
- },
1847
- {
1848
- "group": [
1849
- "lodash-es"
1850
- ],
1851
- "importNames": [
1852
- "toLower"
1853
- ],
1854
- "message": "Please use String.prototype.toLowerCase() instead."
1855
- },
1856
- {
1857
- "group": [
1858
- "lodash-es"
1859
- ],
1860
- "importNames": [
1861
- "isArray"
1862
- ],
1863
- "message": "Please use Array.isArray() instead."
1864
- },
1865
- {
1866
- "group": [
1867
- "lodash-es"
1868
- ],
1869
- "importNames": [
1870
- "isNaN"
1871
- ],
1872
- "message": "Please use Number.isNaN() instead."
1873
- },
1874
- {
1875
- "group": [
1876
- "lodash-es"
1877
- ],
1878
- "importNames": [
1879
- "isFinite"
1880
- ],
1881
- "message": "Please use Number.isFinite() instead."
1882
- },
1883
- {
1884
- "group": [
1885
- "lodash-es"
1886
- ],
1887
- "importNames": [
1888
- "isInteger"
1889
- ],
1890
- "message": "Please use Number.isInteger() instead."
1891
- },
1892
- {
1893
- "group": [
1894
- "lodash-es"
1895
- ],
1896
- "importNames": [
1897
- "isNull"
1898
- ],
1899
- "message": "Please use value === null instead."
1900
- },
1901
- {
1902
- "group": [
1903
- "lodash-es"
1904
- ],
1905
- "importNames": [
1906
- "isUndefined"
1907
- ],
1908
- "message": "Please use value === undefined instead."
1909
- },
1910
- {
1911
- "group": [
1912
- "lodash-es"
1913
- ],
1914
- "importNames": [
1915
- "defaultTo"
1916
- ],
1917
- "message": "Please use value ?? defaultValue instead."
1918
- },
1919
- {
1920
- "group": [
1921
- "lodash-es"
1922
- ],
1923
- "importNames": [
1924
- "assign"
1925
- ],
1926
- "message": "Please use Object.assign() or spread syntax {...obj} instead."
1927
- },
1928
- {
1929
- "group": [
1930
- "lodash-es"
1931
- ],
1932
- "importNames": [
1933
- "flatten"
1934
- ],
1935
- "message": "Please use Array.prototype.flat() instead."
1936
- },
1937
- {
1938
- "group": [
1939
- "lodash-es"
1940
- ],
1941
- "importNames": [
1942
- "flattenDeep"
1943
- ],
1944
- "message": "Please use Array.prototype.flat(Infinity) instead."
1945
- },
1946
- {
1947
- "group": [
1948
- "lodash-es"
1949
- ],
1950
- "importNames": [
1951
- "isNil"
1952
- ],
1953
- "message": "Please use value === null || value === undefined instead."
1954
- },
1955
- {
1956
- "group": [
1957
- "lodash-es"
1958
- ],
1959
- "importNames": [
1960
- "noop"
1961
- ],
1962
- "message": "Please use () => {} instead."
1963
- },
1964
- {
1965
- "group": [
1966
- "lodash-es"
1967
- ],
1968
- "importNames": [
1969
- "identity"
1970
- ],
1971
- "message": "Please use x => x instead."
1972
- },
1973
- {
1974
- "group": [
1975
- "lodash-es"
1976
- ],
1977
- "importNames": [
1978
- "first",
1979
- "head"
1980
- ],
1981
- "message": "Please use Array.prototype.at(0) instead."
1982
- },
1983
- {
1984
- "group": [
1985
- "lodash-es"
1986
- ],
1987
- "importNames": [
1988
- "last"
1989
- ],
1990
- "message": "Please use Array.prototype.at(-1) instead."
1991
- },
1992
- {
1993
- "group": [
1994
- "lodash-es"
1995
- ],
1996
- "importNames": [
1997
- "forEach"
1998
- ],
1999
- "message": "Please use Array.prototype.forEach() instead."
2000
- },
2001
- {
2002
- "group": [
2003
- "lodash-es"
2004
- ],
2005
- "importNames": [
2006
- "fromPairs"
2007
- ],
2008
- "message": "Please use Object.fromEntries() instead."
2009
- },
2010
- {
2011
- "group": [
2012
- "lodash-es"
2013
- ],
2014
- "importNames": [
2015
- "join"
2016
- ],
2017
- "message": "Please use Array.prototype.join() instead."
2018
- },
2019
- {
2020
- "group": [
2021
- "lodash-es"
2022
- ],
2023
- "importNames": [
2024
- "isDate"
2025
- ],
2026
- "message": "Please use val instanceof Date instead."
2027
- },
2028
- {
2029
- "group": [
2030
- "lodash-es"
2031
- ],
2032
- "importNames": [
2033
- "isFunction"
2034
- ],
2035
- "message": "Please use typeof val === 'function' instead."
2036
- },
2037
- {
2038
- "group": [
2039
- "lodash-es"
2040
- ],
2041
- "importNames": [
2042
- "isNumber"
2043
- ],
2044
- "message": "Please use typeof val === 'number' instead."
2045
- },
2046
- {
2047
- "group": [
2048
- "lodash-es"
2049
- ],
2050
- "importNames": [
2051
- "isObject"
2052
- ],
2053
- "message": "Please use val !== null && typeof val === 'object' instead."
2054
- },
2055
- {
2056
- "group": [
2057
- "lodash-es"
2058
- ],
2059
- "importNames": [
2060
- "isString"
2061
- ],
2062
- "message": "Please use typeof val === 'string' instead."
2063
- },
2064
- {
2065
- "group": [
2066
- "lodash-es"
2067
- ],
2068
- "importNames": [
2069
- "toString"
2070
- ],
2071
- "message": "Please use String(val) instead."
2072
- },
2073
- {
2074
- "group": [
2075
- "lodash-es"
2076
- ],
2077
- "importNames": [
2078
- "flow",
2079
- "flowRight"
2080
- ],
2081
- "message": "Please use refactoring your code instead."
2082
- }
2083
- ]
2084
- }
2085
- ]
2086
- }
2087
- },
2088
- {
2089
- "files": [
2090
- "**/eslint.config.ts",
2091
- "**/eslint.config.js",
2092
- "**/vite.config.ts",
2093
- "**/vite.config.js",
2094
- "**/vitest.config.ts",
2095
- "**/vitest.config.js",
2096
- "**/rolldown.config.ts",
2097
- "**/rolldown.config.js",
2098
- "**/playwright.config.ts",
2099
- "**/playwright.config.js",
2100
- "**/.dependency-cruiser.ts",
2101
- "**/.dependency-cruiser.js",
2102
- "**/.i18nrc.ts",
2103
- "**/.i18nrc.js"
2104
- ],
2105
- "rules": {
2106
- "no-restricted-exports": "off"
2107
- }
2108
- },
2109
- {
2110
- "files": [
2111
- "**/*.ts",
2112
- "**/*.tsx",
2113
- "**/*.mts",
2114
- "**/*.cts"
2115
- ],
2116
- "rules": {
2117
- "no-restricted-syntax": [
2118
- "error",
2119
- {
2120
- "selector": "MemberExpression[object.name='React']",
2121
- "message": "Do not use `React.*`. Use named imports instead."
2122
- },
2123
- {
2124
- "selector": "TSTypeReference[typeName.type='TSQualifiedName'][typeName.left.name='React']",
2125
- "message": "Do not use `React.*` types. Use named imports instead."
2126
- },
2127
- {
2128
- "selector": "ExportNamespaceSpecifier",
2129
- "message": "Usage of 'export * as …' is forbidden."
2130
- },
2131
- {
2132
- "selector": "ExportAllDeclaration",
2133
- "message": "Usage of `export * from` is forbidden."
2134
- },
2135
- {
2136
- "selector": "ImportDeclaration[source.value=/^(?!.*reference_workspace)\\./] ImportNamespaceSpecifier",
2137
- "message": "Do not use `import * as ...` from relative paths."
2138
- }
2139
- ]
2140
- }
2141
- },
2142
- {
2143
- "files": [
2144
- "**/*.ts",
2145
- "**/*.tsx",
2146
- "**/*.mts",
2147
- "**/*.cts"
2148
- ],
2149
- "rules": {
2150
- "constructor-super": "off",
2151
- "getter-return": "off",
2152
- "no-class-assign": "off",
2153
- "no-const-assign": "off",
2154
- "no-dupe-class-members": "off",
2155
- "no-dupe-keys": "off",
2156
- "no-func-assign": "off",
2157
- "no-import-assign": "off",
2158
- "no-new-native-nonconstructor": "off",
2159
- "no-obj-calls": "off",
2160
- "no-redeclare": "off",
2161
- "no-setter-return": "off",
2162
- "no-this-before-super": "off",
2163
- "no-undef": "off",
2164
- "no-unreachable": "off",
2165
- "no-unsafe-negation": "off",
2166
- "no-var": "error",
2167
- "no-with": "off",
2168
- "prefer-const": "error",
2169
- "prefer-rest-params": "error",
2170
- "prefer-spread": "error",
2171
- "no-array-constructor": "off",
2172
- "no-unused-vars": "off",
2173
- "no-dupe-args": "off",
2174
- "no-new-symbol": "off",
2175
- "@typescript-eslint/no-array-constructor": "error",
2176
- "@typescript-eslint/no-duplicate-enum-values": "error",
2177
- "@typescript-eslint/no-empty-object-type": "error",
2178
- "@typescript-eslint/no-extra-non-null-assertion": "error",
2179
- "@typescript-eslint/no-misused-new": "error",
2180
- "@typescript-eslint/no-namespace": "error",
2181
- "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
2182
- "@typescript-eslint/no-require-imports": "error",
2183
- "@typescript-eslint/no-this-alias": "error",
2184
- "@typescript-eslint/no-unnecessary-type-constraint": "error",
2185
- "@typescript-eslint/no-unsafe-declaration-merging": "error",
2186
- "@typescript-eslint/prefer-as-const": "error",
2187
- "@typescript-eslint/prefer-namespace-keyword": "error",
2188
- "@typescript-eslint/triple-slash-reference": "error",
2189
- "@typescript-eslint/explicit-function-return-type": "off",
2190
- "@typescript-eslint/no-use-before-define": "off",
2191
- "@typescript-eslint/no-empty-function": "off",
2192
- "@typescript-eslint/no-unused-vars": [
2193
- "error",
2194
- {
2195
- "varsIgnorePattern": "^_.*$",
2196
- "argsIgnorePattern": "^_.*$"
2197
- }
2198
- ],
2199
- "@typescript-eslint/no-explicit-any": "error",
2200
- "@typescript-eslint/array-type": "off",
2201
- "@typescript-eslint/ban-ts-comment": [
2202
- "error",
2203
- {
2204
- "ts-expect-error": "allow-with-description"
2205
- }
2206
- ],
2207
- "@typescript-eslint/no-wrapper-object-types": "error",
2208
- "@typescript-eslint/no-unsafe-function-type": "error",
2209
- "@typescript-eslint/no-restricted-types": [
2210
- "error",
2211
- {
2212
- "types": {
2213
- "String": {
2214
- "message": "Use 'string' instead",
2215
- "fixWith": "string"
2216
- },
2217
- "Number": {
2218
- "message": "Use 'number' instead",
2219
- "fixWith": "number"
2220
- },
2221
- "Boolean": {
2222
- "message": "Use 'boolean' instead",
2223
- "fixWith": "boolean"
2224
- },
2225
- "Symbol": {
2226
- "message": "Use 'symbol' instead",
2227
- "fixWith": "symbol"
2228
- }
2229
- }
2230
- }
2231
- ],
2232
- "@typescript-eslint/no-inferrable-types": "off",
2233
- "@typescript-eslint/no-non-null-assertion": "off",
2234
- "@typescript-eslint/consistent-type-imports": [
2235
- "error",
2236
- {
2237
- "prefer": "type-imports",
2238
- "fixStyle": "inline-type-imports"
2239
- }
2240
- ],
2241
- "@typescript-eslint/prefer-optional-chain": "error",
2242
- "@typescript-eslint/consistent-type-exports": [
2243
- "error",
2244
- {
2245
- "fixMixedExportsWithInlineTypeSpecifier": false
2246
- }
2247
- ],
2248
- "@typescript-eslint/naming-convention": [
2249
- "error",
2250
- {
2251
- "selector": "interface",
2252
- "format": [
2253
- "PascalCase"
2254
- ],
2255
- "custom": {
2256
- "regex": "^I[A-Z]",
2257
- "match": true
2258
- }
2259
- }
2260
- ]
2261
- },
2262
- "parser": "@typescript-eslint/parser",
2263
- "parserOptions": {
2264
- "ecmaVersion": 2022,
2265
- "sourceType": "module",
2266
- "projectService": true
2267
- }
2268
- },
2269
- {
2270
- "files": [
2271
- "**/eslint.config.ts"
2272
- ],
2273
- "rules": {
2274
- "no-barrel-files/no-barrel-files": "off"
2275
- }
2276
- },
2277
- {
2278
- "files": [
2279
- "**/vitest.setup.ts",
2280
- "**/vitest.setup.tsx"
2281
- ],
2282
- "rules": {
2283
- "import-x/no-unassigned-import": "off"
2284
- }
2285
- },
2286
- {
2287
- "files": [
2288
- "**/*.ts",
2289
- "**/*.cts",
2290
- "**/*.mts",
2291
- "**/*.tsx"
2292
- ],
2293
- "settings": {
2294
- "import-x/extensions": [
2295
- ".ts",
2296
- ".cts",
2297
- ".mts",
2298
- ".tsx",
2299
- ".js",
2300
- ".jsx",
2301
- ".mjs",
2302
- ".cjs"
2303
- ],
2304
- "import-x/external-module-folders": [
2305
- "node_modules",
2306
- "node_modules/@types"
2307
- ],
2308
- "import-x/parsers": {
2309
- "@typescript-eslint/parser": [
2310
- ".ts",
2311
- ".cts",
2312
- ".mts",
2313
- ".tsx"
2314
- ]
2315
- },
2316
- "import-x/resolver": {
2317
- "typescript": {
2318
- "alwaysTryTypes": true
2319
- }
2320
- }
2321
- }
2322
- },
2323
- {
2324
- "files": [
2325
- "**/*.{js,cjs,mjs,jsx}"
2326
- ],
2327
- "plugins": [
2328
- "jsdoc"
2329
- ],
2330
- "settings": {
2331
- "jsdoc": {
2332
- "mode": "jsdoc"
2333
- }
2334
- },
2335
- "rules": {
2336
- "jsdoc/require-param": "error"
2337
- }
2338
- },
2339
- {
2340
- "files": [
2341
- "*.test.ts",
2342
- "*.test.tsx",
2343
- "*.spec.ts"
2344
- ],
2345
- "rules": {
2346
- "sonarjs/no-identical-functions": "off"
2347
- }
2348
- },
2349
- {
2350
- "parser": "@typescript-eslint/parser",
2351
- "files": [
2352
- "**/*.ts",
2353
- "**/*.tsx"
2354
- ],
2355
- "rules": {
2356
- "@typescript-eslint/no-unused-expressions": "off"
2357
- }
2358
- }
2359
- ],
2360
- "settings": {
2361
- "import-x/extensions": [
2362
- ".js",
2363
- ".jsx",
2364
- ".mjs",
2365
- ".cjs"
2366
- ],
2367
- "react": {
2368
- "version": "detect"
2369
- }
2370
- },
2371
- "env": {
2372
- "node": true,
2373
- "es2022": true,
2374
- "browser": true
2375
- },
2376
- "ignorePatterns": [
2377
- "**/dist/**/*.*",
2378
- "**/esm/**/*.*",
2379
- "**/node_modules/**/*.*",
2380
- "**/ci/results/**",
2381
- "**/__version.ts",
2382
- "**/cypress/results/**",
2383
- "**/cypress/screenshots/**",
2384
- "**/cypress/videos/**",
2385
- "**/temp/**",
2386
- "**/reference_workspace/**"
2387
- ],
2388
- "parserOptions": {
2389
- "ecmaVersion": 2022,
2390
- "sourceType": "module"
2391
- }
2392
- }