UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

148 lines (147 loc) 9.06 kB
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