UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

49 lines (47 loc) • 1.96 kB
import { existsSync, readFileSync } from "node:fs"; import { join } from "node:path"; import { composeVersionManifest } from "every-plugin/version-manifest"; import { BuildEntryReportSchema } from "every-plugin/build/artifact-names"; //#region src/version-manifest-deploy.ts /** Read a workspace dist's build-report.json (ticket 01's entry-name report). */ function readBuildReport(distRoot) { const reportPath = join(distRoot, "build-report.json"); if (!existsSync(reportPath)) return null; try { return BuildEntryReportSchema.parse(JSON.parse(readFileSync(reportPath, "utf8"))); } catch { return null; } } /** * Compose the workspace's version manifest from the dist build reports and * the **server-computed** SRI map of the upload response (MAP decision 6 — * SRI is authoritative from the storage boundary, never computed * client-side). Returns null when the dist predates hashed entry names * (no report, or the SRI map lacks the entry) — the deploy leg then aborts: * uploaded workspaces must pin. */ function composeWorkspaceVersionManifest(input) { const { report, ssrReport, integrityMap, files } = input; const entryIntegrity = integrityMap[report.entry]; if (!entryIntegrity) return null; const ssrEntry = ssrReport?.entry; const ssrIntegrity = ssrEntry ? integrityMap[`ssr/${ssrEntry}`] : void 0; return composeVersionManifest({ entry: report.entry, entryIntegrity, ...ssrEntry && ssrIntegrity ? { ssr: { entry: `ssr/${ssrEntry}`, integrity: ssrIntegrity } } : {}, ...report.browserManifest && integrityMap[report.browserManifest] ? { browserManifest: { file: report.browserManifest, integrity: integrityMap[report.browserManifest] } } : {}, ...report.css && integrityMap[report.css] ? { assets: { css: integrityMap[report.css] } } : {}, ...files ? { files } : {} }); } //#endregion export { composeWorkspaceVersionManifest, readBuildReport }; //# sourceMappingURL=version-manifest-deploy.mjs.map