From ca972f692fb2e55780e5c2d1d190127d3bd23c33 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 29 Apr 2026 08:46:20 +0100 Subject: [PATCH] fix: keep browser fetch helper under test support --- .../browser/src/browser/test-support-fetch.ts | 30 ------------------ .../browser/src/browser/test-support/fetch.ts | 31 ++++++++++++++++++- 2 files changed, 30 insertions(+), 31 deletions(-) delete mode 100644 extensions/browser/src/browser/test-support-fetch.ts diff --git a/extensions/browser/src/browser/test-support-fetch.ts b/extensions/browser/src/browser/test-support-fetch.ts deleted file mode 100644 index 310c7728afe..00000000000 --- a/extensions/browser/src/browser/test-support-fetch.ts +++ /dev/null @@ -1,30 +0,0 @@ -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"); -} diff --git a/extensions/browser/src/browser/test-support/fetch.ts b/extensions/browser/src/browser/test-support/fetch.ts index 27d6d2c98dd..310c7728afe 100644 --- a/extensions/browser/src/browser/test-support/fetch.ts +++ b/extensions/browser/src/browser/test-support/fetch.ts @@ -1 +1,30 @@ -export { getBrowserTestFetch, type BrowserTestFetch } from "../test-support-fetch.js"; +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"); +}