@hangtime/grip-connect-cli
Version:
CLI tool for Grip Connect devices
70 lines (63 loc) • 2.98 kB
text/typescript
/**
* `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`)
})
}