@deskthing/cli
Version:
An emulator for the DeskThing Server
73 lines (72 loc) • 2.48 kB
JavaScript
// src/emulator/server/serverProcess.ts
import { pathToFileURL } from "node:url";
import { workerData, parentPort } from "node:worker_threads";
import { createRequire as DeskThingCreateRequire } from "module";
import { fileURLToPath as DeskThingFileURLToPath } from "url";
import { dirname as DeskThingDirname } from "node:path";
var require2 = DeskThingCreateRequire(import.meta.url);
var __filename = DeskThingFileURLToPath(import.meta.url);
var __dirname = DeskThingDirname(__filename);
Object.entries(workerData).forEach(([key, value]) => {
process.env[key] = value;
});
function setupConsoleCapture() {
const originalConsoleLog = console.log;
const originalConsoleError = console.error;
const originalConsoleWarn = console.warn;
const originalConsoleInfo = console.info;
console.log = (...args) => {
parentPort?.postMessage({ log: args.map((arg) => String(arg)).join(" ") });
originalConsoleLog(...args);
};
console.error = (...args) => {
parentPort?.postMessage({ error: args.map((arg) => String(arg)).join(" ") });
originalConsoleError(...args);
};
console.warn = (...args) => {
parentPort?.postMessage({ log: args.map((arg) => String(arg)).join(" ") });
originalConsoleWarn(...args);
};
console.info = (...args) => {
parentPort?.postMessage({ log: args.map((arg) => String(arg)).join(" ") });
originalConsoleInfo(...args);
};
}
var setupServer = async () => {
setupConsoleCapture();
process.env.DESKTHING_ENV = "development";
const serverPath = process.env.SERVER_INDEX_PATH;
if (!serverPath) {
throw new Error("SERVER_INDEX_PATH is not defined!");
}
const serverUrl = pathToFileURL(serverPath).href;
parentPort?.postMessage({
type: "server:log",
payload: `Starting up... ${serverUrl}`
});
const importDeskThing = async () => {
try {
await import(serverUrl);
process.send?.({
type: "server:log",
payload: "DeskThing module loaded successfully."
});
} catch (error) {
const err = error;
console.error("\x1B[31m%s\x1B[0m", "Critical error in serverProcess: ", err);
parentPort?.postMessage?.({
type: "server:log",
payload: `Failed to load DeskThing: ${err?.message}`
});
throw error;
}
};
try {
await importDeskThing();
} catch (error) {
const err = error;
console.error("\x1B[31m%s\x1B[0m", "Critical error in serverProcess: ", err);
process.exit(1);
}
};
setupServer();