eslint-plugin-better-tailwindcss 3.4.0 → 3.4.2

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 (48) hide show
  1. package/README.md +1 -1
  2. package/lib/cjs/async-utils/resolvers.d.ts.map +1 -1
  3. package/lib/cjs/async-utils/resolvers.js +0 -1
  4. package/lib/cjs/async-utils/resolvers.js.map +1 -1
  5. package/lib/cjs/parsers/es.d.ts.map +1 -1
  6. package/lib/cjs/parsers/es.js +3 -2
  7. package/lib/cjs/parsers/es.js.map +1 -1
  8. package/lib/cjs/rules/no-conflicting-classes.d.ts.map +1 -1
  9. package/lib/cjs/rules/no-conflicting-classes.js +17 -16
  10. package/lib/cjs/rules/no-conflicting-classes.js.map +1 -1
  11. package/lib/cjs/tailwindcss/conflicting-classes.async.v4.d.ts.map +1 -1
  12. package/lib/cjs/tailwindcss/conflicting-classes.async.v4.js +10 -15
  13. package/lib/cjs/tailwindcss/conflicting-classes.async.v4.js.map +1 -1
  14. package/lib/cjs/tailwindcss/conflicting-classes.d.ts +6 -5
  15. package/lib/cjs/tailwindcss/conflicting-classes.d.ts.map +1 -1
  16. package/lib/cjs/tailwindcss/conflicting-classes.js.map +1 -1
  17. package/lib/esm/async-utils/resolvers.d.ts.map +1 -1
  18. package/lib/esm/async-utils/resolvers.js +0 -1
  19. package/lib/esm/async-utils/resolvers.js.map +1 -1
  20. package/lib/esm/parsers/es.d.ts.map +1 -1
  21. package/lib/esm/parsers/es.js +3 -2
  22. package/lib/esm/parsers/es.js.map +1 -1
  23. package/lib/esm/rules/no-conflicting-classes.d.ts.map +1 -1
  24. package/lib/esm/rules/no-conflicting-classes.js +18 -17
  25. package/lib/esm/rules/no-conflicting-classes.js.map +1 -1
  26. package/lib/esm/tailwindcss/conflicting-classes.async.v4.d.ts.map +1 -1
  27. package/lib/esm/tailwindcss/conflicting-classes.async.v4.js +10 -15
  28. package/lib/esm/tailwindcss/conflicting-classes.async.v4.js.map +1 -1
  29. package/lib/esm/tailwindcss/conflicting-classes.d.ts +6 -5
  30. package/lib/esm/tailwindcss/conflicting-classes.d.ts.map +1 -1
  31. package/lib/esm/tailwindcss/conflicting-classes.js.map +1 -1
  32. package/package.json +11 -11
  33. package/lib/cjs/rules/multiline.d.ts +0 -15
  34. package/lib/cjs/rules/multiline.d.ts.map +0 -1
  35. package/lib/cjs/rules/multiline.js +0 -566
  36. package/lib/cjs/rules/multiline.js.map +0 -1
  37. package/lib/cjs/rules/sort-classes.d.ts +0 -19
  38. package/lib/cjs/rules/sort-classes.d.ts.map +0 -1
  39. package/lib/cjs/rules/sort-classes.js +0 -157
  40. package/lib/cjs/rules/sort-classes.js.map +0 -1
  41. package/lib/esm/rules/multiline.d.ts +0 -15
  42. package/lib/esm/rules/multiline.d.ts.map +0 -1
  43. package/lib/esm/rules/multiline.js +0 -563
  44. package/lib/esm/rules/multiline.js.map +0 -1
  45. package/lib/esm/rules/sort-classes.d.ts +0 -19
  46. package/lib/esm/rules/sort-classes.d.ts.map +0 -1
  47. package/lib/esm/rules/sort-classes.js +0 -153
  48. package/lib/esm/rules/sort-classes.js.map +0 -1
@@ -1,157 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sortClasses = void 0;
4
- exports.getOptions = getOptions;
5
- const default_options_js_1 = require("../options/default-options.js");
6
- const descriptions_js_1 = require("../options/descriptions.js");
7
- const class_order_js_1 = require("../tailwindcss/class-order.js");
8
- const options_js_1 = require("../utils/options.js");
9
- const quotes_js_1 = require("../utils/quotes.js");
10
- const rule_js_1 = require("../utils/rule.js");
11
- const utils_js_1 = require("../utils/utils.js");
12
- const defaultOptions = {
13
- attributes: default_options_js_1.DEFAULT_ATTRIBUTE_NAMES,
14
- callees: default_options_js_1.DEFAULT_CALLEE_NAMES,
15
- order: "improved",
16
- tags: default_options_js_1.DEFAULT_TAG_NAMES,
17
- variables: default_options_js_1.DEFAULT_VARIABLE_NAMES
18
- };
19
- const DOCUMENTATION_URL = "https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/sort-classes.md";
20
- exports.sortClasses = {
21
- name: "sort-classes",
22
- rule: {
23
- create: ctx => (0, rule_js_1.createRuleListener)(ctx, getOptions(ctx), lintLiterals),
24
- meta: {
25
- docs: {
26
- category: "Stylistic Issues",
27
- description: "Enforce a consistent order for tailwind classes.",
28
- recommended: true,
29
- url: DOCUMENTATION_URL
30
- },
31
- fixable: "code",
32
- schema: [
33
- {
34
- additionalProperties: false,
35
- properties: {
36
- ...descriptions_js_1.CALLEE_SCHEMA,
37
- ...descriptions_js_1.ATTRIBUTE_SCHEMA,
38
- ...descriptions_js_1.VARIABLE_SCHEMA,
39
- ...descriptions_js_1.TAG_SCHEMA,
40
- ...descriptions_js_1.ENTRYPOINT_SCHEMA,
41
- ...descriptions_js_1.TAILWIND_CONFIG_SCHEMA,
42
- order: {
43
- default: defaultOptions.order,
44
- description: "The algorithm to use when sorting classes.",
45
- enum: [
46
- "asc",
47
- "desc",
48
- "official",
49
- "improved"
50
- ],
51
- type: "string"
52
- }
53
- },
54
- type: "object"
55
- }
56
- ],
57
- type: "layout"
58
- }
59
- }
60
- };
61
- function lintLiterals(ctx, literals) {
62
- for (const literal of literals) {
63
- const classChunks = (0, utils_js_1.splitClasses)(literal.content);
64
- const whitespaceChunks = (0, utils_js_1.splitWhitespaces)(literal.content);
65
- const unsortableClasses = ["", ""];
66
- // remove sticky classes
67
- if (literal.closingBraces && whitespaceChunks[0] === "") {
68
- whitespaceChunks.shift();
69
- unsortableClasses[0] = classChunks.shift() ?? "";
70
- }
71
- if (literal.openingBraces && whitespaceChunks[whitespaceChunks.length - 1] === "") {
72
- whitespaceChunks.pop();
73
- unsortableClasses[1] = classChunks.pop() ?? "";
74
- }
75
- const [sortedClassChunks, warnings] = sortClassNames(ctx, classChunks);
76
- const classes = [];
77
- for (let i = 0; i < Math.max(sortedClassChunks.length, whitespaceChunks.length); i++) {
78
- whitespaceChunks[i] && classes.push(whitespaceChunks[i]);
79
- sortedClassChunks[i] && classes.push(sortedClassChunks[i]);
80
- }
81
- const escapedClasses = (0, quotes_js_1.escapeNestedQuotes)([
82
- unsortableClasses[0],
83
- ...classes,
84
- unsortableClasses[1]
85
- ].join(""), literal.openingQuote ?? literal.closingQuote ?? "`");
86
- const fixedClasses = [
87
- literal.openingQuote ?? "",
88
- literal.type === "TemplateLiteral" && literal.closingBraces ? literal.closingBraces : "",
89
- escapedClasses,
90
- literal.type === "TemplateLiteral" && literal.openingBraces ? literal.openingBraces : "",
91
- literal.closingQuote ?? ""
92
- ].join("");
93
- if (literal.raw === fixedClasses) {
94
- continue;
95
- }
96
- ctx.report({
97
- data: {
98
- notSorted: (0, utils_js_1.display)(literal.raw),
99
- sorted: (0, utils_js_1.display)(fixedClasses)
100
- },
101
- fix(fixer) {
102
- return fixer.replaceTextRange(literal.range, fixedClasses);
103
- },
104
- loc: literal.loc,
105
- message: (0, utils_js_1.augmentMessageWithWarnings)("Incorrect class order. Expected\n\n{{ notSorted }}\n\nto be\n\n{{ sorted }}", DOCUMENTATION_URL, warnings)
106
- });
107
- }
108
- }
109
- function sortClassNames(ctx, classes) {
110
- const { order, tailwindConfig } = getOptions(ctx);
111
- if (order === "asc") {
112
- return [classes.toSorted((a, b) => a.localeCompare(b))];
113
- }
114
- if (order === "desc") {
115
- return [classes.toSorted((a, b) => b.localeCompare(a))];
116
- }
117
- const { classOrder, warnings } = (0, class_order_js_1.getClassOrder)({ classes, configPath: tailwindConfig, cwd: ctx.cwd });
118
- const officiallySortedClasses = classOrder
119
- .toSorted(([, a], [, z]) => {
120
- if (a === z) {
121
- return 0;
122
- }
123
- if (a === null) {
124
- return -1;
125
- }
126
- if (z === null) {
127
- return +1;
128
- }
129
- return +(a - z > 0n) - +(a - z < 0n);
130
- })
131
- .map(([className]) => className);
132
- if (order === "official") {
133
- return [officiallySortedClasses, warnings];
134
- }
135
- const groupedByVariant = new Map();
136
- for (const className of officiallySortedClasses) {
137
- const variant = className.match(/^.*?:/)?.[0] ?? "";
138
- groupedByVariant.set(variant, [...groupedByVariant.get(variant) ?? [], className]);
139
- }
140
- return [
141
- Array.from(groupedByVariant.entries())
142
- .sort(([a], [b]) => a === "" ? -1 : b === "" ? 1 : 0)
143
- .map(([, classes]) => classes)
144
- .flat(),
145
- warnings
146
- ];
147
- }
148
- function getOptions(ctx) {
149
- const options = ctx.options[0] ?? {};
150
- const common = (0, options_js_1.getCommonOptions)(ctx);
151
- const order = options.order ?? defaultOptions.order;
152
- return {
153
- ...common,
154
- order
155
- };
156
- }
157
- //# sourceMappingURL=sort-classes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sort-classes.js","sourceRoot":"","sources":["../../../src/rules/sort-classes.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { AttributeOption, CalleeOption, ESLintRule, TagOption, VariableOption } from "../../types/rule.js";
2
- export type Options = [
3
- Partial<AttributeOption & CalleeOption & TagOption & VariableOption & {
4
- classesPerLine?: number;
5
- entryPoint?: string;
6
- group?: "emptyLine" | "never" | "newLine";
7
- indent?: "tab" | number;
8
- lineBreakStyle?: "unix" | "windows";
9
- preferSingleLine?: boolean;
10
- printWidth?: number;
11
- tailwindConfig?: string;
12
- }>
13
- ];
14
- export declare const multiline: ESLintRule<Options>;
15
- //# sourceMappingURL=multiline.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiline.d.ts","sourceRoot":"","sources":["../../../src/rules/multiline.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACf,MAAM,kCAAkC,CAAC;AAI1C,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,CACL,eAAe,GACf,YAAY,GACZ,SAAS,GACT,cAAc,GACd;QACE,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;QAC1C,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CACF;CACF,CAAC;AAqBF,eAAO,MAAM,SAAS,EAAE,UAAU,CAAC,OAAO,CAsEzC,CAAC"}