one
Version:
One is a new React Framework that makes Vite serve both native and web.
148 lines (147 loc) • 9.06 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: !0 });
}, __copyProps = (to, from, except, desc) => {
if (from && typeof from == "object" || typeof from == "function")
for (let key of __getOwnPropNames(from))
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
mod
)), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
var daemon_exports = {};
__export(daemon_exports, {
daemon: () => daemon,
openPlatform: () => openPlatform
});
module.exports = __toCommonJS(daemon_exports);
var import_picocolors = __toESM(require("picocolors"), 1), import_label_process = require("./label-process");
async function daemon(args) {
const 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) {
(0, import_label_process.labelProcess)("daemon");
const { isDaemonRunning } = await import("../daemon/ipc");
await isDaemonRunning() && (console.log(import_picocolors.default.yellow("Daemon is already running")), console.log("Use 'one daemon status' to see registered servers"), process.exit(1)), await suggestTrayApp();
const { startDaemon } = await import("../daemon/server"), useTUI = args.tui ?? process.stdin.isTTY, { state } = await startDaemon({
port: args.port ? parseInt(args.port, 10) : void 0,
host: args.host,
quiet: useTUI
// suppress normal logs when TUI is active
});
if (useTUI) {
const { startTUI } = await import("../daemon/tui");
startTUI(state);
}
}
async function daemonStop() {
const { isDaemonRunning, getSocketPath, cleanupSocket } = await import("../daemon/ipc");
await isDaemonRunning() || (console.log(import_picocolors.default.yellow("Daemon is not running")), process.exit(1)), console.log(
import_picocolors.default.yellow(
"Note: daemon runs in foreground. Press Ctrl+C in the daemon terminal to stop."
)
), console.log(import_picocolors.default.dim(`Socket path: ${getSocketPath()}`));
}
async function daemonStatus() {
const { isDaemonRunning, getDaemonStatus, getLastActiveDaemonServer } = await import("../daemon/ipc");
await isDaemonRunning() || (console.log(import_picocolors.default.yellow("Daemon is not running")), console.log(import_picocolors.default.dim("Start with 'one daemon'")), process.exit(1));
try {
const status = await getDaemonStatus(), lastActive = await getLastActiveDaemonServer();
if (console.log(import_picocolors.default.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(import_picocolors.default.cyan(" one daemon status")), console.log(import_picocolors.default.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(import_picocolors.default.dim(" No servers registered"));
else {
console.log(" Registered servers:");
for (const server of status.servers) {
const shortRoot = server.root.replace(process.env.HOME || "", "~"), activeMarker = lastActive?.id === server.id ? import_picocolors.default.yellow(" \u2605") : "";
console.log(
` ${import_picocolors.default.green(server.id)} ${server.bundleId} \u2192 :${server.port} (${shortRoot})${activeMarker}`
);
}
lastActive && console.log(import_picocolors.default.dim(`
\u2605 = last active (used by oi/oa)`));
}
if (status.routes.length > 0) {
console.log(`
Active routes:`);
for (const route of status.routes)
console.log(` ${route.key} \u2192 ${route.serverId}`);
}
console.log("");
} catch (err) {
console.log(import_picocolors.default.red("Failed to get daemon status")), console.error(err), process.exit(1);
}
}
async function openPlatform(platform) {
const { isDaemonRunning, getDaemonStatus, setDaemonRoute, touchDaemonServer } = await import("../daemon/ipc"), { getBundleIdFromConfig } = await import("../daemon/utils"), cwd = process.cwd(), bundleId = getBundleIdFromConfig(cwd);
if (bundleId || (console.log(import_picocolors.default.yellow("No app.json found in current directory")), console.log(import_picocolors.default.dim("Run this command from a One project directory")), process.exit(1)), await isDaemonRunning())
try {
const server = (await getDaemonStatus()).servers.find((s) => s.root === cwd);
server ? (await setDaemonRoute(bundleId, server.id), await touchDaemonServer(server.id), console.log(import_picocolors.default.cyan(`[daemon] Route set: ${bundleId} \u2192 this project`))) : (console.log(import_picocolors.default.yellow("[daemon] No server registered for this project")), console.log(
import_picocolors.default.dim("Run 'one dev' first, or the simulator will connect directly")
));
} catch (err) {
console.log(import_picocolors.default.dim(`[daemon] Could not set route: ${err}`));
}
if (platform === "ios") {
const { run } = await import("./runIos");
await run({});
} else {
const { run } = await import("./runAndroid");
await run({});
}
}
async function daemonRoute(args) {
const { isDaemonRunning, getDaemonStatus, setDaemonRoute, clearDaemonRoute } = await import("../daemon/ipc");
await isDaemonRunning() || (console.log(import_picocolors.default.yellow("Daemon is not running")), process.exit(1)), args.app || (console.log(import_picocolors.default.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));
const status = await getDaemonStatus();
let targetServer;
if (args.slot !== void 0) {
const slotIndex = parseInt(args.slot, 10), matchingServers = status.servers.filter((s) => s.bundleId === args.app);
(slotIndex < 0 || slotIndex >= matchingServers.length) && (console.log(import_picocolors.default.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) {
const normalizedProject = args.project.replace(/^~/, process.env.HOME || "");
targetServer = status.servers.find(
(s) => s.bundleId === args.app && s.root === normalizedProject
), targetServer || (console.log(import_picocolors.default.red(`No server found for ${args.app} at ${args.project}`)), process.exit(1));
} else
console.log(import_picocolors.default.red("Missing --slot or --project parameter")), process.exit(1);
await setDaemonRoute(args.app, targetServer.id);
const shortRoot = targetServer.root.replace(process.env.HOME || "", "~");
console.log(import_picocolors.default.green(`Route set: ${args.app} \u2192 ${targetServer.id} (${shortRoot})`));
}
async function suggestTrayApp() {
const { existsSync } = await import("node:fs");
[
"/Applications/OneTray.app",
`${process.env.HOME}/Applications/OneTray.app`
].some((p) => existsSync(p)) || (console.log(
import_picocolors.default.dim(" Tip: install OneTray.app for a native macOS cable interface")
), console.log(import_picocolors.default.dim(" https://github.com/onejs/one/releases?q=one-tray")), console.log(""));
}
//# sourceMappingURL=daemon.js.map