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