@gooddata/eslint-config 4.1.1 → 11.4.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm.json ADDED
@@ -0,0 +1,750 @@
1
+ {
2
+ "plugins": [
3
+ "header",
4
+ "import",
5
+ "no-only-tests",
6
+ "sonarjs",
7
+ "tsdoc",
8
+ "eslint-comments",
9
+ "import-esm"
10
+ ],
11
+ "extends": [
12
+ "eslint:recommended",
13
+ "plugin:import/errors",
14
+ "plugin:prettier/recommended",
15
+ "plugin:regexp/recommended",
16
+ "plugin:sonarjs/recommended",
17
+ "plugin:import-esm/recommended"
18
+ ],
19
+ "rules": {
20
+ "no-console": [
21
+ 2,
22
+ {
23
+ "allow": [
24
+ "warn",
25
+ "error"
26
+ ]
27
+ }
28
+ ],
29
+ "no-duplicate-imports": "error",
30
+ "no-restricted-imports": [
31
+ "error",
32
+ {
33
+ "paths": [
34
+ {
35
+ "name": "react",
36
+ "importNames": [
37
+ "default"
38
+ ],
39
+ "message": "Default import from React is not allowed. Use named imports instead."
40
+ }
41
+ ],
42
+ "patterns": [
43
+ {
44
+ "group": [
45
+ "lodash-es"
46
+ ],
47
+ "importNames": [
48
+ "get",
49
+ "getOr"
50
+ ],
51
+ "message": "Please use the ?. and ?? operators instead."
52
+ },
53
+ {
54
+ "group": [
55
+ "lodash-es"
56
+ ],
57
+ "importNames": [
58
+ "keys"
59
+ ],
60
+ "message": "Please use Object.keys() instead."
61
+ },
62
+ {
63
+ "group": [
64
+ "lodash-es"
65
+ ],
66
+ "importNames": [
67
+ "values"
68
+ ],
69
+ "message": "Please use Object.values() instead."
70
+ },
71
+ {
72
+ "group": [
73
+ "lodash-es"
74
+ ],
75
+ "importNames": [
76
+ "entries",
77
+ "toPairs"
78
+ ],
79
+ "message": "Please use Object.entries() instead."
80
+ },
81
+ {
82
+ "group": [
83
+ "lodash-es"
84
+ ],
85
+ "importNames": [
86
+ "map"
87
+ ],
88
+ "message": "Please use Array.prototype.map() instead."
89
+ },
90
+ {
91
+ "group": [
92
+ "lodash-es"
93
+ ],
94
+ "importNames": [
95
+ "flatMap"
96
+ ],
97
+ "message": "Please use Array.prototype.flatMap() instead."
98
+ },
99
+ {
100
+ "group": [
101
+ "lodash-es"
102
+ ],
103
+ "importNames": [
104
+ "filter"
105
+ ],
106
+ "message": "Please use Array.prototype.filter() instead."
107
+ },
108
+ {
109
+ "group": [
110
+ "lodash-es"
111
+ ],
112
+ "importNames": [
113
+ "find"
114
+ ],
115
+ "message": "Please use Array.prototype.find() instead."
116
+ },
117
+ {
118
+ "group": [
119
+ "lodash-es"
120
+ ],
121
+ "importNames": [
122
+ "findIndex"
123
+ ],
124
+ "message": "Please use Array.prototype.findIndex() instead."
125
+ },
126
+ {
127
+ "group": [
128
+ "lodash-es"
129
+ ],
130
+ "importNames": [
131
+ "includes"
132
+ ],
133
+ "message": "Please use Array.prototype.includes() instead."
134
+ },
135
+ {
136
+ "group": [
137
+ "lodash-es"
138
+ ],
139
+ "importNames": [
140
+ "some"
141
+ ],
142
+ "message": "Please use Array.prototype.some() instead."
143
+ },
144
+ {
145
+ "group": [
146
+ "lodash-es"
147
+ ],
148
+ "importNames": [
149
+ "every"
150
+ ],
151
+ "message": "Please use Array.prototype.every() instead."
152
+ },
153
+ {
154
+ "group": [
155
+ "lodash-es"
156
+ ],
157
+ "importNames": [
158
+ "concat"
159
+ ],
160
+ "message": "Please use Array.prototype.concat() or spread [...arr1, ...arr2] instead."
161
+ },
162
+ {
163
+ "group": [
164
+ "lodash-es"
165
+ ],
166
+ "importNames": [
167
+ "reverse"
168
+ ],
169
+ "message": "Please use Array.prototype.reverse() instead."
170
+ },
171
+ {
172
+ "group": [
173
+ "lodash-es"
174
+ ],
175
+ "importNames": [
176
+ "slice"
177
+ ],
178
+ "message": "Please use Array.prototype.slice() instead."
179
+ },
180
+ {
181
+ "group": [
182
+ "lodash-es"
183
+ ],
184
+ "importNames": [
185
+ "indexOf"
186
+ ],
187
+ "message": "Please use Array.prototype.indexOf() instead."
188
+ },
189
+ {
190
+ "group": [
191
+ "lodash-es"
192
+ ],
193
+ "importNames": [
194
+ "lastIndexOf"
195
+ ],
196
+ "message": "Please use Array.prototype.lastIndexOf() instead."
197
+ },
198
+ {
199
+ "group": [
200
+ "lodash-es"
201
+ ],
202
+ "importNames": [
203
+ "fill"
204
+ ],
205
+ "message": "Please use Array.prototype.fill() instead."
206
+ },
207
+ {
208
+ "group": [
209
+ "lodash-es"
210
+ ],
211
+ "importNames": [
212
+ "startsWith"
213
+ ],
214
+ "message": "Please use String.prototype.startsWith() instead."
215
+ },
216
+ {
217
+ "group": [
218
+ "lodash-es"
219
+ ],
220
+ "importNames": [
221
+ "endsWith"
222
+ ],
223
+ "message": "Please use String.prototype.endsWith() instead."
224
+ },
225
+ {
226
+ "group": [
227
+ "lodash-es"
228
+ ],
229
+ "importNames": [
230
+ "repeat"
231
+ ],
232
+ "message": "Please use String.prototype.repeat() instead."
233
+ },
234
+ {
235
+ "group": [
236
+ "lodash-es"
237
+ ],
238
+ "importNames": [
239
+ "padStart"
240
+ ],
241
+ "message": "Please use String.prototype.padStart() instead."
242
+ },
243
+ {
244
+ "group": [
245
+ "lodash-es"
246
+ ],
247
+ "importNames": [
248
+ "padEnd"
249
+ ],
250
+ "message": "Please use String.prototype.padEnd() instead."
251
+ },
252
+ {
253
+ "group": [
254
+ "lodash-es"
255
+ ],
256
+ "importNames": [
257
+ "trim"
258
+ ],
259
+ "message": "Please use String.prototype.trim() instead."
260
+ },
261
+ {
262
+ "group": [
263
+ "lodash-es"
264
+ ],
265
+ "importNames": [
266
+ "trimStart",
267
+ "trimLeft"
268
+ ],
269
+ "message": "Please use String.prototype.trimStart() instead."
270
+ },
271
+ {
272
+ "group": [
273
+ "lodash-es"
274
+ ],
275
+ "importNames": [
276
+ "trimEnd",
277
+ "trimRight"
278
+ ],
279
+ "message": "Please use String.prototype.trimEnd() instead."
280
+ },
281
+ {
282
+ "group": [
283
+ "lodash-es"
284
+ ],
285
+ "importNames": [
286
+ "toUpper"
287
+ ],
288
+ "message": "Please use String.prototype.toUpperCase() instead."
289
+ },
290
+ {
291
+ "group": [
292
+ "lodash-es"
293
+ ],
294
+ "importNames": [
295
+ "toLower"
296
+ ],
297
+ "message": "Please use String.prototype.toLowerCase() instead."
298
+ },
299
+ {
300
+ "group": [
301
+ "lodash-es"
302
+ ],
303
+ "importNames": [
304
+ "isArray"
305
+ ],
306
+ "message": "Please use Array.isArray() instead."
307
+ },
308
+ {
309
+ "group": [
310
+ "lodash-es"
311
+ ],
312
+ "importNames": [
313
+ "isNaN"
314
+ ],
315
+ "message": "Please use Number.isNaN() instead."
316
+ },
317
+ {
318
+ "group": [
319
+ "lodash-es"
320
+ ],
321
+ "importNames": [
322
+ "isFinite"
323
+ ],
324
+ "message": "Please use Number.isFinite() instead."
325
+ },
326
+ {
327
+ "group": [
328
+ "lodash-es"
329
+ ],
330
+ "importNames": [
331
+ "isInteger"
332
+ ],
333
+ "message": "Please use Number.isInteger() instead."
334
+ },
335
+ {
336
+ "group": [
337
+ "lodash-es"
338
+ ],
339
+ "importNames": [
340
+ "isNull"
341
+ ],
342
+ "message": "Please use value === null instead."
343
+ },
344
+ {
345
+ "group": [
346
+ "lodash-es"
347
+ ],
348
+ "importNames": [
349
+ "isUndefined"
350
+ ],
351
+ "message": "Please use value === undefined instead."
352
+ },
353
+ {
354
+ "group": [
355
+ "lodash-es"
356
+ ],
357
+ "importNames": [
358
+ "defaultTo"
359
+ ],
360
+ "message": "Please use value ?? defaultValue instead."
361
+ },
362
+ {
363
+ "group": [
364
+ "lodash-es"
365
+ ],
366
+ "importNames": [
367
+ "assign"
368
+ ],
369
+ "message": "Please use Object.assign() or spread syntax {...obj} instead."
370
+ },
371
+ {
372
+ "group": [
373
+ "lodash-es"
374
+ ],
375
+ "importNames": [
376
+ "flatten"
377
+ ],
378
+ "message": "Please use Array.prototype.flat() instead."
379
+ },
380
+ {
381
+ "group": [
382
+ "lodash-es"
383
+ ],
384
+ "importNames": [
385
+ "flattenDeep"
386
+ ],
387
+ "message": "Please use Array.prototype.flat(Infinity) instead."
388
+ },
389
+ {
390
+ "group": [
391
+ "lodash-es"
392
+ ],
393
+ "importNames": [
394
+ "isNil"
395
+ ],
396
+ "message": "Please use value === null || value === undefined instead."
397
+ },
398
+ {
399
+ "group": [
400
+ "lodash-es"
401
+ ],
402
+ "importNames": [
403
+ "noop"
404
+ ],
405
+ "message": "Please use () => {} instead."
406
+ },
407
+ {
408
+ "group": [
409
+ "lodash-es"
410
+ ],
411
+ "importNames": [
412
+ "identity"
413
+ ],
414
+ "message": "Please use x => x instead."
415
+ },
416
+ {
417
+ "group": [
418
+ "lodash-es"
419
+ ],
420
+ "importNames": [
421
+ "first",
422
+ "head"
423
+ ],
424
+ "message": "Please use Array.prototype.at(0) instead."
425
+ },
426
+ {
427
+ "group": [
428
+ "lodash-es"
429
+ ],
430
+ "importNames": [
431
+ "last"
432
+ ],
433
+ "message": "Please use Array.prototype.at(-1) instead."
434
+ },
435
+ {
436
+ "group": [
437
+ "lodash-es"
438
+ ],
439
+ "importNames": [
440
+ "forEach"
441
+ ],
442
+ "message": "Please use Array.prototype.forEach() instead."
443
+ },
444
+ {
445
+ "group": [
446
+ "lodash-es"
447
+ ],
448
+ "importNames": [
449
+ "fromPairs"
450
+ ],
451
+ "message": "Please use Object.fromEntries() instead."
452
+ },
453
+ {
454
+ "group": [
455
+ "lodash-es"
456
+ ],
457
+ "importNames": [
458
+ "join"
459
+ ],
460
+ "message": "Please use Array.prototype.join() instead."
461
+ },
462
+ {
463
+ "group": [
464
+ "lodash-es"
465
+ ],
466
+ "importNames": [
467
+ "isDate"
468
+ ],
469
+ "message": "Please use val instanceof Date instead."
470
+ },
471
+ {
472
+ "group": [
473
+ "lodash-es"
474
+ ],
475
+ "importNames": [
476
+ "isFunction"
477
+ ],
478
+ "message": "Please use typeof val === 'function' instead."
479
+ },
480
+ {
481
+ "group": [
482
+ "lodash-es"
483
+ ],
484
+ "importNames": [
485
+ "isNumber"
486
+ ],
487
+ "message": "Please use typeof val === 'number' instead."
488
+ },
489
+ {
490
+ "group": [
491
+ "lodash-es"
492
+ ],
493
+ "importNames": [
494
+ "isObject"
495
+ ],
496
+ "message": "Please use val !== null && typeof val === 'object' instead."
497
+ },
498
+ {
499
+ "group": [
500
+ "lodash-es"
501
+ ],
502
+ "importNames": [
503
+ "isString"
504
+ ],
505
+ "message": "Please use typeof val === 'string' instead."
506
+ },
507
+ {
508
+ "group": [
509
+ "lodash-es"
510
+ ],
511
+ "importNames": [
512
+ "toString"
513
+ ],
514
+ "message": "Please use String(val) instead."
515
+ },
516
+ {
517
+ "group": [
518
+ "lodash-es"
519
+ ],
520
+ "importNames": [
521
+ "flow",
522
+ "flowRight"
523
+ ],
524
+ "message": "Please refactor your code instead."
525
+ }
526
+ ]
527
+ }
528
+ ],
529
+ "no-restricted-syntax": [
530
+ "error",
531
+ {
532
+ "selector": "MemberExpression[object.name='React']",
533
+ "message": "Do not use `React.*`. Use named imports instead."
534
+ }
535
+ ],
536
+ "sort-imports": [
537
+ "error",
538
+ {
539
+ "ignoreCase": false,
540
+ "ignoreDeclarationSort": true,
541
+ "ignoreMemberSort": false
542
+ }
543
+ ],
544
+ "no-useless-escape": "off",
545
+ "no-negated-condition": "error",
546
+ "no-unneeded-ternary": [
547
+ "error",
548
+ {
549
+ "defaultAssignment": false
550
+ }
551
+ ],
552
+ "no-extra-boolean-cast": "error",
553
+ "no-unexpected-multiline": "off",
554
+ "header/header": [
555
+ 2,
556
+ "line",
557
+ {
558
+ "pattern": "^ \\(C\\) \\d{4}(-\\d{4})? GoodData Corporation$",
559
+ "template": " (C) 2025 GoodData Corporation"
560
+ }
561
+ ],
562
+ "import/order": [
563
+ "error",
564
+ {
565
+ "pathGroups": [
566
+ {
567
+ "pattern": "react",
568
+ "group": "external",
569
+ "position": "before"
570
+ },
571
+ {
572
+ "pattern": "@gooddata/**",
573
+ "group": "external",
574
+ "position": "after"
575
+ }
576
+ ],
577
+ "groups": [
578
+ "builtin",
579
+ "external",
580
+ "internal",
581
+ [
582
+ "parent",
583
+ "sibling",
584
+ "index"
585
+ ]
586
+ ],
587
+ "pathGroupsExcludedImportTypes": [
588
+ "react"
589
+ ],
590
+ "alphabetize": {
591
+ "order": "asc",
592
+ "caseInsensitive": true
593
+ },
594
+ "newlines-between": "always"
595
+ }
596
+ ],
597
+ "import/no-unassigned-import": "error",
598
+ "no-only-tests/no-only-tests": [
599
+ "error",
600
+ {
601
+ "block": [
602
+ "fixture"
603
+ ],
604
+ "focus": [
605
+ "only"
606
+ ]
607
+ }
608
+ ],
609
+ "regexp/prefer-d": "off",
610
+ "regexp/prefer-w": "off",
611
+ "sonarjs/no-duplicate-string": "off",
612
+ "sonarjs/cognitive-complexity": "warn",
613
+ "tsdoc/syntax": "error",
614
+ "eslint-comments/no-unused-disable": "error",
615
+ "no-caller": 2,
616
+ "no-eval": 2,
617
+ "no-delete-var": 2,
618
+ "no-octal-escape": 2
619
+ },
620
+ "overrides": [
621
+ {
622
+ "parser": "@typescript-eslint/parser",
623
+ "files": [
624
+ "**/*.ts",
625
+ "**/*.tsx"
626
+ ],
627
+ "extends": [
628
+ "plugin:@typescript-eslint/recommended-type-checked"
629
+ ],
630
+ "parserOptions": {
631
+ "ecmaVersion": 2022,
632
+ "sourceType": "module"
633
+ },
634
+ "rules": {
635
+ "@typescript-eslint/explicit-function-return-type": 0,
636
+ "@typescript-eslint/no-use-before-define": 0,
637
+ "@typescript-eslint/no-empty-function": 0,
638
+ "@typescript-eslint/naming-convention": [
639
+ "error",
640
+ {
641
+ "selector": "interface",
642
+ "format": [
643
+ "PascalCase"
644
+ ],
645
+ "custom": {
646
+ "regex": "^I[A-Z]",
647
+ "match": true
648
+ }
649
+ }
650
+ ],
651
+ "@typescript-eslint/no-unused-vars": [
652
+ 2,
653
+ {
654
+ "varsIgnorePattern": "^_.*$",
655
+ "argsIgnorePattern": "^_.*$"
656
+ }
657
+ ],
658
+ "@typescript-eslint/no-explicit-any": 0,
659
+ "@typescript-eslint/array-type": "off",
660
+ "@typescript-eslint/ban-ts-comment": [
661
+ "error",
662
+ {
663
+ "ts-expect-error": "allow-with-description"
664
+ }
665
+ ],
666
+ "@typescript-eslint/no-wrapper-object-types": "error",
667
+ "@typescript-eslint/no-unsafe-function-type": "error",
668
+ "@typescript-eslint/no-restricted-types": [
669
+ "error",
670
+ {
671
+ "types": {
672
+ "String": {
673
+ "message": "Use 'string' instead",
674
+ "fixWith": "string"
675
+ },
676
+ "Number": {
677
+ "message": "Use 'number' instead",
678
+ "fixWith": "number"
679
+ },
680
+ "Boolean": {
681
+ "message": "Use 'boolean' instead",
682
+ "fixWith": "boolean"
683
+ },
684
+ "Symbol": {
685
+ "message": "Use 'symbol' instead",
686
+ "fixWith": "symbol"
687
+ }
688
+ }
689
+ }
690
+ ],
691
+ "@typescript-eslint/consistent-type-exports": [
692
+ "error",
693
+ {
694
+ "fixMixedExportsWithInlineTypeSpecifier": false
695
+ }
696
+ ],
697
+ "@typescript-eslint/explicit-member-accessibility": "off",
698
+ "@typescript-eslint/interface-name-prefix": "off",
699
+ "@typescript-eslint/member-ordering": "off",
700
+ "@typescript-eslint/no-inferrable-types": "off",
701
+ "@typescript-eslint/no-non-null-assertion": "off",
702
+ "@typescript-eslint/prefer-optional-chain": "error",
703
+ "no-restricted-syntax": [
704
+ "error",
705
+ {
706
+ "selector": "MemberExpression[object.name='React']",
707
+ "message": "Do not use `React.*`. Use named imports instead."
708
+ },
709
+ {
710
+ "selector": "TSTypeReference[typeName.type='TSQualifiedName'][typeName.left.name='React']",
711
+ "message": "Do not use `React.*` types. Use named imports instead."
712
+ }
713
+ ]
714
+ }
715
+ },
716
+ {
717
+ "parser": "@typescript-eslint/parser",
718
+ "files": [
719
+ "**/*.ts",
720
+ "**/*.tsx"
721
+ ],
722
+ "extends": [
723
+ "plugin:import/typescript"
724
+ ]
725
+ },
726
+ {
727
+ "files": [
728
+ "*.test.ts",
729
+ "*.test.tsx",
730
+ "*.spec.ts"
731
+ ],
732
+ "rules": {
733
+ "sonarjs/no-identical-functions": "off"
734
+ }
735
+ }
736
+ ],
737
+ "settings": {},
738
+ "env": {
739
+ "node": true,
740
+ "es2022": true
741
+ },
742
+ "ignorePatterns": [
743
+ "**/dist/**/*.*",
744
+ "**/esm/**/*.*"
745
+ ],
746
+ "parserOptions": {
747
+ "ecmaVersion": 2022,
748
+ "sourceType": "module"
749
+ }
750
+ }