feat: publish JPW7 web editor
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import { createReadStream } from "node:fs";
|
||||
import { stat } from "node:fs/promises";
|
||||
import { createServer } from "node:http";
|
||||
import { extname, join, normalize, relative, resolve } from "node:path";
|
||||
|
||||
const root = resolve("dist");
|
||||
const port = Number(process.env.PORT ?? 4173);
|
||||
const contentTypes = {
|
||||
".html": "text/html; charset=utf-8",
|
||||
".js": "text/javascript; charset=utf-8",
|
||||
".json": "application/json; charset=utf-8",
|
||||
".css": "text/css; charset=utf-8"
|
||||
};
|
||||
|
||||
const server = createServer(async (request, response) => {
|
||||
const requestPath = decodeURIComponent((request.url ?? "/").split("?", 1)[0]);
|
||||
const candidate = resolve(join(root, requestPath === "/" ? "index.html" : requestPath));
|
||||
const safeRelativePath = relative(root, candidate);
|
||||
if (safeRelativePath.startsWith("..") || safeRelativePath.includes(`..${process.platform === "win32" ? "\\" : "/"}`)) {
|
||||
response.writeHead(403).end("Forbidden");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const file = await stat(candidate);
|
||||
if (!file.isFile()) throw new Error("not a file");
|
||||
response.writeHead(200, { "content-type": contentTypes[extname(candidate)] ?? "application/octet-stream" });
|
||||
createReadStream(candidate).pipe(response);
|
||||
} catch {
|
||||
response.writeHead(404).end("Not found");
|
||||
}
|
||||
});
|
||||
|
||||
server.listen(port, "127.0.0.1", () => {
|
||||
console.log(`JPW7 M0 server listening on http://127.0.0.1:${port}`);
|
||||
});
|
||||
Reference in New Issue
Block a user