Files
api/web/scripts/build-test-pages.js

58 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
import { mkdir, writeFile } from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { glob } from 'glob';
import nunjucks from 'nunjucks';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const rootDir = path.join(__dirname, '..');
const templatesDir = path.join(rootDir, 'test-pages');
const pagesDir = path.join(templatesDir, 'pages');
const outputDir = path.join(rootDir, 'public', 'test-pages');
const env = nunjucks.configure(templatesDir, {
autoescape: false,
noCache: true,
throwOnUndefined: false,
});
async function ensureDir(dirPath) {
await mkdir(dirPath, { recursive: true });
}
async function renderTemplates() {
const templateFiles = await glob('**/*.njk', { cwd: pagesDir, nodir: true });
if (templateFiles.length === 0) {
console.log('No test page templates found.');
return;
}
await ensureDir(outputDir);
const mode = process.env.NODE_ENV ?? 'development';
let renderedCount = 0;
for (const relativePath of templateFiles) {
const templateName = `pages/${relativePath}`.replace(/\\/g, '/');
const htmlOutput = env.render(templateName, { mode });
const targetPath = path.join(outputDir, relativePath).replace(/\.njk$/, '.html');
await ensureDir(path.dirname(targetPath));
await writeFile(targetPath, htmlOutput, 'utf-8');
renderedCount += 1;
}
console.log(
`Rendered ${renderedCount} test page template${renderedCount === 1 ? '' : 's'} to ${outputDir}`
);
}
renderTemplates().catch((error) => {
console.error('Failed to render test page templates:', error);
process.exit(1);
});