36 lines · 1.4 KB · TypeScript
RawDownload
import type { ScopedThreadRef } from "@t3tools/contracts"; import { readEnvironmentApi } from "~/environmentApi";import { resolveAssetUrl } from "~/assets/assetUrls";import { isPreviewSupportedInRuntime, usePreviewStateStore } from "~/previewStateStore";import { useRightPanelStore } from "~/rightPanelStore"; export const isBrowserPreviewFile = (path: string): boolean =>  /\.(?:html?|pdf)$/i.test(path.split(/[?#]/, 1)[0] ?? ""); export async function openUrlInPreview(threadRef: ScopedThreadRef, url: string): Promise<void> {  const api = readEnvironmentApi(threadRef.environmentId);  if (!api) {    throw new Error("Environment is not connected.");  }   const snapshot = await api.preview.open({ threadId: threadRef.threadId, url });  usePreviewStateStore.getState().applyServerSnapshot(threadRef, snapshot);  usePreviewStateStore.getState().rememberUrl(threadRef, url);  useRightPanelStore.getState().openBrowser(threadRef, snapshot.tabId);} export async function openFileInPreview(  threadRef: ScopedThreadRef,  filePath: string,): Promise<void> {  if (!isPreviewSupportedInRuntime()) {    throw new Error("The integrated browser is unavailable in this runtime.");  }  const asset = await resolveAssetUrl(threadRef.environmentId, {    _tag: "workspace-file",    threadId: threadRef.threadId,    path: filePath,  });  await openUrlInPreview(threadRef, asset.url);}