one
Version:
One is a new React Framework that makes Vite serve both native and web.
186 lines (185 loc) • 8.6 kB
JavaScript
import colors from "picocolors";
import { labelProcess } from "./label-process.native.js";
async function daemon(args) {
var subcommand = args.subcommand || "run";
switch (subcommand) {
case "run":
case "start":
return daemonStart(args);
case "stop":
return daemonStop();
case "status":
return daemonStatus();
case "route":
return daemonRoute(args);
default:
console.log(`Unknown daemon subcommand: ${subcommand}`), console.log("Available: start, stop, status, route"), process.exit(1);
}
}
async function daemonStart(args) {
var _args_tui;
labelProcess("daemon");
var {
isDaemonRunning
} = await import("../daemon/ipc.native.js");
(await isDaemonRunning()) && (console.log(colors.yellow("Daemon is already running")), console.log("Use 'one daemon status' to see registered servers"), process.exit(1)), await suggestTrayApp();
var {
startDaemon
} = await import("../daemon/server.native.js"),
useTUI = (_args_tui = args.tui) !== null && _args_tui !== void 0 ? _args_tui : process.stdin.isTTY,
{
state
} = await startDaemon({
port: args.port ? parseInt(args.port, 10) : void 0,
host: args.host,
quiet: useTUI
});
if (useTUI) {
var {
startTUI
} = await import("../daemon/tui.native.js");
startTUI(state);
}
}
async function daemonStop() {
var {
isDaemonRunning,
getSocketPath,
cleanupSocket
} = await import("../daemon/ipc.native.js");
(await isDaemonRunning()) || (console.log(colors.yellow("Daemon is not running")), process.exit(1)), console.log(colors.yellow("Note: daemon runs in foreground. Press Ctrl+C in the daemon terminal to stop.")), console.log(colors.dim(`Socket path: ${getSocketPath()}`));
}
async function daemonStatus() {
var {
isDaemonRunning,
getDaemonStatus,
getLastActiveDaemonServer
} = await import("../daemon/ipc.native.js");
(await isDaemonRunning()) || (console.log(colors.yellow("Daemon is not running")), console.log(colors.dim("Start with 'one daemon'")), process.exit(1));
try {
var status = await getDaemonStatus(),
lastActive = await getLastActiveDaemonServer();
if (console.log(colors.cyan(`
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550`)), console.log(colors.cyan(" one daemon status")), console.log(colors.cyan(`\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
`)), status.servers.length === 0) console.log(colors.dim(" No servers registered"));else {
console.log(" Registered servers:");
var _iteratorNormalCompletion = !0,
_didIteratorError = !1,
_iteratorError = void 0;
try {
for (var _iterator = status.servers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var server = _step.value,
shortRoot = server.root.replace(process.env.HOME || "", "~"),
isActive = lastActive?.id === server.id,
activeMarker = isActive ? colors.yellow(" \u2605") : "";
console.log(` ${colors.green(server.id)} ${server.bundleId} \u2192 :${server.port} (${shortRoot})${activeMarker}`);
}
} catch (err) {
_didIteratorError = !0, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
} finally {
if (_didIteratorError) throw _iteratorError;
}
}
lastActive && console.log(colors.dim(`
\u2605 = last active (used by oi/oa)`));
}
if (status.routes.length > 0) {
console.log(`
Active routes:`);
var _iteratorNormalCompletion1 = !0,
_didIteratorError1 = !1,
_iteratorError1 = void 0;
try {
for (var _iterator1 = status.routes[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) {
var route = _step1.value;
console.log(` ${route.key} \u2192 ${route.serverId}`);
}
} catch (err) {
_didIteratorError1 = !0, _iteratorError1 = err;
} finally {
try {
!_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
} finally {
if (_didIteratorError1) throw _iteratorError1;
}
}
}
console.log("");
} catch (err) {
console.log(colors.red("Failed to get daemon status")), console.error(err), process.exit(1);
}
}
async function openPlatform(platform) {
var {
isDaemonRunning,
getDaemonStatus,
setDaemonRoute,
touchDaemonServer
} = await import("../daemon/ipc.native.js"),
{
getBundleIdFromConfig
} = await import("../daemon/utils.native.js"),
cwd = process.cwd(),
bundleId = getBundleIdFromConfig(cwd);
if (bundleId || (console.log(colors.yellow("No app.json found in current directory")), console.log(colors.dim("Run this command from a One project directory")), process.exit(1)), await isDaemonRunning()) try {
var status = await getDaemonStatus(),
server = status.servers.find(function (s) {
return s.root === cwd;
});
server ? (await setDaemonRoute(bundleId, server.id), await touchDaemonServer(server.id), console.log(colors.cyan(`[daemon] Route set: ${bundleId} \u2192 this project`))) : (console.log(colors.yellow("[daemon] No server registered for this project")), console.log(colors.dim("Run 'one dev' first, or the simulator will connect directly")));
} catch (err) {
console.log(colors.dim(`[daemon] Could not set route: ${err}`));
}
if (platform === "ios") {
var {
run
} = await import("./runIos.native.js");
await run({});
} else {
var {
run: run1
} = await import("./runAndroid.native.js");
await run1({});
}
}
async function daemonRoute(args) {
var {
isDaemonRunning,
getDaemonStatus,
setDaemonRoute,
clearDaemonRoute
} = await import("../daemon/ipc.native.js");
(await isDaemonRunning()) || (console.log(colors.yellow("Daemon is not running")), process.exit(1)), args.app || (console.log(colors.red("Missing --app parameter")), console.log("Usage: one daemon route --app=com.example.app --slot=0"), console.log(" or: one daemon route --app=com.example.app --project=~/myapp"), process.exit(1));
var status = await getDaemonStatus(),
targetServer;
if (args.slot !== void 0) {
var slotIndex = parseInt(args.slot, 10),
matchingServers = status.servers.filter(function (s) {
return s.bundleId === args.app;
});
(slotIndex < 0 || slotIndex >= matchingServers.length) && (console.log(colors.red(`Invalid slot: ${args.slot}`)), console.log(`Available slots for ${args.app}: 0-${matchingServers.length - 1}`), process.exit(1)), targetServer = matchingServers[slotIndex];
} else if (args.project) {
var normalizedProject = args.project.replace(/^~/, process.env.HOME || "");
targetServer = status.servers.find(function (s) {
return s.bundleId === args.app && s.root === normalizedProject;
}), targetServer || (console.log(colors.red(`No server found for ${args.app} at ${args.project}`)), process.exit(1));
} else console.log(colors.red("Missing --slot or --project parameter")), process.exit(1);
await setDaemonRoute(args.app, targetServer.id);
var shortRoot = targetServer.root.replace(process.env.HOME || "", "~");
console.log(colors.green(`Route set: ${args.app} \u2192 ${targetServer.id} (${shortRoot})`));
}
async function suggestTrayApp() {
var {
existsSync
} = await import("fs"),
trayPaths = ["/Applications/OneTray.app", `${process.env.HOME}/Applications/OneTray.app`],
installed = trayPaths.some(function (p) {
return existsSync(p);
});
installed || (console.log(colors.dim(" Tip: install OneTray.app for a native macOS cable interface")), console.log(colors.dim(" https://github.com/onejs/one/releases?q=one-tray")), console.log(""));
}
export { daemon, openPlatform };
//# sourceMappingURL=daemon.native.js.map