From d2d99ffb60f85b97d6c0d73279647b0023b40d9d Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 26 May 2025 14:15:19 -0400 Subject: [PATCH 1/4] fix: suppress console spam for chrome devtools requests --- .changeset/calm-dragons-visit.md | 5 +++++ packages/kit/src/runtime/server/respond.js | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/calm-dragons-visit.md diff --git a/.changeset/calm-dragons-visit.md b/.changeset/calm-dragons-visit.md new file mode 100644 index 000000000000..d025ab17dbf7 --- /dev/null +++ b/.changeset/calm-dragons-visit.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: suppress console spam for chrome devtools requests diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index ad945974ef58..587b78339357 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -573,6 +573,12 @@ export async function respond(request, options, manifest, state) { // if this request came direct from the user, rather than // via our own `fetch`, render a 404 page if (state.depth === 0) { + // In local development, Chrome requests this file for its 'automatic workspace folders' feature, + // causing console spam. TODO should we instead respond with some actual data? + if (DEV && event.url.pathname === '/.well-known/appspecific/com.chrome.devtools.json') { + return new Response(undefined, { status: 404 }); + } + return await respond_with_error({ event, options, From 8a701d7c5bf6a851b4cdf0249917c5f54c6d2ce5 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 26 May 2025 14:45:11 -0400 Subject: [PATCH 2/4] add link to documentation --- packages/kit/src/runtime/server/respond.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index 587b78339357..3729b5c71aa2 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -575,6 +575,7 @@ export async function respond(request, options, manifest, state) { if (state.depth === 0) { // In local development, Chrome requests this file for its 'automatic workspace folders' feature, // causing console spam. TODO should we instead respond with some actual data? + // https://chromium.googlesource.com/devtools/devtools-frontend/+/main/docs/ecosystem/automatic_workspace_folders.md if (DEV && event.url.pathname === '/.well-known/appspecific/com.chrome.devtools.json') { return new Response(undefined, { status: 404 }); } From fd828d73cba59ce5798b9b9679572cff4bd2ea27 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 29 May 2025 08:07:22 -0400 Subject: [PATCH 3/4] Update packages/kit/src/runtime/server/respond.js Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- packages/kit/src/runtime/server/respond.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index 3729b5c71aa2..cff5e2b6a644 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -574,8 +574,8 @@ export async function respond(request, options, manifest, state) { // via our own `fetch`, render a 404 page if (state.depth === 0) { // In local development, Chrome requests this file for its 'automatic workspace folders' feature, - // causing console spam. TODO should we instead respond with some actual data? - // https://chromium.googlesource.com/devtools/devtools-frontend/+/main/docs/ecosystem/automatic_workspace_folders.md + // causing console spam. If users want to serve this file they can install + // https://github.com/ChromeDevTools/vite-plugin-devtools-json if (DEV && event.url.pathname === '/.well-known/appspecific/com.chrome.devtools.json') { return new Response(undefined, { status: 404 }); } From 803ce3aadc7f17044e8b910904f16356796e4c16 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 5 Jun 2025 11:22:24 -0400 Subject: [PATCH 4/4] print link to vite plugin --- packages/kit/src/runtime/server/respond.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index cff5e2b6a644..783c7d0ee65a 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -51,6 +51,8 @@ const page_methods = new Set(['GET', 'HEAD', 'POST']); const allowed_page_methods = new Set(['GET', 'HEAD', 'OPTIONS']); +let warned_on_devtools_json_request = false; + /** * @param {Request} request * @param {import('types').SSROptions} options @@ -577,6 +579,14 @@ export async function respond(request, options, manifest, state) { // causing console spam. If users want to serve this file they can install // https://github.com/ChromeDevTools/vite-plugin-devtools-json if (DEV && event.url.pathname === '/.well-known/appspecific/com.chrome.devtools.json') { + if (!warned_on_devtools_json_request) { + console.warn( + `\nGoogle Chrome is requesting ${event.url.pathname} to automatically configure devtools project settings. To serve this file, add this plugin to your Vite config:\n\nhttps://github.com/ChromeDevTools/vite-plugin-devtools-json\n` + ); + + warned_on_devtools_json_request = true; + } + return new Response(undefined, { status: 404 }); }