-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
// This script builds ef.js document website and serve it.
import { serve, type Server, file } from "bun";
import chalk from "chalk";
import "./build";
const serveDir = new URL("../../website/dist/", import.meta.url);
function convertReqPathToFsPath(path: string): string {
const rel = path.replace(/^\//, "");
if (!rel || /\/$/.test(rel)) {
return rel + "index.html";
}
return rel;
}
function startServer() {
const server = serve({
async fetch(req) {
if (req.method !== "GET") {
return new Response(null, { status: 405 });
}
const url = new URL(req.url);
const path = new URL(convertReqPathToFsPath(url.pathname), serveDir);
if (path.pathname.indexOf(serveDir.pathname) !== 0) {
return new Response(null, { status: 403 });
}
const f = file(path);
if (!(await f.exists())) {
return new Response(file(new URL("404.html", serveDir)), {
status: 404,
});
}
return new Response(f);
},
port: process.env.PORT || 3000,
hostname: process.env.HOST || undefined,
});
const displayUrl = new URL("http://example.com");
displayUrl.port = server.port.toString(10);
displayUrl.hostname = server.hostname;
console.error(
chalk.white(`Started a web server at %s`),
chalk.blue(displayUrl.href),
);
return server;
}
declare global {
var server: Server;
}
globalThis.server ??= startServer();