From f04c898689886c48bde3e43c742d484f6c2d281f Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 25 Apr 2022 15:32:06 -0400 Subject: [PATCH] remove try-catch around server.respond --- .changeset/brave-rabbits-provide.md | 7 ++ .../adapter-cloudflare-workers/files/entry.js | 45 ++++----- packages/adapter-cloudflare/src/worker.js | 92 +++++++++---------- packages/adapter-netlify/src/edge.js | 22 ++--- 4 files changed, 77 insertions(+), 89 deletions(-) create mode 100644 .changeset/brave-rabbits-provide.md diff --git a/.changeset/brave-rabbits-provide.md b/.changeset/brave-rabbits-provide.md new file mode 100644 index 000000000000..e91118e58b9c --- /dev/null +++ b/.changeset/brave-rabbits-provide.md @@ -0,0 +1,7 @@ +--- +'@sveltejs/adapter-cloudflare': patch +'@sveltejs/adapter-cloudflare-workers': patch +'@sveltejs/adapter-netlify': patch +--- + +[breaking] Remove try-catch around server.respond diff --git a/packages/adapter-cloudflare-workers/files/entry.js b/packages/adapter-cloudflare-workers/files/entry.js index 96af27c22634..2d2a5d32c0cf 100644 --- a/packages/adapter-cloudflare-workers/files/entry.js +++ b/packages/adapter-cloudflare-workers/files/entry.js @@ -60,16 +60,12 @@ export default { } // dynamically-generated pages - try { - return await server.respond(req, { - platform: { env, context }, - getClientAddress() { - return req.headers.get('cf-connecting-ip'); - } - }); - } catch (e) { - return new Response('Error rendering route: ' + (e.message || e.toString()), { status: 500 }); - } + return await server.respond(req, { + platform: { env, context }, + getClientAddress() { + return req.headers.get('cf-connecting-ip'); + } + }); } }; @@ -79,24 +75,19 @@ export default { * @param {any} context */ async function get_asset_from_kv(req, env, context, map = mapRequestToAsset) { - try { - return await getAssetFromKV( - { - request: req, - waitUntil(promise) { - return context.waitUntil(promise); - } - }, - { - ASSET_NAMESPACE: env.__STATIC_CONTENT, - ASSET_MANIFEST: static_asset_manifest, - mapRequestToAsset: map + return await getAssetFromKV( + { + request: req, + waitUntil(promise) { + return context.waitUntil(promise); } - ); - } catch (e) { - const status = is_error(e.status) ? e.status : 500; - return new Response(e.message || e.toString(), { status }); - } + }, + { + ASSET_NAMESPACE: env.__STATIC_CONTENT, + ASSET_MANIFEST: static_asset_manifest, + mapRequestToAsset: map + } + ); } /** diff --git a/packages/adapter-cloudflare/src/worker.js b/packages/adapter-cloudflare/src/worker.js index af770b93222d..ad7c4643034d 100644 --- a/packages/adapter-cloudflare/src/worker.js +++ b/packages/adapter-cloudflare/src/worker.js @@ -9,62 +9,58 @@ const prefix = `/${manifest.appDir}/`; /** @type {import('worktop/cfw').Module.Worker<{ ASSETS: import('worktop/cfw.durable').Durable.Object }>} */ const worker = { async fetch(req, env, context) { - try { - // skip cache if "cache-control: no-cache" in request - let pragma = req.headers.get('cache-control') || ''; - let res = !pragma.includes('no-cache') && (await Cache.lookup(req)); - if (res) return res; + // skip cache if "cache-control: no-cache" in request + let pragma = req.headers.get('cache-control') || ''; + let res = !pragma.includes('no-cache') && (await Cache.lookup(req)); + if (res) return res; - let { pathname } = new URL(req.url); + let { pathname } = new URL(req.url); - // static assets - if (pathname.startsWith(prefix)) { - res = await env.ASSETS.fetch(req); + // static assets + if (pathname.startsWith(prefix)) { + res = await env.ASSETS.fetch(req); - res = new Response(res.body, { - headers: { - // include original cache headers, minus cache-control which - // is overridden, and etag which is no longer useful - 'cache-control': 'public, immutable, max-age=31536000', - 'content-type': res.headers.get('content-type'), - 'x-robots-tag': 'noindex' - } - }); - } else { - // prerendered pages and index.html files - pathname = pathname.replace(/\/$/, '') || '/'; - - let file = pathname.substring(1); - - try { - file = decodeURIComponent(file); - } catch (err) { - // ignore + res = new Response(res.body, { + headers: { + // include original cache headers, minus cache-control which + // is overridden, and etag which is no longer useful + 'cache-control': 'public, immutable, max-age=31536000', + 'content-type': res.headers.get('content-type'), + 'x-robots-tag': 'noindex' } + }); + } else { + // prerendered pages and index.html files + pathname = pathname.replace(/\/$/, '') || '/'; - if ( - manifest.assets.has(file) || - manifest.assets.has(file + '/index.html') || - prerendered.has(pathname) - ) { - res = await env.ASSETS.fetch(req); - } else { - // dynamically-generated pages - res = await server.respond(req, { - platform: { env, context }, - getClientAddress() { - return req.headers.get('cf-connecting-ip'); - } - }); - } + let file = pathname.substring(1); + + try { + file = decodeURIComponent(file); + } catch (err) { + // ignore } - // Writes to Cache only if allowed & specified - pragma = res.headers.get('cache-control'); - return pragma ? Cache.save(req, res, context) : res; - } catch (e) { - return new Response('Error rendering route: ' + (e.message || e.toString()), { status: 500 }); + if ( + manifest.assets.has(file) || + manifest.assets.has(file + '/index.html') || + prerendered.has(pathname) + ) { + res = await env.ASSETS.fetch(req); + } else { + // dynamically-generated pages + res = await server.respond(req, { + platform: { env, context }, + getClientAddress() { + return req.headers.get('cf-connecting-ip'); + } + }); + } } + + // Writes to Cache only if allowed & specified + pragma = res.headers.get('cache-control'); + return pragma ? Cache.save(req, res, context) : res; } }; diff --git a/packages/adapter-netlify/src/edge.js b/packages/adapter-netlify/src/edge.js index 6a8e78fee8c7..89d2eb7e58ec 100644 --- a/packages/adapter-netlify/src/edge.js +++ b/packages/adapter-netlify/src/edge.js @@ -9,24 +9,18 @@ const prefix = `/${manifest.appDir}/`; * @param { any } context * @returns { Promise } */ -export default async function handler(request, context) { +export default function handler(request, context) { if (is_static_file(request)) { // Static files can skip the handler return; } - try { - const response = await server.respond(request, { - platform: { context }, - getClientAddress() { - return request.headers.get('x-nf-client-connection-ip'); - } - }); - return response; - } catch (error) { - return new Response('Error rendering route:' + (error.message || error.toString()), { - status: 500 - }); - } + + return server.respond(request, { + platform: { context }, + getClientAddress() { + return request.headers.get('x-nf-client-connection-ip'); + } + }); } /**