@hangtime/grip-connect-cli
Version:
CLI tool for Grip Connect devices
59 lines • 2.58 kB
JavaScript
/**
* `grip-connect` (no subcommand) -- interactive flow:
* pick device -> connect -> pick action -> run -> loop.
*/
import input from "@inquirer/input";
import { pickDevice, pickAction, createDevice, connectAndRun, buildActions, resolveContext } from "../utils.js";
/**
* Registers the default (no-command) interactive flow.
*
* Pick device -> connect -> pick action -> run -> loop. Choosing "Disconnect"
* disconnects and returns to the device picker so you can connect to another device.
*
* @param program - The root Commander program.
*/
export function registerInteractive(program) {
program.action(async () => {
const ctx = resolveContext(program);
while (true) {
const deviceKey = await pickDevice();
const { device, name } = createDevice(deviceKey);
await connectAndRun(device, name, async (d) => {
let keepGoing = true;
while (keepGoing) {
const actions = buildActions(deviceKey, ctx);
const action = await pickAction(actions);
if (action.name === "Disconnect") {
keepGoing = false;
await action.run(d, { ctx });
break;
}
// Prompt for relevant options based on the action
const opts = { ctx };
if (["Live Data", "Tare"].includes(action.name)) {
const needsDuration = action.name === "Tare";
const raw = await input({
message: needsDuration ? "Duration in seconds:" : "Duration in seconds (Optional):",
default: action.name === "Tare" ? "5" : "",
});
const trimmed = raw.trim();
if (!needsDuration && trimmed === "") {
opts.duration = 0;
}
else {
const sec = parseFloat(trimmed || (action.name === "Tare" ? "5" : "10"));
opts.duration = (Number.isNaN(sec) ? 0 : sec) * 1000;
}
}
await action.run(d, opts);
if (action.name === "Sleep") {
keepGoing = false;
break;
}
console.log();
}
}, ctx);
}
});
}
//# sourceMappingURL=interactive.js.map