Files
landing/build/prepare-sites-build.mjs
2026-07-31 06:25:50 -07:00

33 lines
1020 B
JavaScript

import { copyFile, mkdir } from 'node:fs/promises';
import { resolve } from 'node:path';
const root = process.cwd();
const outputDirectory = resolve(root, 'dist');
const serverDirectory = resolve(root, 'dist', 'server');
const appShell = resolve(outputDirectory, 'index.html');
const browserRoutes = [
'encryption',
'privacy',
'proto',
'proto/docs',
'support',
'terms',
];
await mkdir(serverDirectory, { recursive: true });
await copyFile(
resolve(root, 'worker', 'index.js'),
resolve(serverDirectory, 'index.js'),
);
// Emit an extensionless HTML match for every client-side route. This keeps
// browser refreshes working even when the asset layer handles navigations
// before the Worker gets a chance to return the SPA fallback.
await Promise.all(
browserRoutes.map(async (route) => {
const routeFile = resolve(outputDirectory, `${route}.html`);
await mkdir(resolve(routeFile, '..'), { recursive: true });
await copyFile(appShell, routeFile);
}),
);