diff options
Diffstat (limited to 'source/index.ts')
-rw-r--r-- | source/index.ts | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/source/index.ts b/source/index.ts index 2106b32..9c4fa90 100644 --- a/source/index.ts +++ b/source/index.ts @@ -1,40 +1,45 @@ // SPDX-License-Identifier: AGPL-3.0-only -import express from "express" -import { readFileSync } from "fs" -import { readFile } from "fs/promises" -import { join } from "path/posix" -import pug from "pug" +import { Application, Router, Response } from "https://deno.land/x/oak/mod.ts"; +import { compile, compileTemplate } from "https://deno.land/x/pug/mod.ts"; -const app = express() -const render_env = { - commit: readFileSync(join(__dirname, "../.git/refs/heads/main")).toString().substr(0, 8) +const app = new Application() +const router = new Router() + +const renderEnv = { + commit: Deno.readTextFileSync("./.git/refs/heads/main").toString().substr(0, 8) } -app.disable('x-powered-by'); +const templates: Map<string, compileTemplate> = new Map() +async function render(response: Response, name: string) { + const template = templates.get(name) ?? compile(await Deno.readTextFile(`./views/${name}.pug`), { filename: `./views/${name}.pug`, name: name }) + templates.set(name, template) + response.body = template(renderEnv) -app.set("view engine", "pug") -app.set("views", join(__dirname, "../views")) +} -app.get("/", (req, res) => res.redirect("/about")) +router.get("/", ({ response }) => response.redirect("/about")) -app.get("/about", (req, res) => res.render("about", render_env)) -app.get("/projects", (req, res) => res.render("projects", render_env)) -app.get("/contact", (req, res) => res.render("contact", render_env)) -app.get("/links", (req, res) => res.render("links", render_env)) +router.get("/about", ({ response }) => render(response, "about")) +router.get("/projects", ({ response }) => render(response, "projects")) +router.get("/contact", ({ response }) => render(response, "contact")) +router.get("/links", ({ response }) => render(response, "links")) -app.get("/licence", async (req, res) => { - const content = (await readFile(join(__dirname, "../LICENCE"))).toString() - res.type("text/plain").send(content) +router.get("/licence", async ({ response }) => { + const content = await Deno.readTextFile("LICENCE") + response.headers.set("content-type", "text/plain") + response.body = content }) -app.get("/favicon.ico", (req,res) => res.sendStatus(204)) // no content -app.get("/robots.txt", (req,res) => { - res.send("User-Agent: *\nDisallow: /\n") +router.get("/favicon.ico", ({ response }) => response.status = 204) // no content +router.get("/robots.txt", ({ response }) => { + response.body = "User-Agent: *\nDisallow: /\n" }) -const PORT = parseInt(process.env.PORT ?? "8080") -const HOST = process.env.HOST || "127.0.0.1" +const port = parseInt(Deno.env.get("PORT") ?? "8080") +const hostname = Deno.env.get("HOST") || "127.0.0.1" -app.listen(PORT, HOST, () => console.log("aaaaa")) +app.use(router.routes()) +app.listen({ port, hostname }) +console.log(`listening on http://${hostname}:${port}`); |