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 { amezingIntegration } from "@muddle/amezing"; import { AppModule } from "./modules/app/app.module.ts"; import { resolved } from "./config.ts"; const views = createViews({ root: resolved.root, viewsDir: resolved.views, componentsDir: resolved.components, }); const app = await App.create({ modules: [AppModule], views, config: resolved, integrations: [...resolved.integrations, amezingIntegration()], }); export async function build(options: { progress?: (event: { current: number; total: number; route: string }) => void } = {}): Promise { if (!resolved.prerender) return; const results = await prerender(app, { routes: resolved.prerender.routes, outDir: join(resolved.root, resolved.prerender.outDir ?? "dist"), progress: options.progress }); for (const result of results) { console.log(`muddle: prerendered ${result.route} -> ${result.file}`); } } if (import.meta.main) { if (process.argv.includes("--prerender")) { await build(); } else { const server = serve(app, { port: Number(process.env.PORT ?? 3067), }); console.log(`muddle: listening on ${server.url}`); } } export { app };