import { summarizeDiagnostics } from "@arconym/core"; import type { CommandExecutionOptions } from "../cli/run-cli.js"; import { createRuntimeFromOptions, emitJson } from "./shared.js"; import { printDiagnostics } from "../utils/diagnostics.js"; import { printArtifactSummary } from "../utils/artifacts.js"; import { colors } from "../utils/colors.js"; export async function runDevCommand(options: CommandExecutionOptions): Promise { const runtime = await createRuntimeFromOptions(options); const session = await runtime.dev(); if (options.json) { await session.close(); emitJson({ command: "dev", artifacts: session.artifacts, diagnostics: session.diagnostics }); return; } console.log(colors.cyan("▶ arconym dev")); printArtifactSummary({ ...session.artifacts, diagnostics: session.diagnostics }); printDiagnostics(session.diagnostics); if (session.hasWatchers) { console.log(colors.dim("Watching for changes. Press Ctrl+C to exit.")); await waitForSignal(session); } else { const summary = summarizeDiagnostics(session.diagnostics); if (!summary.hasErrors) { console.log(colors.green("✔ Dev pipeline completed.")); } await session.close(); } } async function waitForSignal(session: { close(): Promise }): Promise { await new Promise((resolve) => { let settled = false; const finalize = async (message: string) => { if (settled) return; settled = true; console.log(); console.log(message); await session.close(); process.off("SIGINT", handleSigint); process.off("SIGTERM", handleSigterm); resolve(); }; const handleSigint = () => { void finalize("Shutting down..."); }; const handleSigterm = () => { void finalize("Terminating..."); }; process.on("SIGINT", handleSigint); process.on("SIGTERM", handleSigterm); }); }