1import type { EnvironmentId, ThreadId } from "@t3tools/contracts";
2
3export interface TerminalGridSize {
4 readonly cols: number;
5 readonly rows: number;
6}
7
8export interface TerminalUiStateTarget {
9 readonly environmentId: EnvironmentId;
10 readonly threadId: ThreadId;
11 readonly terminalId: string;
12}
13
14const terminalGridSizeCache = new Map<string, TerminalGridSize>();
15
16function terminalUiStateKey(target: TerminalUiStateTarget): string {
17 return `${target.environmentId}:${target.threadId}:${target.terminalId}`;
18}
19
20export function getCachedTerminalGridSize(target: TerminalUiStateTarget): TerminalGridSize | null {
21 return terminalGridSizeCache.get(terminalUiStateKey(target)) ?? null;
22}
23
24export function cacheTerminalGridSize(
25 target: TerminalUiStateTarget,
26 size: TerminalGridSize,
27): TerminalGridSize {
28 const normalized = {
29 cols: Math.max(1, Math.floor(size.cols)),
30 rows: Math.max(1, Math.floor(size.rows)),
31 };
32 terminalGridSizeCache.set(terminalUiStateKey(target), normalized);
33 return normalized;
34}
35
36export function resetTerminalUiStateCaches() {
37 terminalGridSizeCache.clear();
38}