Skip to content
Source
Sign inSign up

terminalLabels.ts

41 lines1.2 KB

1import type { TerminalSummary } from "@t3tools/contracts";
2​
3function terminalNumber(terminalId: string): string | undefined {
4 return /^term(?:inal)?-(\d+)(?:-[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12})?$/i.exec(
5 terminalId,
6 )?.[1];
7}
8​
9export function getTerminalLabel(terminalId: string): string {
10 const numericSuffix = terminalNumber(terminalId);
11 if (numericSuffix) {
12 return `Terminal ${numericSuffix}`;
13 }
14​
15 return terminalId;
17​
18export function resolveTerminalSessionLabel(
19 terminalId: string,
20 summary: Pick<TerminalSummary, "label"> | null | undefined,
21): string {
22 const trimmed = summary?.label?.trim();
23 if (trimmed && trimmed.length > 0) {
24 return trimmed;
25 }
26 return getTerminalLabel(terminalId);
28​
29/** Append a UUID when metadata is unavailable to avoid reusing unseen host sessions. */
30export function nextTerminalId(
31 existingTerminalIds: ReadonlyArray<string>,
32 uniqueSuffix?: string,
33): string {
34 const usedNumbers = new Set(existingTerminalIds.map(terminalNumber));
35 let nextIndex = 1;
36 while (usedNumbers.has(String(nextIndex))) {
37 nextIndex += 1;
38 }
39​
40 return `term-${nextIndex}${uniqueSuffix === undefined ? "" : `-${uniqueSuffix}`}`;