muddle/samples/react/index.ts
2026-10-23 08:53:07 -04:00

51 lines
1.3 KiB
TypeScript

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<void> {
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 };