Skip to content

Commit c4fe0f6

Browse files
authored
fix(app): polyfill startup APIs for older Safari (#48621)
1 parent 625c469 commit c4fe0f6

5 files changed

Lines changed: 45 additions & 0 deletions

File tree

‎bun.lock‎

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { expect, test } from "@playwright/test"
2+
import { fixture, pageMessages } from "../smoke/session-timeline.fixture"
3+
import { mockOpenCodeServer } from "../utils/mock-server"
4+
5+
test("loads home and the directory picker without newer browser APIs", async ({ page }) => {
6+
await mockOpenCodeServer(page, {
7+
sessions: fixture.sessions,
8+
provider: fixture.provider,
9+
directory: fixture.directory,
10+
project: fixture.project,
11+
pageMessages,
12+
fileList: () => [],
13+
})
14+
await page.addInitScript((directory) => {
15+
// Safari 16.6 has neither API. Remove them before the web entry runs.
16+
Reflect.deleteProperty(Map, "groupBy")
17+
Reflect.deleteProperty(Promise, "withResolvers")
18+
localStorage.setItem(
19+
"opencode.global.dat:server",
20+
JSON.stringify({
21+
projects: { local: [{ worktree: directory, expanded: true }] },
22+
lastProject: { local: directory },
23+
}),
24+
)
25+
}, fixture.directory)
26+
27+
await page.goto("/")
28+
const row = page.locator('[data-component="home-session-row"]').filter({ hasText: fixture.expected.targetTitle })
29+
await expect(row).toBeVisible()
30+
31+
await page.getByRole("button", { name: "Add project", exact: true }).click()
32+
const dialog = page.getByRole("dialog")
33+
await expect(dialog.getByRole("button", { name: "Select folder", exact: true })).toBeEnabled()
34+
await dialog.getByRole("button", { name: "Cancel", exact: true }).click()
35+
await expect(dialog).toBeHidden()
36+
await expect(row).toBeVisible()
37+
})

‎packages/app/package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
"@solidjs/router": "catalog:",
8585
"@tanstack/solid-query": "5.91.4",
8686
"@tanstack/solid-virtual": "catalog:",
87+
"core-js": "3.50.0",
8788
"effect": "catalog:",
8889
"fuzzysort": "catalog:",
8990
"ghostty-web": "github:anomalyco/ghostty-web#83c0a07b8628b748aed073b232cb4b52a6ca11c1",

‎packages/app/src/entry.tsx‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// @refresh reload
22

3+
import "@/runtime/polyfills"
34
import { init } from "@sentry/solid"
45
import { render } from "solid-js/web"
56
import { AppBaseProviders, AppInterface } from "@/app"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// Safari before 17.4 does not provide these runtime APIs.
2+
import "core-js/es/map/group-by"
3+
import "core-js/es/promise/with-resolvers"

0 commit comments

Comments
 (0)