import { resolve } from 'node:path'; import { readdirSync } from 'node:fs'; import { defineConfig, IndexHtmlTransformContext, Plugin } from 'vite'; const demoDir = resolve(__dirname, 'demo'); const files: string[] = readdirSync(demoDir).filter((file) => file.endsWith('.html')); const input: Record = files.reduce((acc, file) => { acc[file.replace('.html', '')] = resolve(demoDir, file); return acc; }, {} as Record); const linkGenerator = (): Plugin => { return { name: 'link-generator', transformIndexHtml(html: string, ctx: IndexHtmlTransformContext) { if (!ctx.filename.endsWith('index.html')) return; const links = files .filter((file) => !file.includes('index') && !file.startsWith('_')) .sort() .map((file) => { const title = file.replace('.html', '').replaceAll('-', ' '); return `
  • ${title}
  • `; }) .join('\n'); return html.replace('{{ LINKS }}', links); }, }; }; export default defineConfig({ root: 'demo', plugins: [linkGenerator()], build: { target: 'esnext', rollupOptions: { input }, modulePreload: { polyfill: false, }, outDir: './dist', emptyOutDir: true, }, });