A Docker-like CLI and HTTP API for managing headless VMs

fix: add ellipsis function to truncate long strings in VM table display

+11 -10
+11 -10
src/subcommands/ps.ts
··· 39 39 "BRIDGE", 40 40 "PORTS", 41 41 "CREATED", 42 - ]), 42 + ]) 43 43 ); 44 + 45 + const ellipsis = (str: string, maxLength: number) => 46 + str.length > maxLength ? `${str.slice(0, maxLength - 3)}...` : str; 44 47 45 48 const populateTable = (table: Table, vms: VirtualMachine[]) => 46 49 Effect.sync(() => { ··· 51 54 vm.memory, 52 55 formatStatus(vm), 53 56 vm.pid?.toString() ?? "-", 54 - basename(vm.drivePath || vm.isoPath || "-"), 57 + ellipsis(basename(vm.drivePath || vm.isoPath || "-"), 20), 55 58 vm.bridge ?? "-", 56 59 formatPorts(vm.portForward), 57 60 dayjs.utc(vm.createdAt).local().fromNow(), ··· 76 79 Effect.all([fetchVMs(all), createTable()]), 77 80 Effect.flatMap(([vms, table]) => populateTable(table, vms)), 78 81 Effect.flatMap(displayTable), 79 - Effect.catchAll(handleError), 82 + Effect.catchAll(handleError) 80 83 ); 81 84 82 85 export default async function (all: boolean) { ··· 86 89 function formatStatus(vm: VirtualMachine) { 87 90 switch (vm.status) { 88 91 case "RUNNING": 89 - return `Up ${ 90 - dayjs 91 - .utc(vm.updatedAt) 92 - .local() 93 - .fromNow() 94 - .replace("ago", "") 95 - }`; 92 + return `Up ${dayjs 93 + .utc(vm.updatedAt) 94 + .local() 95 + .fromNow() 96 + .replace("ago", "")}`; 96 97 case "STOPPED": 97 98 return `Exited ${dayjs.utc(vm.updatedAt).local().fromNow()}`; 98 99 default: