UNPKG

@lunora/cli

Version:

The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands

95 lines (92 loc) 2.9 kB
import { readFileSync, existsSync } from 'node:fs'; import { join } from 'node:path'; import { parse } from 'jsonc-parser'; import { d as defineHandler } from '../packem_shared/command-lYnl4QyF.mjs'; import { o as openUrl } from '../packem_shared/open-url-4PBLY9X0.mjs'; const DEFAULT_DEV_PORT = 8787; const STUDIO_PATH = "/_lunora/studio"; const findWranglerFile = (projectRoot) => { for (const candidate of ["wrangler.jsonc", "wrangler.json"]) { const fullPath = join(projectRoot, candidate); if (existsSync(fullPath)) { return fullPath; } } return void 0; }; const readWrangler = (projectRoot) => { const file = findWranglerFile(projectRoot); if (!file) { return void 0; } try { const parsed = parse(readFileSync(file, "utf8")); return parsed !== null && typeof parsed === "object" ? parsed : void 0; } catch { return void 0; } }; const resolveDevPort = (wrangler) => { if (!wrangler) { return DEFAULT_DEV_PORT; } const { dev } = wrangler; if (dev !== null && typeof dev === "object") { const { port } = dev; if (typeof port === "number" && Number.isFinite(port)) { return port; } } return DEFAULT_DEV_PORT; }; const resolveRemoteUrl = (wrangler) => { if (!wrangler) { return void 0; } const { routes } = wrangler; if (Array.isArray(routes) && routes.length > 0) { const first = routes[0]; if (typeof first === "string") { return `https://${first.split("/")[0] ?? first}${STUDIO_PATH}`; } if (first !== null && typeof first === "object") { const { pattern } = first; if (typeof pattern === "string" && pattern.length > 0) { return `https://${pattern.split("/")[0] ?? pattern}${STUDIO_PATH}`; } } } const { name } = wrangler; if (typeof name === "string" && name.length > 0) { return `https://${name}.workers.dev${STUDIO_PATH}`; } return void 0; }; const runViewCommand = async (options) => { const cwd = options.cwd ?? process.cwd(); const wrangler = readWrangler(cwd); const { logger } = options; let url; if (options.remote) { url = resolveRemoteUrl(wrangler); if (!url) { logger.error("view --remote: could not determine the remote URL from wrangler config (set `routes` or `name`)."); return { code: 1, url: void 0 }; } } else { url = `http://localhost:${String(resolveDevPort(wrangler))}${STUDIO_PATH}`; } logger.info(`opening ${url}`); try { await openUrl(url, { opener: options.opener }); } catch (error) { const message = error instanceof Error ? error.message : String(error); logger.error(`view: failed to open URL: ${message}`); return { code: 1, url }; } return { code: 0, url }; }; const execute = defineHandler( ({ cwd, logger, options }) => runViewCommand({ cwd, logger, remote: options.remote === true }) ); export { execute, runViewCommand };