diff --git a/.changeset/wise-adults-pull.md b/.changeset/wise-adults-pull.md new file mode 100644 index 000000000000..5bde68e010bb --- /dev/null +++ b/.changeset/wise-adults-pull.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +[fix] don't polyfill undici if using Deno or Bun diff --git a/packages/kit/src/core/prerender/prerender.js b/packages/kit/src/core/prerender/prerender.js index 65ece5d73de9..aa3e732c6835 100644 --- a/packages/kit/src/core/prerender/prerender.js +++ b/packages/kit/src/core/prerender/prerender.js @@ -1,8 +1,9 @@ import { readFileSync, writeFileSync } from 'fs'; import { dirname, join } from 'path'; import { pathToFileURL, URL } from 'url'; -import { mkdirp, posixify, walk } from '../../utils/filesystem.js'; import { installPolyfills } from '../../exports/node/polyfills.js'; +import { mkdirp, posixify, walk } from '../../utils/filesystem.js'; +import { should_polyfill } from '../../utils/platform.js'; import { is_root_relative, resolve } from '../../utils/url.js'; import { queue } from './queue.js'; import { crawl } from './crawl.js'; @@ -89,7 +90,9 @@ export async function prerender() { verbose: verbose === 'true' }); - installPolyfills(); + if (should_polyfill) { + installPolyfills(); + } const server_root = join(config.outDir, 'output'); diff --git a/packages/kit/src/exports/node/polyfills.js b/packages/kit/src/exports/node/polyfills.js index ba0e49ef8d85..88805160b547 100644 --- a/packages/kit/src/exports/node/polyfills.js +++ b/packages/kit/src/exports/node/polyfills.js @@ -16,6 +16,7 @@ const globals = { }; // exported for dev/preview and node environments +// TODO: remove this once we only support Node 18.11+ (the version multipart/form-data was added) export function installPolyfills() { for (const name in globals) { Object.defineProperty(globalThis, name, { diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 545af8d1f464..571db3d223b9 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -8,6 +8,7 @@ import { getRequest, setResponse } from '../../../exports/node/index.js'; import { installPolyfills } from '../../../exports/node/polyfills.js'; import { coalesce_to_error } from '../../../utils/error.js'; import { posixify, resolve_entry, to_fs } from '../../../utils/filesystem.js'; +import { should_polyfill } from '../../../utils/platform.js'; import { load_error_page, load_template } from '../../../core/config/index.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; import * as sync from '../../../core/sync/sync.js'; @@ -24,7 +25,9 @@ const cwd = process.cwd(); * @return {Promise void>>} */ export async function dev(vite, vite_config, svelte_config) { - installPolyfills(); + if (should_polyfill) { + installPolyfills(); + } sync.init(svelte_config, vite_config.mode); diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index 45ac7344b018..b62db099cc6c 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -2,10 +2,11 @@ import fs from 'fs'; import { join } from 'path'; import sirv from 'sirv'; import { pathToFileURL } from 'url'; +import { loadEnv, normalizePath } from 'vite'; import { getRequest, setResponse } from '../../../exports/node/index.js'; import { installPolyfills } from '../../../exports/node/polyfills.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; -import { loadEnv, normalizePath } from 'vite'; +import { should_polyfill } from '../../../utils/platform.js'; import { not_found } from '../utils.js'; /** @typedef {import('http').IncomingMessage} Req */ @@ -21,7 +22,9 @@ import { not_found } from '../utils.js'; * @param {import('types').ValidatedConfig} svelte_config */ export async function preview(vite, vite_config, svelte_config) { - installPolyfills(); + if (should_polyfill) { + installPolyfills(); + } const { paths } = svelte_config.kit; const base = paths.base; diff --git a/packages/kit/src/utils/platform.js b/packages/kit/src/utils/platform.js new file mode 100644 index 000000000000..e32dd5f5abce --- /dev/null +++ b/packages/kit/src/utils/platform.js @@ -0,0 +1 @@ +export const should_polyfill = typeof Deno === 'undefined' && typeof Bun === 'undefined'; diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index f45b76390da2..4d558c88e58a 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -389,4 +389,6 @@ declare global { const __SVELTEKIT_BROWSER__: boolean; const __SVELTEKIT_DEV__: boolean; const __SVELTEKIT_EMBEDDED__: boolean; + var Bun: object; + var Deno: object; }