51 lines · 1.6 KB · TypeScript
RawDownload
import type { DiscoveredLocalServer, EnvironmentId, ThreadId } from "@t3tools/contracts";import { useMemo } from "react"; import { previewEnvironment } from "./state/preview";import { useEnvironmentQuery } from "./state/query"; const EMPTY_PORTS: ReadonlyArray<DiscoveredLocalServer> = Object.freeze([]); export function useDiscoveredPorts(  environmentId: EnvironmentId | null,): ReadonlyArray<DiscoveredLocalServer> {  const query = useEnvironmentQuery(    environmentId === null      ? null      : previewEnvironment.discoveredServers({ environmentId, input: {} }),  );  return query.data?.servers ?? EMPTY_PORTS;} export function useThreadDiscoveredPorts(input: {  readonly environmentId: EnvironmentId | null;  readonly threadId: ThreadId | null;}): ReadonlyArray<DiscoveredLocalServer> {  const ports = useDiscoveredPorts(input.environmentId);  return useMemo(    () =>      input.threadId        ? ports.filter((port) => port.terminal?.threadId === input.threadId)        : EMPTY_PORTS,    [input.threadId, ports],  );} export function useTerminalDiscoveredPorts(input: {  readonly environmentId: EnvironmentId | null;  readonly threadId: ThreadId | null;  readonly terminalId: string | null;}): ReadonlyArray<DiscoveredLocalServer> {  const ports = useDiscoveredPorts(input.environmentId);  return useMemo(    () =>      input.threadId && input.terminalId        ? ports.filter(            (port) =>              port.terminal?.threadId === input.threadId &&              port.terminal.terminalId === input.terminalId,          )        : EMPTY_PORTS,    [input.terminalId, input.threadId, ports],  );}