diff --git a/packages/app/index.html b/packages/app/index.html index e07a15b4121e..0e21e8cdf506 100644 --- a/packages/app/index.html +++ b/packages/app/index.html @@ -6,6 +6,7 @@ name="viewport" content="width=device-width, initial-scale=1, interactive-widget=resizes-content, viewport-fit=cover" /> + OpenCode diff --git a/packages/app/vite.js b/packages/app/vite.js index bb0348937765..d031688ce7df 100644 --- a/packages/app/vite.js +++ b/packages/app/vite.js @@ -2,6 +2,7 @@ import { readFileSync } from "node:fs" import solidPlugin from "vite-plugin-solid" import tailwindcss from "@tailwindcss/vite" import { fileURLToPath } from "url" +import { IOS_INPUT_ZOOM_SCRIPT } from "@opencode/ui/ios-input-zoom" const theme = fileURLToPath(new URL("./public/oc-theme-preload.js", import.meta.url)) const themeScript = readFileSync(theme, "utf8") @@ -50,6 +51,13 @@ export default [ } }, }, + { + name: "opencode-desktop:ios-input-zoom", + transformIndexHtml: { + order: "pre", + handler: inlineIosInputZoom, + }, + }, { name: "opencode-desktop:theme-preload", transformIndexHtml: { @@ -61,6 +69,13 @@ export default [ solidPlugin(), ] +export function inlineIosInputZoom(html) { + return html.replace( + /`, + ) +} + export function inlineThemePreload(html) { return html.replace( /embedded`, + ) await writeFile(asset, "console.log('embedded')") const assets = { "index.html": await Bun.file(index).text(), @@ -83,6 +88,11 @@ describe("web UI", () => { expect(yield* Effect.promise(() => fallback.text())).toContain("embedded") expect(fallback.headers.get("content-security-policy")).toContain("default-src 'self'") expect(fallback.headers.get("content-security-policy")).toContain("connect-src * data: blob:") + inline.forEach((script) => + expect(fallback.headers.get("content-security-policy")).toContain( + `'sha256-${createHash("sha256").update(script).digest("base64")}'`, + ), + ) const dotted = yield* Effect.promise(() => fetch(`${origin}/workspace/example.js`)) expect(dotted.status).toBe(200) diff --git a/packages/enterprise/src/entry-server.tsx b/packages/enterprise/src/entry-server.tsx index 076ff7e9b812..53673001e724 100644 --- a/packages/enterprise/src/entry-server.tsx +++ b/packages/enterprise/src/entry-server.tsx @@ -1,6 +1,7 @@ // @refresh reload import { createHandler, StartServer } from "@solidjs/start/server" import { getRequestEvent } from "solid-js/web" +import { IOS_INPUT_ZOOM_SCRIPT } from "@opencode/ui/ios-input-zoom" export default createHandler(() => ( ( +