import { join } from "node:path"; import { serve } from "@muddle/adapters/server-bun.ts"; import { prerender } from "@muddle/adapters/static.ts"; import { App } from "@muddle/core/app.ts"; import { createViews } from "@muddle/views/api.ts"; import { AppModule } from "./modules/app/app.module.ts"; import { resolved } from "./config.ts"; const views = createViews({ root: resolved.root, viewsDir: resolved.views, }); const app = await App.create({ modules: [AppModule], views, config: resolved, integrations: resolved.integrations, }); export async function build(): Promise { if (!resolved.prerender) return; const results = await prerender(app, { routes: resolved.prerender.routes, outDir: join(resolved.root, resolved.prerender.outDir ?? "dist"), predict: { breakpointAcc: ["XL", "LG", "MD", "SM"] }, progress: (progress) => { console.log( `[...] prerendering ${progress.route} (${progress.current}/${progress.total})`, ); }, }); for (const result of results) { console.log( `[OK ] prerendered ${result.route} @ ${result.file} (${result.status})`, ); } } if (import.meta.main) { if (process.argv.includes("--prerender")) { await build(); } else { const server = serve(app, { port: Number(process.env.PORT ?? 3069), }); console.log(`muddle: listening on ${server.url}`); } } export { app };