124 lines
3.3 KiB
JavaScript
124 lines
3.3 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true,
|
|
});
|
|
exports.default = void 0;
|
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
function _interopRequireDefault(e) {
|
|
return e && e.__esModule ? e : { default: e };
|
|
}
|
|
class OpenDebuggerKeyboardHandler {
|
|
#devServerUrl;
|
|
#reporter;
|
|
#targetsShownForSelection = null;
|
|
constructor({ devServerUrl, reporter }) {
|
|
this.#devServerUrl = devServerUrl;
|
|
this.#reporter = reporter;
|
|
}
|
|
async #tryOpenDebuggerForTarget(target) {
|
|
this.#targetsShownForSelection = null;
|
|
this.#clearTerminalMenu();
|
|
try {
|
|
await fetch(
|
|
new URL(
|
|
"/open-debugger?target=" + encodeURIComponent(target.id),
|
|
this.#devServerUrl
|
|
).href,
|
|
{
|
|
method: "POST",
|
|
}
|
|
);
|
|
} catch (e) {
|
|
this.#log(
|
|
"error",
|
|
"Failed to open debugger for %s (%s): %s",
|
|
target.title,
|
|
target.description,
|
|
e.message
|
|
);
|
|
this.#clearTerminalMenu();
|
|
}
|
|
}
|
|
async handleOpenDebugger() {
|
|
this.#setTerminalMenu("Fetching available debugging targets...");
|
|
this.#targetsShownForSelection = null;
|
|
try {
|
|
const res = await fetch(this.#devServerUrl + "/json/list", {
|
|
method: "POST",
|
|
});
|
|
if (res.status !== 200) {
|
|
throw new Error(`Unexpected status code: ${res.status}`);
|
|
}
|
|
const targets = await res.json();
|
|
if (!Array.isArray(targets)) {
|
|
throw new Error("Expected array.");
|
|
}
|
|
if (targets.length === 0) {
|
|
this.#log("warn", "No connected targets");
|
|
this.#clearTerminalMenu();
|
|
} else if (targets.length === 1) {
|
|
const target = targets[0];
|
|
void this.#tryOpenDebuggerForTarget(target);
|
|
} else {
|
|
this.#targetsShownForSelection = targets;
|
|
if (targets.length > 9) {
|
|
this.#log(
|
|
"warn",
|
|
"10 or more debug targets available, showing the first 9."
|
|
);
|
|
}
|
|
this.#setTerminalMenu(
|
|
`Multiple debug targets available, please select:\n ${targets
|
|
.slice(0, 9)
|
|
.map(
|
|
({ title }, i) =>
|
|
`${_chalk.default.white.inverse(` ${i + 1} `)} - "${title}"`
|
|
)
|
|
.join("\n ")}`
|
|
);
|
|
}
|
|
} catch (e) {
|
|
this.#log("error", `Failed to fetch debug targets: ${e.message}`);
|
|
this.#clearTerminalMenu();
|
|
}
|
|
}
|
|
maybeHandleTargetSelection(keyName) {
|
|
if (keyName >= "1" && keyName <= "9") {
|
|
const targetIndex = Number(keyName) - 1;
|
|
if (
|
|
this.#targetsShownForSelection != null &&
|
|
targetIndex < this.#targetsShownForSelection.length
|
|
) {
|
|
const target = this.#targetsShownForSelection[targetIndex];
|
|
void this.#tryOpenDebuggerForTarget(target);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
dismiss() {
|
|
this.#clearTerminalMenu();
|
|
this.#targetsShownForSelection = null;
|
|
}
|
|
#log(level, ...data) {
|
|
this.#reporter.update({
|
|
type: "unstable_server_log",
|
|
level,
|
|
data,
|
|
});
|
|
}
|
|
#setTerminalMenu(message) {
|
|
this.#reporter.update({
|
|
type: "unstable_server_menu_updated",
|
|
message,
|
|
});
|
|
}
|
|
#clearTerminalMenu() {
|
|
this.#reporter.update({
|
|
type: "unstable_server_menu_cleared",
|
|
});
|
|
}
|
|
}
|
|
exports.default = OpenDebuggerKeyboardHandler;
|