feat: add semantic CSS stylesheets (#3274)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
This commit is contained in:
Amruth Pillai
2026-07-30 12:39:15 +02:00
committed by GitHub
co-authored by Cursor Agent
parent 4ac19f81b3
commit d2ffbf9618
320 changed files with 78393 additions and 2915 deletions
+57
View File
@@ -1,9 +1,28 @@
// @vitest-environment happy-dom
import type { ResumeData } from "@reactive-resume/schema/resume/data";
import { describe, expect, it } from "vitest";
import { defaultResumeData } from "@reactive-resume/schema/resume/default";
import { buildDocx } from "./index";
const createRendererUnsafeResumeData = (): ResumeData => {
const data = structuredClone(defaultResumeData);
data.customSections = [
{
id: "custom-experience",
type: "experience",
title: "Experience",
icon: "",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [{ id: "summary-shaped-item", hidden: false, content: "<p>Missing company</p>" }],
} as never,
];
return data;
};
describe("buildDocx", () => {
it("returns a Blob for the default resume", async () => {
const blob = await buildDocx(defaultResumeData);
@@ -27,4 +46,42 @@ describe("buildDocx", () => {
expect(promise).toBeInstanceOf(Promise);
await expect(promise).rejects.toThrow();
});
it("rejects renderer-unsafe data before DOCX builder dispatch", async () => {
const error = await buildDocx(createRendererUnsafeResumeData()).catch((caught: unknown) => caught);
expect(error).toHaveProperty("issues.0.path", ["customSections", 0, "items", 0, "company"]);
});
it("normalizes valid legacy data before DOCX building", async () => {
const data = {
...structuredClone(defaultResumeData),
customSections: [
{
id: "custom-experience",
type: "experience",
title: "Experience",
icon: "",
columns: 1,
hidden: false,
keepTogether: false,
startOnNewPage: false,
items: [
{
id: "experience-item",
hidden: false,
company: "Analytical Engines",
position: "Programmer",
location: "London",
period: "18421843",
description: "<p>Wrote the first algorithm.</p>",
content: "<p>Compatible overlap</p>",
},
],
},
],
} as unknown as ResumeData;
await expect(buildDocx(data)).resolves.toBeInstanceOf(Blob);
});
});