sepiatones_xyz/src/index.tsx

74 lines
2.0 KiB
TypeScript

import { Elysia } from "elysia";
import { html } from "@elysiajs/html";
import { staticPlugin } from "@elysiajs/static";
import path from "path";
import fs from "fs/promises";
import { renderTemplate } from "./util";
import { recentPosts } from "./recent-posts";
const app = new Elysia()
.use(
staticPlugin({
assets: "./data/style",
prefix: "/style",
}),
)
.use(
staticPlugin({
assets: "./data/public",
prefix: "/",
}),
)
.use(html())
.get("/", async ({ set }) => {
try {
const content = await fs.readFile(
path.join(process.cwd(), "data/pages/about.html"),
"utf8",
);
return renderTemplate("index.html", { content });
} catch (error) {
console.error("Error serving main page: ", error);
set.status = 500;
set.headers["Content-Type"] = "text/plain";
return "Internal server error";
}
})
.get("/projects", async ({ set }) => {
try {
const content = await fs.readFile(
path.join(process.cwd(), "data/pages/projects.html"),
"utf8",
);
return renderTemplate("index.html", { content });
} catch (error) {
console.error("Error serving main page: ", error);
set.status = 500;
set.headers["Content-Type"] = "text/plain";
return "Internal server error";
}
})
.get("/posts/:post_name", async ({ params, set }) => {
try {
const filePath = path.join(
process.cwd(),
"data/posts",
`${params.post_name}.html`,
);
const fileContent = await fs.readFile(filePath, "utf8");
return renderTemplate("index.html", { content: fileContent });
} catch (error) {
console.error(`Error serving post ${params.post_name}: `, error);
set.status = 404;
set.headers["Content-Type"] = "text/plain";
return "Post not found.";
}
})
.use(recentPosts);
const port = Number(process.env.PORT || 3000);
app.listen(port, () => {
console.log(`🦊 Elysia is running at ${app.server?.hostname}:${port}`);
});