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