From b18c8395c6548771bb95974934a34c0b761f5e84 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Thu, 26 Jan 2023 14:33:34 +0100 Subject: [PATCH] put additional dev time check inside render.js instead --- packages/kit/src/exports/vite/dev/index.js | 2 +- .../kit/src/runtime/server/page/render.js | 25 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index aa06cf6ad140..f20be5190b6f 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -33,7 +33,7 @@ export async function dev(vite, vite_config, svelte_config) { globalThis.fetch = (info, init) => { if (typeof info === 'string' && !/^\w+:\/\//.test(info)) { throw new Error( - `Cannot use relative URL (${info}) with global fetch on the server. If this is called inside a \`load\` function, use \`event.fetch\` instead: https://kit.svelte.dev/docs/web-standards#fetch-apis` + `Cannot use relative URL (${info}) with global fetch — use \`event.fetch\` instead: https://kit.svelte.dev/docs/web-standards#fetch-apis` ); } diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index 85f06742b2d9..c33bad9d4a1f 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -112,7 +112,30 @@ export async function render_response({ form: form_value }; - rendered = options.root.render(props); + if (__SVELTEKIT_DEV__) { + const fetch = globalThis.fetch; + let warned = false; + globalThis.fetch = (info, init) => { + if (typeof info === 'string' && !/^\w+:\/\//.test(info)) { + throw new Error( + `Cannot call \`fetch\` eagerly during server side rendering with relative URL (${info}) — put your \`fetch\` calls inside \`onMount\` or a \`load\` function instead` + ); + } else if (!warned) { + console.warn( + `Avoid calling \`fetch\` eagerly during server side rendering — put your \`fetch\` calls inside \`onMount\` or a \`load\` function instead` + ); + warned = true; + } + + return fetch(info, init); + }; + + rendered = options.root.render(props); + + globalThis.fetch = fetch; + } else { + rendered = options.root.render(props); + } for (const { node } of branch) { if (node.imports) {