import { readFileSync } from "node:fs"; import { fileURLToPath } from "node:url"; import { describe, expect, it } from "vitest"; interface PackageManifest { scripts?: Record; } const desktopRoot = fileURLToPath(new URL("../", import.meta.url)); const projectRoot = fileURLToPath(new URL("../../../", import.meta.url)); function readManifest(path: string): PackageManifest { return JSON.parse(readFileSync(path, "utf8")) as PackageManifest; } describe("桌面发行构建链", () => { it("打包前按依赖顺序完整重建内嵌 Web", () => { const rootManifest = readManifest(`${projectRoot}/package.json`); const desktopManifest = readManifest(`${desktopRoot}/package.json`); const webBuild = rootManifest.scripts?.["build:web-runtime"] ?? ""; const expectedWorkspaces = [ "@md-to-pdf/markdown-echarts", "@md-to-pdf/core", "@md-to-pdf/renderer", "@md-to-pdf/application", "@md-to-pdf/preview-engine", "@md-to-pdf/web" ]; let previousIndex = -1; for (const workspace of expectedWorkspaces) { const workspaceIndex = webBuild.indexOf(workspace); expect(workspaceIndex).toBeGreaterThan(previousIndex); previousIndex = workspaceIndex; } expect(desktopManifest.scripts?.["build:embedded-web"]).toBe( "npm --prefix ../.. run build:web-runtime" ); expect(desktopManifest.scripts?.package).toMatch( /^npm run build:embedded-web && / ); expect(desktopManifest.scripts?.make).toMatch( /^npm run build:embedded-web && / ); expect(rootManifest.scripts?.["desktop:package"]).toBe( "npm run package -w @md-to-pdf/desktop" ); }); });