import {} from "esbuild"; import grabArtifactsFromBundledResults from "../grab-artifacts-from-bundled-result"; import { writeFileSync } from "fs"; import path from "path"; import grabDirNames from "../../../utils/grab-dir-names"; import grabRelativePath from "../../../utils/grab-relative-path"; import { logBuildErrorsOnce, resetBuildErrorLog, } from "../../../utils/build-error-log"; import { log } from "../../../utils/log"; let build_start = 0; const { BUNX_TMP_DIR, ROOT_DIR } = grabDirNames(); export default function ssrCTXArtifactTracker({ entryToPage }) { const artifactTracker = { name: "ssr-artifact-tracker", setup(build) { build.onStart(async () => { build_start = performance.now(); }); build.onEnd(async (result) => { if (result.errors.length > 0) { global.BUNEXT_BUILD_FAILED = true; global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = true; logBuildErrorsOnce(result.errors, (line) => log.error(`SSR Build error: ${line}`)); return; } const artifacts = grabArtifactsFromBundledResults({ result, entryToPage, virtual_match: `ssr-virtual`, }); if (artifacts?.[0] && artifacts.length > 0) { for (let i = 0; i < artifacts.length; i++) { const artifact = artifacts[i]; if (artifact?.local_path && global.BUNEXT_SSR_BUNDLER_CTX_MAP) { const relative_path = grabRelativePath(artifact.local_path); global.BUNEXT_SSR_BUNDLER_CTX_MAP[relative_path] = { ...artifact, local_path: relative_path, }; } } } try { writeFileSync(path.join(BUNX_TMP_DIR, "ctx-map.json"), JSON.stringify(global.BUNEXT_SSR_BUNDLER_CTX_MAP, null, 4)); } catch (error) { } const elapsed = (performance.now() - build_start).toFixed(0); log.success(`SSR [Built] in ${elapsed}ms`); global.BUNEXT_SSR_BUNDLER_CTX_DISPOSED = false; global.BUNEXT_BUILD_FAILED = false; resetBuildErrorLog(); }); }, }; return artifactTracker; }