Files
air-watcher/src/dashboardAssets.js
2026-03-05 11:00:45 +09:00

47 lines
1.4 KiB
JavaScript

"use strict";
const fs = require("node:fs");
const path = require("node:path");
const { createHttpError } = require("./dashboardUtils");
const ASSET_MAP = {
"/": { file: "index.html", contentType: "text/html; charset=utf-8" },
"/login": { file: "login.html", contentType: "text/html; charset=utf-8" },
"/setup": { file: "setup.html", contentType: "text/html; charset=utf-8" },
"/dashboard.css": { file: "dashboard.css", contentType: "text/css; charset=utf-8" },
"/login.css": { file: "login.css", contentType: "text/css; charset=utf-8" },
"/setup.css": { file: "setup.css", contentType: "text/css; charset=utf-8" },
"/dashboard.js": {
file: "dashboard.js",
contentType: "application/javascript; charset=utf-8",
},
"/login.js": {
file: "login.js",
contentType: "application/javascript; charset=utf-8",
},
"/setup.js": {
file: "setup.js",
contentType: "application/javascript; charset=utf-8",
},
};
function loadDashboardAsset(assetsDir, requestPath) {
const asset = ASSET_MAP[requestPath];
if (!asset) return null;
const filePath = path.join(assetsDir, asset.file);
if (!fs.existsSync(filePath)) {
throw createHttpError(500, `대시보드 파일이 없습니다: ${asset.file}`);
}
return {
content: fs.readFileSync(filePath),
contentType: asset.contentType,
};
}
module.exports = {
ASSET_MAP,
loadDashboardAsset,
};