eslint-plugin-better-tailwindcss 4.0.2 → 4.1.0
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/README.md +1 -0
- package/lib/async-utils/errors.d.ts +4 -0
- package/lib/async-utils/errors.d.ts.map +1 -0
- package/lib/async-utils/errors.js +21 -0
- package/lib/async-utils/errors.js.map +1 -0
- package/lib/configs/config.d.ts +579 -24
- package/lib/configs/config.d.ts.map +1 -1
- package/lib/options/default-options.d.ts.map +1 -1
- package/lib/options/default-options.js +9 -0
- package/lib/options/default-options.js.map +1 -1
- package/lib/parsers/css.d.ts +5 -0
- package/lib/parsers/css.d.ts.map +1 -0
- package/lib/parsers/css.js +72 -0
- package/lib/parsers/css.js.map +1 -0
- package/lib/rules/enforce-canonical-classes.d.ts +48 -2
- package/lib/rules/enforce-canonical-classes.d.ts.map +1 -1
- package/lib/rules/enforce-consistent-class-order.d.ts +51 -2
- package/lib/rules/enforce-consistent-class-order.d.ts.map +1 -1
- package/lib/rules/enforce-consistent-important-position.d.ts +47 -2
- package/lib/rules/enforce-consistent-important-position.d.ts.map +1 -1
- package/lib/rules/enforce-consistent-line-wrapping.d.ts +53 -2
- package/lib/rules/enforce-consistent-line-wrapping.d.ts.map +1 -1
- package/lib/rules/enforce-consistent-line-wrapping.js +5 -1
- package/lib/rules/enforce-consistent-line-wrapping.js.map +1 -1
- package/lib/rules/enforce-consistent-variable-syntax.d.ts +47 -2
- package/lib/rules/enforce-consistent-variable-syntax.d.ts.map +1 -1
- package/lib/rules/enforce-shorthand-classes.d.ts +47 -2
- package/lib/rules/enforce-shorthand-classes.d.ts.map +1 -1
- package/lib/rules/no-conflicting-classes.d.ts +47 -2
- package/lib/rules/no-conflicting-classes.d.ts.map +1 -1
- package/lib/rules/no-deprecated-classes.d.ts +47 -2
- package/lib/rules/no-deprecated-classes.d.ts.map +1 -1
- package/lib/rules/no-duplicate-classes.d.ts +47 -2
- package/lib/rules/no-duplicate-classes.d.ts.map +1 -1
- package/lib/rules/no-restricted-classes.d.ts +51 -2
- package/lib/rules/no-restricted-classes.d.ts.map +1 -1
- package/lib/rules/no-unknown-classes.d.ts +47 -2
- package/lib/rules/no-unknown-classes.d.ts.map +1 -1
- package/lib/rules/no-unnecessary-whitespace.d.ts +47 -2
- package/lib/rules/no-unnecessary-whitespace.d.ts.map +1 -1
- package/lib/tailwindcss/canonical-classes.d.ts +3 -3
- package/lib/tailwindcss/canonical-classes.d.ts.map +1 -1
- package/lib/tailwindcss/canonical-classes.js.map +1 -1
- package/lib/types/ast.d.ts +21 -14
- package/lib/types/ast.d.ts.map +1 -1
- package/lib/types/rule.d.ts +4 -4
- package/lib/types/rule.d.ts.map +1 -1
- package/lib/utils/rule.d.ts +2 -2
- package/lib/utils/rule.d.ts.map +1 -1
- package/lib/utils/rule.js +38 -9
- package/lib/utils/rule.js.map +1 -1
- package/package.json +10 -9
package/lib/configs/config.d.ts
CHANGED
|
@@ -10,7 +10,56 @@ declare const rules: readonly [{
|
|
|
10
10
|
readonly order: "Incorrect class order. Expected\n\n{{ notSorted }}\n\nto be\n\n{{ sorted }}";
|
|
11
11
|
} | undefined;
|
|
12
12
|
name: "enforce-consistent-class-order";
|
|
13
|
-
readonly options:
|
|
13
|
+
readonly options: {
|
|
14
|
+
rootFontSize?: number | undefined;
|
|
15
|
+
detectComponentClasses: boolean;
|
|
16
|
+
tsconfig?: string | undefined;
|
|
17
|
+
tailwindConfig?: string | undefined;
|
|
18
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
19
|
+
entryPoint?: string | undefined;
|
|
20
|
+
tags: (string | [string, ({
|
|
21
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
22
|
+
} | {
|
|
23
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
24
|
+
pathPattern?: string | undefined;
|
|
25
|
+
} | {
|
|
26
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
27
|
+
pathPattern?: string | undefined;
|
|
28
|
+
})[]])[];
|
|
29
|
+
variables: (string | [string, ({
|
|
30
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
31
|
+
} | {
|
|
32
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
33
|
+
pathPattern?: string | undefined;
|
|
34
|
+
} | {
|
|
35
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
36
|
+
pathPattern?: string | undefined;
|
|
37
|
+
})[]])[];
|
|
38
|
+
attributes: (string | [string, ({
|
|
39
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
40
|
+
} | {
|
|
41
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
42
|
+
pathPattern?: string | undefined;
|
|
43
|
+
} | {
|
|
44
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
45
|
+
pathPattern?: string | undefined;
|
|
46
|
+
})[]])[];
|
|
47
|
+
callees: (string | [string, ({
|
|
48
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
49
|
+
} | {
|
|
50
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
51
|
+
pathPattern?: string | undefined;
|
|
52
|
+
} | {
|
|
53
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
54
|
+
pathPattern?: string | undefined;
|
|
55
|
+
})[]])[];
|
|
56
|
+
} & {
|
|
57
|
+
componentClassOrder: "asc" | "desc" | "preserve";
|
|
58
|
+
componentClassPosition: "start" | "end";
|
|
59
|
+
order: "asc" | "desc" | "official" | "strict";
|
|
60
|
+
unknownClassOrder: "asc" | "desc" | "preserve";
|
|
61
|
+
unknownClassPosition: "start" | "end";
|
|
62
|
+
};
|
|
14
63
|
rule: {
|
|
15
64
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
16
65
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -71,7 +120,7 @@ declare const rules: readonly [{
|
|
|
71
120
|
meta: {
|
|
72
121
|
messages?: {
|
|
73
122
|
readonly order: "Incorrect class order. Expected\n\n{{ notSorted }}\n\nto be\n\n{{ sorted }}";
|
|
74
|
-
}
|
|
123
|
+
};
|
|
75
124
|
docs: {
|
|
76
125
|
description: string;
|
|
77
126
|
recommended: boolean;
|
|
@@ -92,7 +141,52 @@ declare const rules: readonly [{
|
|
|
92
141
|
readonly position: "Incorrect important position. '{{ className }}' should be '{{ fix }}'.";
|
|
93
142
|
} | undefined;
|
|
94
143
|
name: "enforce-consistent-important-position";
|
|
95
|
-
readonly options:
|
|
144
|
+
readonly options: {
|
|
145
|
+
rootFontSize?: number | undefined;
|
|
146
|
+
detectComponentClasses: boolean;
|
|
147
|
+
tsconfig?: string | undefined;
|
|
148
|
+
tailwindConfig?: string | undefined;
|
|
149
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
150
|
+
entryPoint?: string | undefined;
|
|
151
|
+
tags: (string | [string, ({
|
|
152
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
153
|
+
} | {
|
|
154
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
155
|
+
pathPattern?: string | undefined;
|
|
156
|
+
} | {
|
|
157
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
158
|
+
pathPattern?: string | undefined;
|
|
159
|
+
})[]])[];
|
|
160
|
+
variables: (string | [string, ({
|
|
161
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
162
|
+
} | {
|
|
163
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
164
|
+
pathPattern?: string | undefined;
|
|
165
|
+
} | {
|
|
166
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
167
|
+
pathPattern?: string | undefined;
|
|
168
|
+
})[]])[];
|
|
169
|
+
attributes: (string | [string, ({
|
|
170
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
171
|
+
} | {
|
|
172
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
173
|
+
pathPattern?: string | undefined;
|
|
174
|
+
} | {
|
|
175
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
176
|
+
pathPattern?: string | undefined;
|
|
177
|
+
})[]])[];
|
|
178
|
+
callees: (string | [string, ({
|
|
179
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
180
|
+
} | {
|
|
181
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
182
|
+
pathPattern?: string | undefined;
|
|
183
|
+
} | {
|
|
184
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
185
|
+
pathPattern?: string | undefined;
|
|
186
|
+
})[]])[];
|
|
187
|
+
} & {
|
|
188
|
+
position?: "legacy" | "recommended" | undefined;
|
|
189
|
+
};
|
|
96
190
|
rule: {
|
|
97
191
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
98
192
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -149,7 +243,7 @@ declare const rules: readonly [{
|
|
|
149
243
|
meta: {
|
|
150
244
|
messages?: {
|
|
151
245
|
readonly position: "Incorrect important position. '{{ className }}' should be '{{ fix }}'.";
|
|
152
|
-
}
|
|
246
|
+
};
|
|
153
247
|
docs: {
|
|
154
248
|
description: string;
|
|
155
249
|
recommended: boolean;
|
|
@@ -171,7 +265,58 @@ declare const rules: readonly [{
|
|
|
171
265
|
readonly unnecessary: "Unnecessary line wrapping. Expected\n\n{{ notReadable }}\n\nto be\n\n{{ readable }}";
|
|
172
266
|
} | undefined;
|
|
173
267
|
name: "enforce-consistent-line-wrapping";
|
|
174
|
-
readonly options:
|
|
268
|
+
readonly options: {
|
|
269
|
+
rootFontSize?: number | undefined;
|
|
270
|
+
detectComponentClasses: boolean;
|
|
271
|
+
tsconfig?: string | undefined;
|
|
272
|
+
tailwindConfig?: string | undefined;
|
|
273
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
274
|
+
entryPoint?: string | undefined;
|
|
275
|
+
tags: (string | [string, ({
|
|
276
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
277
|
+
} | {
|
|
278
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
279
|
+
pathPattern?: string | undefined;
|
|
280
|
+
} | {
|
|
281
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
282
|
+
pathPattern?: string | undefined;
|
|
283
|
+
})[]])[];
|
|
284
|
+
variables: (string | [string, ({
|
|
285
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
286
|
+
} | {
|
|
287
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
288
|
+
pathPattern?: string | undefined;
|
|
289
|
+
} | {
|
|
290
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
291
|
+
pathPattern?: string | undefined;
|
|
292
|
+
})[]])[];
|
|
293
|
+
attributes: (string | [string, ({
|
|
294
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
295
|
+
} | {
|
|
296
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
297
|
+
pathPattern?: string | undefined;
|
|
298
|
+
} | {
|
|
299
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
300
|
+
pathPattern?: string | undefined;
|
|
301
|
+
})[]])[];
|
|
302
|
+
callees: (string | [string, ({
|
|
303
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
304
|
+
} | {
|
|
305
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
306
|
+
pathPattern?: string | undefined;
|
|
307
|
+
} | {
|
|
308
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
309
|
+
pathPattern?: string | undefined;
|
|
310
|
+
})[]])[];
|
|
311
|
+
} & {
|
|
312
|
+
classesPerLine: number;
|
|
313
|
+
group: "never" | "newLine" | "emptyLine";
|
|
314
|
+
indent: number | "tab";
|
|
315
|
+
lineBreakStyle: "unix" | "windows";
|
|
316
|
+
preferSingleLine: boolean;
|
|
317
|
+
printWidth: number;
|
|
318
|
+
strictness: "strict" | "loose";
|
|
319
|
+
};
|
|
175
320
|
rule: {
|
|
176
321
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
177
322
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -235,7 +380,7 @@ declare const rules: readonly [{
|
|
|
235
380
|
messages?: {
|
|
236
381
|
readonly missing: "Incorrect line wrapping. Expected\n\n{{ notReadable }}\n\nto be\n\n{{ readable }}";
|
|
237
382
|
readonly unnecessary: "Unnecessary line wrapping. Expected\n\n{{ notReadable }}\n\nto be\n\n{{ readable }}";
|
|
238
|
-
}
|
|
383
|
+
};
|
|
239
384
|
docs: {
|
|
240
385
|
description: string;
|
|
241
386
|
recommended: boolean;
|
|
@@ -256,7 +401,52 @@ declare const rules: readonly [{
|
|
|
256
401
|
readonly incorrect: "Incorrect variable syntax: {{ className }}.";
|
|
257
402
|
} | undefined;
|
|
258
403
|
name: "enforce-consistent-variable-syntax";
|
|
259
|
-
readonly options:
|
|
404
|
+
readonly options: {
|
|
405
|
+
rootFontSize?: number | undefined;
|
|
406
|
+
detectComponentClasses: boolean;
|
|
407
|
+
tsconfig?: string | undefined;
|
|
408
|
+
tailwindConfig?: string | undefined;
|
|
409
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
410
|
+
entryPoint?: string | undefined;
|
|
411
|
+
tags: (string | [string, ({
|
|
412
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
413
|
+
} | {
|
|
414
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
415
|
+
pathPattern?: string | undefined;
|
|
416
|
+
} | {
|
|
417
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
418
|
+
pathPattern?: string | undefined;
|
|
419
|
+
})[]])[];
|
|
420
|
+
variables: (string | [string, ({
|
|
421
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
422
|
+
} | {
|
|
423
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
424
|
+
pathPattern?: string | undefined;
|
|
425
|
+
} | {
|
|
426
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
427
|
+
pathPattern?: string | undefined;
|
|
428
|
+
})[]])[];
|
|
429
|
+
attributes: (string | [string, ({
|
|
430
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
431
|
+
} | {
|
|
432
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
433
|
+
pathPattern?: string | undefined;
|
|
434
|
+
} | {
|
|
435
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
436
|
+
pathPattern?: string | undefined;
|
|
437
|
+
})[]])[];
|
|
438
|
+
callees: (string | [string, ({
|
|
439
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
440
|
+
} | {
|
|
441
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
442
|
+
pathPattern?: string | undefined;
|
|
443
|
+
} | {
|
|
444
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
445
|
+
pathPattern?: string | undefined;
|
|
446
|
+
})[]])[];
|
|
447
|
+
} & {
|
|
448
|
+
syntax: "shorthand" | "variable";
|
|
449
|
+
};
|
|
260
450
|
rule: {
|
|
261
451
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
262
452
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -313,7 +503,7 @@ declare const rules: readonly [{
|
|
|
313
503
|
meta: {
|
|
314
504
|
messages?: {
|
|
315
505
|
readonly incorrect: "Incorrect variable syntax: {{ className }}.";
|
|
316
|
-
}
|
|
506
|
+
};
|
|
317
507
|
docs: {
|
|
318
508
|
description: string;
|
|
319
509
|
recommended: boolean;
|
|
@@ -335,7 +525,52 @@ declare const rules: readonly [{
|
|
|
335
525
|
readonly unnecessary: "Unnecessary whitespace";
|
|
336
526
|
} | undefined;
|
|
337
527
|
name: "enforce-shorthand-classes";
|
|
338
|
-
readonly options:
|
|
528
|
+
readonly options: {
|
|
529
|
+
rootFontSize?: number | undefined;
|
|
530
|
+
detectComponentClasses: boolean;
|
|
531
|
+
tsconfig?: string | undefined;
|
|
532
|
+
tailwindConfig?: string | undefined;
|
|
533
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
534
|
+
entryPoint?: string | undefined;
|
|
535
|
+
tags: (string | [string, ({
|
|
536
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
537
|
+
} | {
|
|
538
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
539
|
+
pathPattern?: string | undefined;
|
|
540
|
+
} | {
|
|
541
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
542
|
+
pathPattern?: string | undefined;
|
|
543
|
+
})[]])[];
|
|
544
|
+
variables: (string | [string, ({
|
|
545
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
546
|
+
} | {
|
|
547
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
548
|
+
pathPattern?: string | undefined;
|
|
549
|
+
} | {
|
|
550
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
551
|
+
pathPattern?: string | undefined;
|
|
552
|
+
})[]])[];
|
|
553
|
+
attributes: (string | [string, ({
|
|
554
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
555
|
+
} | {
|
|
556
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
557
|
+
pathPattern?: string | undefined;
|
|
558
|
+
} | {
|
|
559
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
560
|
+
pathPattern?: string | undefined;
|
|
561
|
+
})[]])[];
|
|
562
|
+
callees: (string | [string, ({
|
|
563
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
564
|
+
} | {
|
|
565
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
566
|
+
pathPattern?: string | undefined;
|
|
567
|
+
} | {
|
|
568
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
569
|
+
pathPattern?: string | undefined;
|
|
570
|
+
})[]])[];
|
|
571
|
+
} & {
|
|
572
|
+
[x: string]: unknown;
|
|
573
|
+
};
|
|
339
574
|
rule: {
|
|
340
575
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
341
576
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -393,7 +628,7 @@ declare const rules: readonly [{
|
|
|
393
628
|
messages?: {
|
|
394
629
|
readonly longhand: "Non shorthand class detected. Expected {{ longhands }} to be {{ shorthands }}";
|
|
395
630
|
readonly unnecessary: "Unnecessary whitespace";
|
|
396
|
-
}
|
|
631
|
+
};
|
|
397
632
|
docs: {
|
|
398
633
|
description: string;
|
|
399
634
|
recommended: boolean;
|
|
@@ -414,7 +649,52 @@ declare const rules: readonly [{
|
|
|
414
649
|
readonly conflicting: "Conflicting class detected: \"{{ className }}\" and \"{{ conflictingClassString }}\" apply the same CSS properties: \"{{ conflictingPropertiesString }}\".";
|
|
415
650
|
} | undefined;
|
|
416
651
|
name: "no-conflicting-classes";
|
|
417
|
-
readonly options:
|
|
652
|
+
readonly options: {
|
|
653
|
+
rootFontSize?: number | undefined;
|
|
654
|
+
detectComponentClasses: boolean;
|
|
655
|
+
tsconfig?: string | undefined;
|
|
656
|
+
tailwindConfig?: string | undefined;
|
|
657
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
658
|
+
entryPoint?: string | undefined;
|
|
659
|
+
tags: (string | [string, ({
|
|
660
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
661
|
+
} | {
|
|
662
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
663
|
+
pathPattern?: string | undefined;
|
|
664
|
+
} | {
|
|
665
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
666
|
+
pathPattern?: string | undefined;
|
|
667
|
+
})[]])[];
|
|
668
|
+
variables: (string | [string, ({
|
|
669
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
670
|
+
} | {
|
|
671
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
672
|
+
pathPattern?: string | undefined;
|
|
673
|
+
} | {
|
|
674
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
675
|
+
pathPattern?: string | undefined;
|
|
676
|
+
})[]])[];
|
|
677
|
+
attributes: (string | [string, ({
|
|
678
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
679
|
+
} | {
|
|
680
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
681
|
+
pathPattern?: string | undefined;
|
|
682
|
+
} | {
|
|
683
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
684
|
+
pathPattern?: string | undefined;
|
|
685
|
+
})[]])[];
|
|
686
|
+
callees: (string | [string, ({
|
|
687
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
688
|
+
} | {
|
|
689
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
690
|
+
pathPattern?: string | undefined;
|
|
691
|
+
} | {
|
|
692
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
693
|
+
pathPattern?: string | undefined;
|
|
694
|
+
})[]])[];
|
|
695
|
+
} & {
|
|
696
|
+
[x: string]: unknown;
|
|
697
|
+
};
|
|
418
698
|
rule: {
|
|
419
699
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
420
700
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -471,7 +751,7 @@ declare const rules: readonly [{
|
|
|
471
751
|
meta: {
|
|
472
752
|
messages?: {
|
|
473
753
|
readonly conflicting: "Conflicting class detected: \"{{ className }}\" and \"{{ conflictingClassString }}\" apply the same CSS properties: \"{{ conflictingPropertiesString }}\".";
|
|
474
|
-
}
|
|
754
|
+
};
|
|
475
755
|
docs: {
|
|
476
756
|
description: string;
|
|
477
757
|
recommended: boolean;
|
|
@@ -493,7 +773,52 @@ declare const rules: readonly [{
|
|
|
493
773
|
readonly replaceable: "Deprecated class detected. Replace \"{{ className }}\" with \"{{fix}}\".";
|
|
494
774
|
} | undefined;
|
|
495
775
|
name: "no-deprecated-classes";
|
|
496
|
-
readonly options:
|
|
776
|
+
readonly options: {
|
|
777
|
+
rootFontSize?: number | undefined;
|
|
778
|
+
detectComponentClasses: boolean;
|
|
779
|
+
tsconfig?: string | undefined;
|
|
780
|
+
tailwindConfig?: string | undefined;
|
|
781
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
782
|
+
entryPoint?: string | undefined;
|
|
783
|
+
tags: (string | [string, ({
|
|
784
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
785
|
+
} | {
|
|
786
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
787
|
+
pathPattern?: string | undefined;
|
|
788
|
+
} | {
|
|
789
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
790
|
+
pathPattern?: string | undefined;
|
|
791
|
+
})[]])[];
|
|
792
|
+
variables: (string | [string, ({
|
|
793
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
794
|
+
} | {
|
|
795
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
796
|
+
pathPattern?: string | undefined;
|
|
797
|
+
} | {
|
|
798
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
799
|
+
pathPattern?: string | undefined;
|
|
800
|
+
})[]])[];
|
|
801
|
+
attributes: (string | [string, ({
|
|
802
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
803
|
+
} | {
|
|
804
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
805
|
+
pathPattern?: string | undefined;
|
|
806
|
+
} | {
|
|
807
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
808
|
+
pathPattern?: string | undefined;
|
|
809
|
+
})[]])[];
|
|
810
|
+
callees: (string | [string, ({
|
|
811
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
812
|
+
} | {
|
|
813
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
814
|
+
pathPattern?: string | undefined;
|
|
815
|
+
} | {
|
|
816
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
817
|
+
pathPattern?: string | undefined;
|
|
818
|
+
})[]])[];
|
|
819
|
+
} & {
|
|
820
|
+
[x: string]: unknown;
|
|
821
|
+
};
|
|
497
822
|
rule: {
|
|
498
823
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
499
824
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -551,7 +876,7 @@ declare const rules: readonly [{
|
|
|
551
876
|
messages?: {
|
|
552
877
|
readonly irreplaceable: "Class \"{{ className }}\" is deprecated. Check the tailwindcss documentation for more information: https://tailwindcss.com/docs/upgrade-guide#removed-deprecated-utilities";
|
|
553
878
|
readonly replaceable: "Deprecated class detected. Replace \"{{ className }}\" with \"{{fix}}\".";
|
|
554
|
-
}
|
|
879
|
+
};
|
|
555
880
|
docs: {
|
|
556
881
|
description: string;
|
|
557
882
|
recommended: boolean;
|
|
@@ -572,7 +897,52 @@ declare const rules: readonly [{
|
|
|
572
897
|
readonly duplicate: "Duplicate classname: \"{{ className }}\".";
|
|
573
898
|
} | undefined;
|
|
574
899
|
name: "no-duplicate-classes";
|
|
575
|
-
readonly options:
|
|
900
|
+
readonly options: {
|
|
901
|
+
rootFontSize?: number | undefined;
|
|
902
|
+
detectComponentClasses: boolean;
|
|
903
|
+
tsconfig?: string | undefined;
|
|
904
|
+
tailwindConfig?: string | undefined;
|
|
905
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
906
|
+
entryPoint?: string | undefined;
|
|
907
|
+
tags: (string | [string, ({
|
|
908
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
909
|
+
} | {
|
|
910
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
911
|
+
pathPattern?: string | undefined;
|
|
912
|
+
} | {
|
|
913
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
914
|
+
pathPattern?: string | undefined;
|
|
915
|
+
})[]])[];
|
|
916
|
+
variables: (string | [string, ({
|
|
917
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
918
|
+
} | {
|
|
919
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
920
|
+
pathPattern?: string | undefined;
|
|
921
|
+
} | {
|
|
922
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
923
|
+
pathPattern?: string | undefined;
|
|
924
|
+
})[]])[];
|
|
925
|
+
attributes: (string | [string, ({
|
|
926
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
927
|
+
} | {
|
|
928
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
929
|
+
pathPattern?: string | undefined;
|
|
930
|
+
} | {
|
|
931
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
932
|
+
pathPattern?: string | undefined;
|
|
933
|
+
})[]])[];
|
|
934
|
+
callees: (string | [string, ({
|
|
935
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
936
|
+
} | {
|
|
937
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
938
|
+
pathPattern?: string | undefined;
|
|
939
|
+
} | {
|
|
940
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
941
|
+
pathPattern?: string | undefined;
|
|
942
|
+
})[]])[];
|
|
943
|
+
} & {
|
|
944
|
+
[x: string]: unknown;
|
|
945
|
+
};
|
|
576
946
|
rule: {
|
|
577
947
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
578
948
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -629,7 +999,7 @@ declare const rules: readonly [{
|
|
|
629
999
|
meta: {
|
|
630
1000
|
messages?: {
|
|
631
1001
|
readonly duplicate: "Duplicate classname: \"{{ className }}\".";
|
|
632
|
-
}
|
|
1002
|
+
};
|
|
633
1003
|
docs: {
|
|
634
1004
|
description: string;
|
|
635
1005
|
recommended: boolean;
|
|
@@ -648,7 +1018,56 @@ declare const rules: readonly [{
|
|
|
648
1018
|
category: "correctness";
|
|
649
1019
|
messages: Record<string, string> | undefined;
|
|
650
1020
|
name: "no-restricted-classes";
|
|
651
|
-
readonly options:
|
|
1021
|
+
readonly options: {
|
|
1022
|
+
rootFontSize?: number | undefined;
|
|
1023
|
+
detectComponentClasses: boolean;
|
|
1024
|
+
tsconfig?: string | undefined;
|
|
1025
|
+
tailwindConfig?: string | undefined;
|
|
1026
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
1027
|
+
entryPoint?: string | undefined;
|
|
1028
|
+
tags: (string | [string, ({
|
|
1029
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1030
|
+
} | {
|
|
1031
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1032
|
+
pathPattern?: string | undefined;
|
|
1033
|
+
} | {
|
|
1034
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1035
|
+
pathPattern?: string | undefined;
|
|
1036
|
+
})[]])[];
|
|
1037
|
+
variables: (string | [string, ({
|
|
1038
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1039
|
+
} | {
|
|
1040
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1041
|
+
pathPattern?: string | undefined;
|
|
1042
|
+
} | {
|
|
1043
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1044
|
+
pathPattern?: string | undefined;
|
|
1045
|
+
})[]])[];
|
|
1046
|
+
attributes: (string | [string, ({
|
|
1047
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1048
|
+
} | {
|
|
1049
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1050
|
+
pathPattern?: string | undefined;
|
|
1051
|
+
} | {
|
|
1052
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1053
|
+
pathPattern?: string | undefined;
|
|
1054
|
+
})[]])[];
|
|
1055
|
+
callees: (string | [string, ({
|
|
1056
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1057
|
+
} | {
|
|
1058
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1059
|
+
pathPattern?: string | undefined;
|
|
1060
|
+
} | {
|
|
1061
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1062
|
+
pathPattern?: string | undefined;
|
|
1063
|
+
})[]])[];
|
|
1064
|
+
} & {
|
|
1065
|
+
restrict: (string | {
|
|
1066
|
+
fix?: string | undefined;
|
|
1067
|
+
message?: string | undefined;
|
|
1068
|
+
pattern: string;
|
|
1069
|
+
})[];
|
|
1070
|
+
};
|
|
652
1071
|
rule: {
|
|
653
1072
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
654
1073
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -707,7 +1126,7 @@ declare const rules: readonly [{
|
|
|
707
1126
|
MessageIds: string;
|
|
708
1127
|
}>) => import("eslint").Rule.RuleListener;
|
|
709
1128
|
meta: {
|
|
710
|
-
messages?: Record<string, string
|
|
1129
|
+
messages?: Record<string, string>;
|
|
711
1130
|
docs: {
|
|
712
1131
|
description: string;
|
|
713
1132
|
recommended: boolean;
|
|
@@ -728,7 +1147,52 @@ declare const rules: readonly [{
|
|
|
728
1147
|
readonly unnecessary: "Unnecessary whitespace.";
|
|
729
1148
|
} | undefined;
|
|
730
1149
|
name: "no-unnecessary-whitespace";
|
|
731
|
-
readonly options:
|
|
1150
|
+
readonly options: {
|
|
1151
|
+
rootFontSize?: number | undefined;
|
|
1152
|
+
detectComponentClasses: boolean;
|
|
1153
|
+
tsconfig?: string | undefined;
|
|
1154
|
+
tailwindConfig?: string | undefined;
|
|
1155
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
1156
|
+
entryPoint?: string | undefined;
|
|
1157
|
+
tags: (string | [string, ({
|
|
1158
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1159
|
+
} | {
|
|
1160
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1161
|
+
pathPattern?: string | undefined;
|
|
1162
|
+
} | {
|
|
1163
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1164
|
+
pathPattern?: string | undefined;
|
|
1165
|
+
})[]])[];
|
|
1166
|
+
variables: (string | [string, ({
|
|
1167
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1168
|
+
} | {
|
|
1169
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1170
|
+
pathPattern?: string | undefined;
|
|
1171
|
+
} | {
|
|
1172
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1173
|
+
pathPattern?: string | undefined;
|
|
1174
|
+
})[]])[];
|
|
1175
|
+
attributes: (string | [string, ({
|
|
1176
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1177
|
+
} | {
|
|
1178
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1179
|
+
pathPattern?: string | undefined;
|
|
1180
|
+
} | {
|
|
1181
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1182
|
+
pathPattern?: string | undefined;
|
|
1183
|
+
})[]])[];
|
|
1184
|
+
callees: (string | [string, ({
|
|
1185
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1186
|
+
} | {
|
|
1187
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1188
|
+
pathPattern?: string | undefined;
|
|
1189
|
+
} | {
|
|
1190
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1191
|
+
pathPattern?: string | undefined;
|
|
1192
|
+
})[]])[];
|
|
1193
|
+
} & {
|
|
1194
|
+
allowMultiline: boolean;
|
|
1195
|
+
};
|
|
732
1196
|
rule: {
|
|
733
1197
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
734
1198
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -785,7 +1249,7 @@ declare const rules: readonly [{
|
|
|
785
1249
|
meta: {
|
|
786
1250
|
messages?: {
|
|
787
1251
|
readonly unnecessary: "Unnecessary whitespace.";
|
|
788
|
-
}
|
|
1252
|
+
};
|
|
789
1253
|
docs: {
|
|
790
1254
|
description: string;
|
|
791
1255
|
recommended: boolean;
|
|
@@ -806,7 +1270,52 @@ declare const rules: readonly [{
|
|
|
806
1270
|
readonly unknown: "Unknown class detected: {{ className }}";
|
|
807
1271
|
} | undefined;
|
|
808
1272
|
name: "no-unknown-classes";
|
|
809
|
-
readonly options:
|
|
1273
|
+
readonly options: {
|
|
1274
|
+
rootFontSize?: number | undefined;
|
|
1275
|
+
detectComponentClasses: boolean;
|
|
1276
|
+
tsconfig?: string | undefined;
|
|
1277
|
+
tailwindConfig?: string | undefined;
|
|
1278
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
1279
|
+
entryPoint?: string | undefined;
|
|
1280
|
+
tags: (string | [string, ({
|
|
1281
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1282
|
+
} | {
|
|
1283
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1284
|
+
pathPattern?: string | undefined;
|
|
1285
|
+
} | {
|
|
1286
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1287
|
+
pathPattern?: string | undefined;
|
|
1288
|
+
})[]])[];
|
|
1289
|
+
variables: (string | [string, ({
|
|
1290
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1291
|
+
} | {
|
|
1292
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1293
|
+
pathPattern?: string | undefined;
|
|
1294
|
+
} | {
|
|
1295
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1296
|
+
pathPattern?: string | undefined;
|
|
1297
|
+
})[]])[];
|
|
1298
|
+
attributes: (string | [string, ({
|
|
1299
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1300
|
+
} | {
|
|
1301
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1302
|
+
pathPattern?: string | undefined;
|
|
1303
|
+
} | {
|
|
1304
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1305
|
+
pathPattern?: string | undefined;
|
|
1306
|
+
})[]])[];
|
|
1307
|
+
callees: (string | [string, ({
|
|
1308
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1309
|
+
} | {
|
|
1310
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1311
|
+
pathPattern?: string | undefined;
|
|
1312
|
+
} | {
|
|
1313
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1314
|
+
pathPattern?: string | undefined;
|
|
1315
|
+
})[]])[];
|
|
1316
|
+
} & {
|
|
1317
|
+
ignore: string[];
|
|
1318
|
+
};
|
|
810
1319
|
rule: {
|
|
811
1320
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
812
1321
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -863,7 +1372,7 @@ declare const rules: readonly [{
|
|
|
863
1372
|
meta: {
|
|
864
1373
|
messages?: {
|
|
865
1374
|
readonly unknown: "Unknown class detected: {{ className }}";
|
|
866
|
-
}
|
|
1375
|
+
};
|
|
867
1376
|
docs: {
|
|
868
1377
|
description: string;
|
|
869
1378
|
recommended: boolean;
|
|
@@ -885,7 +1394,53 @@ declare const rules: readonly [{
|
|
|
885
1394
|
readonly single: "The class: \"{{ className }}\" can be simplified to \"{{canonicalClass}}\".";
|
|
886
1395
|
} | undefined;
|
|
887
1396
|
name: "enforce-canonical-classes";
|
|
888
|
-
readonly options:
|
|
1397
|
+
readonly options: {
|
|
1398
|
+
rootFontSize?: number | undefined;
|
|
1399
|
+
detectComponentClasses: boolean;
|
|
1400
|
+
tsconfig?: string | undefined;
|
|
1401
|
+
tailwindConfig?: string | undefined;
|
|
1402
|
+
messageStyle: "visual" | "compact" | "raw";
|
|
1403
|
+
entryPoint?: string | undefined;
|
|
1404
|
+
tags: (string | [string, ({
|
|
1405
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1406
|
+
} | {
|
|
1407
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1408
|
+
pathPattern?: string | undefined;
|
|
1409
|
+
} | {
|
|
1410
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1411
|
+
pathPattern?: string | undefined;
|
|
1412
|
+
})[]])[];
|
|
1413
|
+
variables: (string | [string, ({
|
|
1414
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1415
|
+
} | {
|
|
1416
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1417
|
+
pathPattern?: string | undefined;
|
|
1418
|
+
} | {
|
|
1419
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1420
|
+
pathPattern?: string | undefined;
|
|
1421
|
+
})[]])[];
|
|
1422
|
+
attributes: (string | [string, ({
|
|
1423
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1424
|
+
} | {
|
|
1425
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1426
|
+
pathPattern?: string | undefined;
|
|
1427
|
+
} | {
|
|
1428
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1429
|
+
pathPattern?: string | undefined;
|
|
1430
|
+
})[]])[];
|
|
1431
|
+
callees: (string | [string, ({
|
|
1432
|
+
match: import("../types/rule.js").MatcherType.String;
|
|
1433
|
+
} | {
|
|
1434
|
+
match: import("../types/rule.js").MatcherType.ObjectKey;
|
|
1435
|
+
pathPattern?: string | undefined;
|
|
1436
|
+
} | {
|
|
1437
|
+
match: import("../types/rule.js").MatcherType.ObjectValue;
|
|
1438
|
+
pathPattern?: string | undefined;
|
|
1439
|
+
})[]])[];
|
|
1440
|
+
} & {
|
|
1441
|
+
collapse: boolean;
|
|
1442
|
+
logical: boolean;
|
|
1443
|
+
};
|
|
889
1444
|
rule: {
|
|
890
1445
|
create: (ctx: import("node_modules/@eslint/core/dist/cjs/types.cjs").RuleContext<{
|
|
891
1446
|
LangOptions: Linter.LanguageOptions;
|
|
@@ -944,7 +1499,7 @@ declare const rules: readonly [{
|
|
|
944
1499
|
messages?: {
|
|
945
1500
|
readonly multiple: "The classes: \"{{ classNames }}\" can be simplified to \"{{canonicalClass}}\".";
|
|
946
1501
|
readonly single: "The class: \"{{ className }}\" can be simplified to \"{{canonicalClass}}\".";
|
|
947
|
-
}
|
|
1502
|
+
};
|
|
948
1503
|
docs: {
|
|
949
1504
|
description: string;
|
|
950
1505
|
recommended: boolean;
|