Skip to content

Commit 7b29a0a

Browse files
committed
fix(classes): added sanitization for classes before and after processing
1 parent 704d691 commit 7b29a0a

File tree

3 files changed

+8
-3
lines changed

3 files changed

+8
-3
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"author": "Suraj Air",
66
"license": "BSD-3-Clause",
77
"homepage": "https://chaibuilder.com",
8-
"version": "2.0.0-beta.46",
8+
"version": "2.0.0-beta.47",
99
"type": "module",
1010
"repository": {
1111
"type": "git",

src/core/functions/orderClassesByBreakpoint.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { constructClassObject } from "./Class";
22

33
export function orderClassesByBreakpoint(classes: string): string {
4+
//sanitize the classes
5+
classes = classes.replace(/\s+/g, " ");
46
const classesArray = classes.split(" ").map(constructClassObject);
57
const breakpointOrder = ["xs", "sm", "md", "lg", "xl", "2xl"];
68
return classesArray
@@ -20,5 +22,6 @@ if (import.meta.vitest) {
2022
expect(orderClassesByBreakpoint("xl:sticky block sm:absolute")).toBe("block sm:absolute xl:sticky");
2123
expect(orderClassesByBreakpoint("sm:bg-red-500 bg-red-400")).toBe("bg-red-400 sm:bg-red-500");
2224
expect(orderClassesByBreakpoint("sm:w-[30%] w-[30%]")).toBe("w-[30%] sm:w-[30%]");
25+
expect(orderClassesByBreakpoint("text-[30px] sm:text-[20px]")).toBe("text-[30px] sm:text-[20px]");
2326
});
2427
}

src/core/functions/removeDuplicateClasses.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ClassDerivedObject, constructClassObject } from "./Class";
22

33
export function removeDuplicateClasses(classes: string): string {
4+
classes = classes.replace(/\s+/g, " ");
45
if (!classes) return "";
56

67
// breakpoint order
@@ -23,19 +24,20 @@ export function removeDuplicateClasses(classes: string): string {
2324
}
2425
}
2526
}
26-
return filteredClasses.trim();
27+
return filteredClasses.replace(/\s+/g, " ").trim();
2728
}
2829

2930
if (import.meta.vitest) {
3031
test("removeDuplicateClasses (tailwind classes) at higher breakpoints", () => {
3132
expect(removeDuplicateClasses("")).toBe("");
3233
expect(removeDuplicateClasses("bg-red-400")).toBe("bg-red-400");
33-
expect(removeDuplicateClasses("bg-red-400 sm:bg-red-500")).toBe("bg-red-400 sm:bg-red-500");
34+
expect(removeDuplicateClasses("bg-red-400 sm:bg-red-500")).toBe("bg-red-400 sm:bg-red-500");
3435
expect(removeDuplicateClasses("bg-red-400 sm:bg-red-400")).toBe("bg-red-400");
3536
expect(removeDuplicateClasses("bg-red-400 sm:bg-red-400 lg:bg-red-400")).toBe("bg-red-400");
3637
expect(removeDuplicateClasses("p-4 sm:p-6 md:p-4")).toBe("p-4 sm:p-6 md:p-4");
3738
expect(removeDuplicateClasses("p-4 sm:p-6 md:p-4 lg:p-4")).toBe("p-4 sm:p-6 md:p-4");
3839
expect(removeDuplicateClasses("sm:bg-red-400 bg-red-400")).toBe("bg-red-400");
3940
expect(removeDuplicateClasses("w-[30%] sm:w-[30%]")).toBe("w-[30%]");
41+
expect(removeDuplicateClasses("w-[30%] sm:w-[30%] md:w-[40%]")).toBe("w-[30%] md:w-[40%]");
4042
});
4143
}

0 commit comments

Comments
 (0)