UNPKG

@hangtime/grip-connect-cli

Version:
70 lines (63 loc) 2.98 kB
/** * `grip-connect list` -- lists all supported devices and their capabilities. */ import type { Command } from "commander" import pc from "picocolors" import { devices } from "../devices/index.js" import type { CliDevice } from "../types.js" import { outputJson, resolveContext } from "../utils.js" /** * Registers the `list` command on the Commander program. * * @param program - The root Commander program. */ export function registerList(program: Command): void { program .command("list") .description("List all supported devices and their capabilities") .action(() => { const ctx = resolveContext(program) if (ctx.json) { const out = Object.entries(devices).map(([key, def]) => { const d = new def.class() as unknown as CliDevice return { key, name: def.name, capabilities: { stream: typeof d.stream === "function", battery: typeof d.battery === "function", tare: typeof d.tare === "function", download: typeof d.download === "function", active: typeof d.active === "function", }, } }) outputJson({ devices: out }) return } console.log(`\n${pc.bold("Supported devices")}\n`) console.log(` ${pc.dim("KEY".padEnd(16))}${pc.dim("NAME".padEnd(18))}${pc.dim("CAPABILITIES")}`) console.log(pc.dim(" " + "─".repeat(60))) for (const [key, def] of Object.entries(devices)) { const d = new def.class() as unknown as CliDevice const caps: string[] = [] if (typeof d.stream === "function") caps.push(pc.green("stream")) if (typeof d.battery === "function") caps.push(pc.cyan("battery")) if (typeof d.tare === "function") caps.push(pc.yellow("tare")) if (typeof d.download === "function") caps.push(pc.magenta("download")) if (typeof d.active === "function") caps.push(pc.blue("active")) console.log(` ${key.padEnd(16)}${def.name.padEnd(18)}${caps.join(pc.dim(", "))}`) } console.log(`\n${pc.bold("Usage")}`) console.log(` ${pc.dim("$")} grip-connect ${pc.dim("Interactive mode")}`) console.log( ` ${pc.dim("$")} grip-connect live [device] ${pc.dim("Live Data: raw force visualised in real-time")}`, ) console.log(` ${pc.dim("$")} grip-connect watch [device] ${pc.dim("Indefinite stream + summary")}`) console.log(` ${pc.dim("$")} grip-connect info [device] ${pc.dim("Device information")}`) console.log(` ${pc.dim("$")} grip-connect download [device] ${pc.dim("Export session data")}`) console.log(` ${pc.dim("$")} grip-connect tare [device] ${pc.dim("Tare calibration")}`) console.log(` ${pc.dim("$")} grip-connect active [device] ${pc.dim("Activity monitor")}`) console.log(`\n${pc.dim("Example:")} grip-connect live progressor\n`) }) }