From c01244e859279a2e60f50423174c94f6fc9e3e8f Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Wed, 29 Apr 2026 00:28:02 -0700 Subject: [PATCH] test(browser): keep undici fetch helper test-only --- extensions/browser/src/browser/test-fetch.ts | 31 +------------------ .../browser/src/browser/test-support-fetch.ts | 30 ++++++++++++++++++ 2 files changed, 31 insertions(+), 30 deletions(-) create mode 100644 extensions/browser/src/browser/test-support-fetch.ts diff --git a/extensions/browser/src/browser/test-fetch.ts b/extensions/browser/src/browser/test-fetch.ts index 310c7728afe..8f2a94c3e7c 100644 --- a/extensions/browser/src/browser/test-fetch.ts +++ b/extensions/browser/src/browser/test-fetch.ts @@ -1,30 +1 @@ -import { createRequire } from "node:module"; - -type FetchLike = ((input: string | URL, init?: RequestInit) => Promise) & { - mock?: unknown; -}; - -export type BrowserTestFetch = (input: string | URL, init?: RequestInit) => Promise; - -function isUsableFetch(value: unknown): value is FetchLike { - return typeof value === "function" && !("mock" in (value as FetchLike)); -} - -export function getBrowserTestFetch(): BrowserTestFetch { - const require = createRequire(import.meta.url); - const vitest = (globalThis as { vi?: { doUnmock?: (id: string) => void } }).vi; - vitest?.doUnmock?.("undici"); - try { - delete require.cache[require.resolve("undici")]; - } catch { - // Best-effort cache bust for shared-thread test workers. - } - const { fetch } = require("undici") as typeof import("undici"); - if (isUsableFetch(fetch)) { - return (input, init) => fetch(input, init); - } - if (isUsableFetch(globalThis.fetch)) { - return (input, init) => globalThis.fetch(input, init); - } - throw new TypeError("fetch is not a function"); -} +export { getBrowserTestFetch, type BrowserTestFetch } from "./test-support-fetch.js"; diff --git a/extensions/browser/src/browser/test-support-fetch.ts b/extensions/browser/src/browser/test-support-fetch.ts new file mode 100644 index 00000000000..310c7728afe --- /dev/null +++ b/extensions/browser/src/browser/test-support-fetch.ts @@ -0,0 +1,30 @@ +import { createRequire } from "node:module"; + +type FetchLike = ((input: string | URL, init?: RequestInit) => Promise) & { + mock?: unknown; +}; + +export type BrowserTestFetch = (input: string | URL, init?: RequestInit) => Promise; + +function isUsableFetch(value: unknown): value is FetchLike { + return typeof value === "function" && !("mock" in (value as FetchLike)); +} + +export function getBrowserTestFetch(): BrowserTestFetch { + const require = createRequire(import.meta.url); + const vitest = (globalThis as { vi?: { doUnmock?: (id: string) => void } }).vi; + vitest?.doUnmock?.("undici"); + try { + delete require.cache[require.resolve("undici")]; + } catch { + // Best-effort cache bust for shared-thread test workers. + } + const { fetch } = require("undici") as typeof import("undici"); + if (isUsableFetch(fetch)) { + return (input, init) => fetch(input, init); + } + if (isUsableFetch(globalThis.fetch)) { + return (input, init) => globalThis.fetch(input, init); + } + throw new TypeError("fetch is not a function"); +}