import { visibleWidth } from "@earendil-works/pi-tui"; import type { CustomStatusItem } from "./types.ts"; export function collectHiddenExtensionStatusKeys( customItems: readonly CustomStatusItem[], ): Set { const hidden = new Set(); for (const item of customItems) { if (item.excludeFromExtensionStatuses) hidden.add(item.statusKey); } return hidden; } export function isNotificationExtensionStatus(value: string): boolean { return value.trimStart().startsWith("["); } export function getNotificationExtensionStatuses( statuses: ReadonlyMap, hiddenKeys: ReadonlySet, ): string[] { const notifications: string[] = []; for (const [statusKey, value] of statuses.entries()) { if ( hiddenKeys.has(statusKey) || !value || !isNotificationExtensionStatus(value) ) { continue; } notifications.push(value); } return notifications; } export function normalizeExtensionStatusValue(value: string): string | null { if (!value || visibleWidth(value) <= 0) { return null; } const stripped = value.replace(/(\x1b\[[0-9;]*m|\s|ยท|[|])+$/, ""); return visibleWidth(stripped) > 0 ? stripped : null; } export function normalizeCompactExtensionStatus(value: string): string | null { if (isNotificationExtensionStatus(value)) { return null; } return normalizeExtensionStatusValue(value); }