summaryrefslogtreecommitdiffhomepage
path: root/services/blog/nuldoc-src/commands/serve.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/blog/nuldoc-src/commands/serve.ts')
-rw-r--r--services/blog/nuldoc-src/commands/serve.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/services/blog/nuldoc-src/commands/serve.ts b/services/blog/nuldoc-src/commands/serve.ts
new file mode 100644
index 00000000..e944aaf0
--- /dev/null
+++ b/services/blog/nuldoc-src/commands/serve.ts
@@ -0,0 +1,45 @@
+import { serveDir, STATUS_CODE, STATUS_TEXT } from "@std/http";
+import { join } from "@std/path";
+import { Config } from "../config.ts";
+import { runBuildCommand } from "./build.ts";
+
+function isResourcePath(pathname: string): boolean {
+ const EXTENSIONS = [
+ ".css",
+ ".gif",
+ ".ico",
+ ".jpeg",
+ ".jpg",
+ ".js",
+ ".png",
+ ".svg",
+ ];
+ return EXTENSIONS.some((ext) => pathname.endsWith(ext));
+}
+
+export function runServeCommand(config: Config) {
+ const rootDir = join(Deno.cwd(), config.locations.destDir);
+ Deno.serve({ hostname: "127.0.0.1" }, async (req) => {
+ const pathname = new URL(req.url).pathname;
+ if (!isResourcePath(pathname)) {
+ await runBuildCommand(config);
+ console.log("rebuild");
+ }
+ const res = await serveDir(req, {
+ fsRoot: rootDir,
+ showIndex: true,
+ });
+ if (res.status !== STATUS_CODE.NotFound) {
+ return res;
+ }
+
+ const notFoundHtml = await Deno.readTextFile(join(rootDir, "404.html"));
+ return new Response(notFoundHtml, {
+ status: STATUS_CODE.NotFound,
+ statusText: STATUS_TEXT[STATUS_CODE.NotFound],
+ headers: {
+ "content-type": "text/html",
+ },
+ });
+ });
+}