Julius MarmingeT3 Code Mobile [WIP] (#2013)b3e8c035 months agoHistory
99 lines · 3.6 KB · TypeScript
RawDownload
import type { EnvironmentId, EnvironmentApi } from "@t3tools/contracts"; import type { WsRpcClient } from "@t3tools/client-runtime";import { readEnvironmentConnection } from "./environments/runtime"; const environmentApiOverridesForTests = new Map<EnvironmentId, EnvironmentApi>(); export function createEnvironmentApi(rpcClient: WsRpcClient): EnvironmentApi {  return {    terminal: {      open: (input) => rpcClient.terminal.open(input as never),      attach: (input, callback, options) =>        rpcClient.terminal.attach(input as never, callback, options),      write: (input) => rpcClient.terminal.write(input as never),      resize: (input) => rpcClient.terminal.resize(input as never),      clear: (input) => rpcClient.terminal.clear(input as never),      restart: (input) => rpcClient.terminal.restart(input as never),      close: (input) => rpcClient.terminal.close(input as never),      onMetadata: (callback, options) => rpcClient.terminal.onMetadata(callback, options),    },    projects: {      searchEntries: rpcClient.projects.searchEntries,      writeFile: rpcClient.projects.writeFile,    },    filesystem: {      browse: rpcClient.filesystem.browse,    },    sourceControl: {      lookupRepository: rpcClient.sourceControl.lookupRepository,      cloneRepository: rpcClient.sourceControl.cloneRepository,      publishRepository: rpcClient.sourceControl.publishRepository,    },    vcs: {      pull: rpcClient.vcs.pull,      refreshStatus: rpcClient.vcs.refreshStatus,      onStatus: (input, callback, options) => rpcClient.vcs.onStatus(input, callback, options),      listRefs: rpcClient.vcs.listRefs,      createWorktree: rpcClient.vcs.createWorktree,      removeWorktree: rpcClient.vcs.removeWorktree,      createRef: rpcClient.vcs.createRef,      switchRef: rpcClient.vcs.switchRef,      init: rpcClient.vcs.init,    },    git: {      resolvePullRequest: rpcClient.git.resolvePullRequest,      preparePullRequestThread: rpcClient.git.preparePullRequestThread,    },    review: {      getDiffPreview: rpcClient.review.getDiffPreview,    },    orchestration: {      dispatchCommand: rpcClient.orchestration.dispatchCommand,      getTurnDiff: rpcClient.orchestration.getTurnDiff,      getFullThreadDiff: rpcClient.orchestration.getFullThreadDiff,      getArchivedShellSnapshot: rpcClient.orchestration.getArchivedShellSnapshot,      subscribeShell: (callback, options) =>        rpcClient.orchestration.subscribeShell(callback, options),      subscribeThread: (input, callback, options) =>        rpcClient.orchestration.subscribeThread(input, callback, options),    },  };} export function readEnvironmentApi(environmentId: EnvironmentId): EnvironmentApi | undefined {  if (typeof window === "undefined") {    return undefined;  }   if (!environmentId) {    return undefined;  }   const overriddenApi = environmentApiOverridesForTests.get(environmentId);  if (overriddenApi) {    return overriddenApi;  }   const connection = readEnvironmentConnection(environmentId);  return connection ? createEnvironmentApi(connection.client) : undefined;} export function ensureEnvironmentApi(environmentId: EnvironmentId): EnvironmentApi {  const api = readEnvironmentApi(environmentId);  if (!api) {    throw new Error(`Environment API not found for environment ${environmentId}`);  }  return api;} export function __setEnvironmentApiOverrideForTests(  environmentId: EnvironmentId,  api: EnvironmentApi,): void {  environmentApiOverridesForTests.set(environmentId, api);} export function __resetEnvironmentApiOverridesForTests(): void {  environmentApiOverridesForTests.clear();}