Skip to content

Commit f9c3030

Browse files
authored
remove try-catch around server.respond (#4738)
1 parent 2afb8ef commit f9c3030

File tree

4 files changed

+77
-89
lines changed

4 files changed

+77
-89
lines changed

.changeset/brave-rabbits-provide.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@sveltejs/adapter-cloudflare': patch
3+
'@sveltejs/adapter-cloudflare-workers': patch
4+
'@sveltejs/adapter-netlify': patch
5+
---
6+
7+
[breaking] Remove try-catch around server.respond

packages/adapter-cloudflare-workers/files/entry.js

+18-27
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,12 @@ export default {
6060
}
6161

6262
// dynamically-generated pages
63-
try {
64-
return await server.respond(req, {
65-
platform: { env, context },
66-
getClientAddress() {
67-
return req.headers.get('cf-connecting-ip');
68-
}
69-
});
70-
} catch (e) {
71-
return new Response('Error rendering route: ' + (e.message || e.toString()), { status: 500 });
72-
}
63+
return await server.respond(req, {
64+
platform: { env, context },
65+
getClientAddress() {
66+
return req.headers.get('cf-connecting-ip');
67+
}
68+
});
7369
}
7470
};
7571

@@ -79,24 +75,19 @@ export default {
7975
* @param {any} context
8076
*/
8177
async function get_asset_from_kv(req, env, context, map = mapRequestToAsset) {
82-
try {
83-
return await getAssetFromKV(
84-
{
85-
request: req,
86-
waitUntil(promise) {
87-
return context.waitUntil(promise);
88-
}
89-
},
90-
{
91-
ASSET_NAMESPACE: env.__STATIC_CONTENT,
92-
ASSET_MANIFEST: static_asset_manifest,
93-
mapRequestToAsset: map
78+
return await getAssetFromKV(
79+
{
80+
request: req,
81+
waitUntil(promise) {
82+
return context.waitUntil(promise);
9483
}
95-
);
96-
} catch (e) {
97-
const status = is_error(e.status) ? e.status : 500;
98-
return new Response(e.message || e.toString(), { status });
99-
}
84+
},
85+
{
86+
ASSET_NAMESPACE: env.__STATIC_CONTENT,
87+
ASSET_MANIFEST: static_asset_manifest,
88+
mapRequestToAsset: map
89+
}
90+
);
10091
}
10192

10293
/**

packages/adapter-cloudflare/src/worker.js

+44-48
Original file line numberDiff line numberDiff line change
@@ -9,62 +9,58 @@ const prefix = `/${manifest.appDir}/`;
99
/** @type {import('worktop/cfw').Module.Worker<{ ASSETS: import('worktop/cfw.durable').Durable.Object }>} */
1010
const worker = {
1111
async fetch(req, env, context) {
12-
try {
13-
// skip cache if "cache-control: no-cache" in request
14-
let pragma = req.headers.get('cache-control') || '';
15-
let res = !pragma.includes('no-cache') && (await Cache.lookup(req));
16-
if (res) return res;
12+
// skip cache if "cache-control: no-cache" in request
13+
let pragma = req.headers.get('cache-control') || '';
14+
let res = !pragma.includes('no-cache') && (await Cache.lookup(req));
15+
if (res) return res;
1716

18-
let { pathname } = new URL(req.url);
17+
let { pathname } = new URL(req.url);
1918

20-
// static assets
21-
if (pathname.startsWith(prefix)) {
22-
res = await env.ASSETS.fetch(req);
19+
// static assets
20+
if (pathname.startsWith(prefix)) {
21+
res = await env.ASSETS.fetch(req);
2322

24-
res = new Response(res.body, {
25-
headers: {
26-
// include original cache headers, minus cache-control which
27-
// is overridden, and etag which is no longer useful
28-
'cache-control': 'public, immutable, max-age=31536000',
29-
'content-type': res.headers.get('content-type'),
30-
'x-robots-tag': 'noindex'
31-
}
32-
});
33-
} else {
34-
// prerendered pages and index.html files
35-
pathname = pathname.replace(/\/$/, '') || '/';
36-
37-
let file = pathname.substring(1);
38-
39-
try {
40-
file = decodeURIComponent(file);
41-
} catch (err) {
42-
// ignore
23+
res = new Response(res.body, {
24+
headers: {
25+
// include original cache headers, minus cache-control which
26+
// is overridden, and etag which is no longer useful
27+
'cache-control': 'public, immutable, max-age=31536000',
28+
'content-type': res.headers.get('content-type'),
29+
'x-robots-tag': 'noindex'
4330
}
31+
});
32+
} else {
33+
// prerendered pages and index.html files
34+
pathname = pathname.replace(/\/$/, '') || '/';
4435

45-
if (
46-
manifest.assets.has(file) ||
47-
manifest.assets.has(file + '/index.html') ||
48-
prerendered.has(pathname)
49-
) {
50-
res = await env.ASSETS.fetch(req);
51-
} else {
52-
// dynamically-generated pages
53-
res = await server.respond(req, {
54-
platform: { env, context },
55-
getClientAddress() {
56-
return req.headers.get('cf-connecting-ip');
57-
}
58-
});
59-
}
36+
let file = pathname.substring(1);
37+
38+
try {
39+
file = decodeURIComponent(file);
40+
} catch (err) {
41+
// ignore
6042
}
6143

62-
// Writes to Cache only if allowed & specified
63-
pragma = res.headers.get('cache-control');
64-
return pragma ? Cache.save(req, res, context) : res;
65-
} catch (e) {
66-
return new Response('Error rendering route: ' + (e.message || e.toString()), { status: 500 });
44+
if (
45+
manifest.assets.has(file) ||
46+
manifest.assets.has(file + '/index.html') ||
47+
prerendered.has(pathname)
48+
) {
49+
res = await env.ASSETS.fetch(req);
50+
} else {
51+
// dynamically-generated pages
52+
res = await server.respond(req, {
53+
platform: { env, context },
54+
getClientAddress() {
55+
return req.headers.get('cf-connecting-ip');
56+
}
57+
});
58+
}
6759
}
60+
61+
// Writes to Cache only if allowed & specified
62+
pragma = res.headers.get('cache-control');
63+
return pragma ? Cache.save(req, res, context) : res;
6864
}
6965
};
7066

packages/adapter-netlify/src/edge.js

+8-14
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,18 @@ const prefix = `/${manifest.appDir}/`;
99
* @param { any } context
1010
* @returns { Promise<Response> }
1111
*/
12-
export default async function handler(request, context) {
12+
export default function handler(request, context) {
1313
if (is_static_file(request)) {
1414
// Static files can skip the handler
1515
return;
1616
}
17-
try {
18-
const response = await server.respond(request, {
19-
platform: { context },
20-
getClientAddress() {
21-
return request.headers.get('x-nf-client-connection-ip');
22-
}
23-
});
24-
return response;
25-
} catch (error) {
26-
return new Response('Error rendering route:' + (error.message || error.toString()), {
27-
status: 500
28-
});
29-
}
17+
18+
return server.respond(request, {
19+
platform: { context },
20+
getClientAddress() {
21+
return request.headers.get('x-nf-client-connection-ip');
22+
}
23+
});
3024
}
3125

3226
/**

0 commit comments

Comments
 (0)