Update build scripts, entry points, and packaged-path detection for the new toolchain. Co-authored-by: Cursor <cursoragent@cursor.com>
109 lines
2.7 KiB
JavaScript
109 lines
2.7 KiB
JavaScript
import { fileURLToPath } from "node:url";
|
|
import path from "node:path";
|
|
import { loadConfig } from "./config.js";
|
|
import log4js from "log4js";
|
|
import { LocalServer } from "./localserver/localserver.js";
|
|
import { SocketClient } from "./socket/socketclient.js";
|
|
import {
|
|
createCliLogger,
|
|
isHeadless,
|
|
startWaiting,
|
|
stopWaiting,
|
|
} from "./commandlineutils.js";
|
|
import { handleCommandLine } from "./commandline.js";
|
|
|
|
if (!process.env.NODE_ENV) {
|
|
process.env.NODE_ENV = "production";
|
|
}
|
|
|
|
const config = loadConfig();
|
|
|
|
const logger = log4js.getLogger("App");
|
|
logger.level = config.logLevel;
|
|
|
|
const cli = createCliLogger(logger);
|
|
|
|
let initPromise = null;
|
|
|
|
export async function init(options = {}) {
|
|
if (initPromise) {
|
|
return initPromise;
|
|
}
|
|
|
|
initPromise = startApp(options);
|
|
return initPromise;
|
|
}
|
|
|
|
async function startApp(options = {}) {
|
|
const headless = options.headless ?? isHeadless;
|
|
cli.blank();
|
|
|
|
const commandLineResult = await handleCommandLine(cli, logger);
|
|
if (commandLineResult.handled) {
|
|
return commandLineResult.result;
|
|
}
|
|
|
|
const runningServer = commandLineResult.runningServer;
|
|
|
|
if (runningServer != false) {
|
|
cli.warn("✘ Farm Control Server is already running.");
|
|
cli.blank();
|
|
return runningServer;
|
|
}
|
|
|
|
if (!headless && !options.skipWindow) {
|
|
const { createDesktopWindow } = await import("./desktop/window.js");
|
|
const { setupIPC } = await import("./desktop/rpc.js");
|
|
|
|
startWaiting("Creating desktop window...", logger);
|
|
try {
|
|
const mainWindow = await createDesktopWindow().catch((err) => {
|
|
cli.warn("Failed to create desktop window:", err);
|
|
return null;
|
|
});
|
|
if (mainWindow) {
|
|
await setupIPC(mainWindow);
|
|
}
|
|
await stopWaiting();
|
|
} catch (err) {
|
|
await stopWaiting();
|
|
throw err;
|
|
}
|
|
} else if (headless) {
|
|
cli.info("Running in headless mode. Skipping window creation.");
|
|
}
|
|
|
|
const socketClient = new SocketClient();
|
|
global.socketClient = socketClient;
|
|
|
|
const localServer = new LocalServer(socketClient);
|
|
await localServer.start();
|
|
|
|
socketClient.connect();
|
|
|
|
process.on("SIGINT", async () => {
|
|
startWaiting("Shutting down...", logger);
|
|
cli.blank();
|
|
socketClient.disconnect();
|
|
localServer.stop();
|
|
await stopWaiting();
|
|
process.exit(0);
|
|
});
|
|
}
|
|
|
|
const entryScript = process.argv[1]
|
|
? path.resolve(process.argv[1])
|
|
: null;
|
|
const isDirectIndexEntry =
|
|
entryScript &&
|
|
entryScript.endsWith(`${path.sep}src${path.sep}index.js`) &&
|
|
fileURLToPath(import.meta.url) === entryScript;
|
|
|
|
if (isDirectIndexEntry && !process.env.FC_HEADLESS_ENTRY) {
|
|
init().catch((err) => {
|
|
logger.error(err.message);
|
|
cli.blank();
|
|
process.exit(1);
|
|
});
|
|
}
|