import { createHash } from 'node:crypto'; import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; import { pathToFileURL } from 'node:url'; import { afterEach, describe, expect, it } from 'vitest'; import { loadProductionInputs } from '@/content/load-production-inputs'; import { createPageMetadata, createStaticHostArtifacts } from '@/content/metadata'; import { render } from '@/entry-server'; import { assemblePrerenderedHtml, type ViteManifest } from '../../scripts/prerender.mjs'; import { verifyArtifactDirectory } from '../../scripts/verify-artifacts.mjs'; import type { ProductionInputs, SiteConfig } from '@/content/types'; const repositoryRoot = process.cwd(); const locations = { contentJson: pathToFileURL(resolve(repositoryRoot, 'content/public/portfolio-content.json')), assetManifestJson: pathToFileURL(resolve(repositoryRoot, 'content/public/asset-manifest.json')), preparedAssetRoot: pathToFileURL(`${resolve(repositoryRoot, 'inputs/prepared-assets')}/`), siteConfigJson: pathToFileURL(resolve(repositoryRoot, 'config/site.preview.json')), }; const manifest: ViteManifest = { 'index.html': { file: 'assets/index-test.js', src: 'index.html', isEntry: true, css: ['assets/index-test.css'], }, }; const template = `