@gooddata/oxlint-config 11.62.0-alpha.2 → 11.62.0-alpha.4

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