UNPKG

equicord-companion

Version:

Equicord Companion is a vscode extension to test Equicord patches & webpack finds right from the comfort of your IDE

89 lines (77 loc) 2.75 kB
import { sendToSockets } from "@server"; import { ReporterData } from "@type/reporter"; import { ReporterPanel } from "./webview"; import { ShellExecution, tasks, window } from "vscode"; // 1. rebuild with reporter // 2. send reload command // 3. await results back from equicord // 4. rebuild without reporter // 5. send reload command // 6. display results export let running = false; export async function startReporter() { try { if (running) { running = false; throw new Error("The reporter is currently running, please wait.\nIf you think this is a bug, please report this."); } running = true; const task = await getReporterTask(); // used to kill watch tasks ensureOnlyTask(); await tasks.executeTask(task); // cant find a way to await the vscode task finish await new Promise((r) => setTimeout(r, 1000)); await sendToSockets({ type: "reload", data: null, }); } catch (e) { window.showErrorMessage(String(e)); // peak logic running = !running; } } export async function handleReporterData(data: ReporterData) { running = false; try { const task = await getNormalBuildTask(); ensureOnlyTask(); await tasks.executeTask(task); // FIXME: cant find a way to await the vscode task finish await new Promise((r) => setTimeout(r, 1000)); await sendToSockets({ type: "reload", data: null, }); ReporterPanel.createOrShow(data); } catch (error) { window.showErrorMessage(String(error)); } } async function getNormalBuildTask() { const task = (await tasks.fetchTasks()).filter((t) => t.execution instanceof ShellExecution && t.execution.commandLine?.includes("build") && t.execution.commandLine?.includes("--dev") && !t.execution.commandLine?.includes("--companion-test")); if (task.length === 0) throw new Error("No build task found"); if (task.length > 1) throw new Error("More than one task found"); return task[0]; } async function getReporterTask() { const task = (await tasks.fetchTasks()) .filter((t) => t.execution instanceof ShellExecution && String(t.execution.commandLine) .includes("--companion-test")); if (task.length === 0) throw new Error("No build task found"); if (task.length > 1) throw new Error("More than one task found"); return task[0]; } /** * ensures there are no other tasks running, if so, ends them */ function ensureOnlyTask() { if (tasks.taskExecutions.length === 0) return; tasks.taskExecutions.forEach((t) => t.terminate()); }