54 lines
1.4 KiB
TypeScript
54 lines
1.4 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 { 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<void> {
|
|
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 };
|