diff options
| author | Adam <[email protected]> | 2026-03-26 13:41:22 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-26 13:41:22 -0500 |
| commit | c7760b433b1bdbcaed7e7cd55d53b5b331f0f0fa (patch) | |
| tree | 4d1a865b8890dc30767b66293923c15e2b3f6d24 /packages/sdk/js/src/client.ts | |
| parent | 2e6ac8ff49eabcb1b62c1bd504338e7449f80c6e (diff) | |
| download | opencode-c7760b433b1bdbcaed7e7cd55d53b5b331f0f0fa.tar.gz opencode-c7760b433b1bdbcaed7e7cd55d53b5b331f0f0fa.zip | |
fix(app): more startup perf (#19288)
Diffstat (limited to 'packages/sdk/js/src/client.ts')
| -rw-r--r-- | packages/sdk/js/src/client.ts | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/sdk/js/src/client.ts b/packages/sdk/js/src/client.ts index e0d20152b..05f463825 100644 --- a/packages/sdk/js/src/client.ts +++ b/packages/sdk/js/src/client.ts @@ -5,6 +5,30 @@ import { type Config } from "./gen/client/types.gen.js" import { OpencodeClient } from "./gen/sdk.gen.js" export { type Config as OpencodeClientConfig, OpencodeClient } +function pick(value: string | null, fallback?: string) { + if (!value) return + if (!fallback) return value + if (value === fallback) return fallback + if (value === encodeURIComponent(fallback)) return fallback + return value +} + +function rewrite(request: Request, directory?: string) { + if (request.method !== "GET" && request.method !== "HEAD") return request + + const value = pick(request.headers.get("x-opencode-directory"), directory) + if (!value) return request + + const url = new URL(request.url) + if (!url.searchParams.has("directory")) { + url.searchParams.set("directory", value) + } + + const next = new Request(url, request) + next.headers.delete("x-opencode-directory") + return next +} + export function createOpencodeClient(config?: Config & { directory?: string }) { if (!config?.fetch) { const customFetch: any = (req: any) => { @@ -26,5 +50,6 @@ export function createOpencodeClient(config?: Config & { directory?: string }) { } const client = createClient(config) + client.interceptors.request.use((request) => rewrite(request, config?.directory)) return new OpencodeClient({ client }) } |
