summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/app/src/components/terminal.tsx21
1 files changed, 18 insertions, 3 deletions
diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx
index 78c33baff..022369afe 100644
--- a/packages/app/src/components/terminal.tsx
+++ b/packages/app/src/components/terminal.tsx
@@ -16,6 +16,19 @@ export interface TerminalProps extends ComponentProps<"div"> {
onConnectError?: (error: unknown) => void
}
+let shared: Promise<{ mod: typeof import("ghostty-web"); ghostty: Ghostty }> | undefined
+
+const loadGhostty = () => {
+ if (shared) return shared
+ shared = import("ghostty-web")
+ .then(async (mod) => ({ mod, ghostty: await mod.Ghostty.load() }))
+ .catch((err) => {
+ shared = undefined
+ throw err
+ })
+ return shared
+}
+
type TerminalColors = {
background: string
foreground: string
@@ -53,7 +66,6 @@ export const Terminal = (props: TerminalProps) => {
let handleResize: () => void
let handleTextareaFocus: () => void
let handleTextareaBlur: () => void
- let reconnect: number | undefined
let disposed = false
const getTerminalColors = (): TerminalColors => {
@@ -112,8 +124,11 @@ export const Terminal = (props: TerminalProps) => {
onMount(() => {
const run = async () => {
- const mod = await import("ghostty-web")
- ghostty = await mod.Ghostty.load()
+ const loaded = await loadGhostty()
+ if (disposed) return
+
+ const mod = loaded.mod
+ ghostty = loaded.ghostty
const once = { value: false }