feat: 发布 v0.4.0 桌面端

This commit is contained in:
SkyJourney
2026-07-27 20:56:39 +08:00
parent 92a5bfd016
commit 4d60741f5a
90 changed files with 10431 additions and 223 deletions
+62 -2
View File
@@ -1,15 +1,30 @@
import { describe, expect, it, vi } from "vitest";
import { defaultExportConfig } from "@md-to-pdf/core";
import {
afterEach,
describe,
expect,
it,
vi
} from "vitest";
import {
createPagedDocumentPayload,
defaultExportConfig
} from "@md-to-pdf/core";
import {
createPdfExportCacheKey,
downloadPdf,
getCachedPdfExport,
getOrRequestPdfExport,
parseContentDispositionFileName,
requestDesktopPdfExport,
requestPdfExport,
type CachedPdfExport,
type PdfExportRequest
} from "../src/pdf-export";
afterEach(() => {
vi.unstubAllGlobals();
});
describe("PDF 导出客户端", () => {
it("仅复用与当前文档和导出配置完全匹配的 PDF", () => {
const request: PdfExportRequest = {
@@ -178,4 +193,49 @@ describe("PDF 导出客户端", () => {
)
).rejects.toThrow("PDF 生成队列已满");
});
it("桌面端使用共享分页载荷生成并保存 PDF", async () => {
const payload = createPagedDocumentPayload({
document: {
rendererVersion: 1,
articleHtml: '<article id="write">测试</article>',
bodyHtml: "测试",
metadata: {
title: "测试",
author: "",
subject: "",
keywords: [],
language: "zh-CN"
},
features: [],
warnings: []
},
fileName: "测试.md",
themeCss: "",
exportConfig: defaultExportConfig
});
const generatePdf = vi.fn(async () => ({
pdf: new TextEncoder().encode("%PDF-desktop"),
pageCount: 2,
echartsErrors: [],
mermaidErrors: ["图表 1"]
}));
const savePdf = vi.fn(async () => true);
vi.stubGlobal("window", {
mdToPdfDesktop: { generatePdf, savePdf }
});
const generated = await requestDesktopPdfExport(payload);
const saved = await downloadPdf(generated.blob, generated.fileName);
expect(generatePdf).toHaveBeenCalledWith(payload);
expect(generated.fileName).toBe("测试.pdf");
expect(generated.pageCount).toBe(2);
expect(generated.mermaidErrorCount).toBe(1);
expect(savePdf).toHaveBeenCalledWith(
"测试.pdf",
expect.any(Uint8Array)
);
expect(saved).toBe(true);
});
});