import fs from 'node:fs/promises'; import { loremIpsumHtml, loremIpsumMd } from './_util.js'; // Map of files to be generated and tested for rendering. // Ideally each content should be similar for comparison. const renderFiles = { 'components/ListItem.astro': `\ --- const { className, item, attrs } = Astro.props; const nested = item !== 0; ---
  • {item}
  • `, 'components/Sublist.astro': `\ --- import ListItem from '../components/ListItem.astro'; const { items } = Astro.props; const className = "text-red-500"; const style = { color: "red" }; --- `, 'pages/astro.astro': `\ --- const className = "text-red-500"; const style = { color: "red" }; const items = Array.from({ length: 10000 }, (_, i) => ({i})); --- My Site

    List

    ${Array.from({ length: 1000 }) .map(() => `

    ${loremIpsumHtml}

    `) .join('\n')} `, 'pages/md.md': `\ # List ${Array.from({ length: 1000 }, (_, i) => i) .map((v) => `- ${v}`) .join('\n')} ${Array.from({ length: 1000 }) .map(() => loremIpsumMd) .join('\n\n')} `, 'pages/mdx.mdx': `\ export const className = "text-red-500"; export const style = { color: "red" }; export const items = Array.from({ length: 1000 }, (_, i) => i); # List ${Array.from({ length: 1000 }) .map(() => loremIpsumMd) .join('\n\n')} `, }; export const renderPages = []; for (const file of Object.keys(renderFiles)) { if (file.startsWith('pages/')) { renderPages.push(file.replace('pages/', '')); } } /** * @param {URL} projectDir */ export async function run(projectDir) { await fs.rm(projectDir, { recursive: true, force: true }); await fs.mkdir(new URL('./src/pages', projectDir), { recursive: true }); await fs.mkdir(new URL('./src/components', projectDir), { recursive: true }); await Promise.all( Object.entries(renderFiles).map(([name, content]) => { return fs.writeFile(new URL(`./src/${name}`, projectDir), content, 'utf-8'); }) ); await fs.writeFile( new URL('./astro.config.js', projectDir), `\ import { defineConfig } from 'astro/config'; import timer from '@benchmark/timer'; import mdx from '@astrojs/mdx'; export default defineConfig({ integrations: [mdx()], output: 'server', adapter: timer(), });`, 'utf-8' ); }