Files
social-media/frontend/scripts/prerender-public.mjs
Jonathan Bourdon feef8cbafd
Some checks failed
Backend CI/CD / build_and_deploy (push) Has been cancelled
Frontend CI/CD / build_and_deploy (push) Has been cancelled
feat(copy): wrote some basic copy for the statis pages, landing, prices, products
2026-05-04 22:08:42 -04:00

47 lines
1.6 KiB
JavaScript

import { mkdir, readFile, writeFile } from 'node:fs/promises';
import { dirname, resolve } from 'node:path';
import { fileURLToPath, pathToFileURL } from 'node:url';
const productFeatureRoutes = [
'/product/content-planning',
'/product/asset-revisions',
'/product/comment-threads',
'/product/approval-workflows',
'/product/client-review',
'/product/review-queues',
'/product/audit-trail',
'/product/workspace-access',
'/product/team-collaboration',
];
const publicRoutes = ['/', '/product', ...productFeatureRoutes, '/pricing', '/blogs', '/guides'];
const rootDir = resolve(dirname(fileURLToPath(import.meta.url)), '..');
const distDir = resolve(rootDir, 'dist');
const ssrEntry = resolve(rootDir, 'dist-ssr/entry-public-ssr.js');
const templatePath = resolve(distDir, 'index.html');
const template = await readFile(templatePath, 'utf8');
const { render } = await import(pathToFileURL(ssrEntry));
const baseTemplate = template.replace('<title>Socialize</title>', '');
function outputPathForRoute(route) {
if (route === '/') {
return resolve(distDir, 'index.html');
}
return resolve(distDir, route.replace(/^\//, ''), 'index.html');
}
for (const route of publicRoutes) {
const { appHtml, headTags } = await render(route);
const html = baseTemplate
.replace('</head>', `${headTags.headTags}\n</head>`)
.replace('<div id="app"></div>', `<div id="app">${appHtml}</div>`);
const outputPath = outputPathForRoute(route);
await mkdir(dirname(outputPath), { recursive: true });
await writeFile(outputPath, html);
console.log(`Prerendered ${route}`);
}