Skip to content

Commit bc905f2

Browse files
Rich-Harrisf5io
andauthored
Fix adapter-cloudflare-workers prerendering bug (#4626)
* feat: allow adapter-cloudflare-workers to take esbuild options * chore: add changeset * fix: prerendered page resolution * chore: update changeset * chore: run prettier * update * Update .changeset/chilly-cars-battle.md Co-authored-by: Joe Harlow <[email protected]>
1 parent e5f8065 commit bc905f2

File tree

4 files changed

+23
-9
lines changed

4 files changed

+23
-9
lines changed

.changeset/chilly-cars-battle.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/adapter-cloudflare-workers': patch
3+
---
4+
5+
- Fix an issue related to prerendered pages incorrectly resolving in @sveltejs/adapter-cloudflare-workers

packages/adapter-cloudflare-workers/ambient.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ declare module 'MANIFEST' {
66
import { SSRManifest } from '@sveltejs/kit';
77

88
export const manifest: SSRManifest;
9-
export const prerendered: Set<string>;
9+
export const prerendered: Map<string, { file: string }>;
1010
}
1111

1212
declare module '__STATIC_CONTENT_MANIFEST' {

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Server } from 'SERVER';
22
import { manifest, prerendered } from 'MANIFEST';
3-
import { getAssetFromKV } from '@cloudflare/kv-asset-handler';
3+
import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler';
44
import static_asset_manifest_json from '__STATIC_CONTENT_MANIFEST';
55
const static_asset_manifest = JSON.parse(static_asset_manifest_json);
66

@@ -21,9 +21,8 @@ export default {
2121
if (url.pathname.startsWith(prefix)) {
2222
/** @type {Response} */
2323
const res = await get_asset_from_kv(req, env, context);
24-
if (is_error(res.status)) {
25-
return res;
26-
}
24+
if (is_error(res.status)) return res;
25+
2726
return new Response(res.body, {
2827
headers: {
2928
// include original cache headers, minus cache-control which
@@ -50,7 +49,14 @@ export default {
5049
manifest.assets.has(file + '/index.html') ||
5150
prerendered.has(pathname || '/')
5251
) {
53-
return get_asset_from_kv(req, env, context);
52+
return get_asset_from_kv(req, env, context, (request, options) => {
53+
if (prerendered.has(pathname || '/')) {
54+
url.pathname = '/' + prerendered.get(pathname || '/').file;
55+
return new Request(url.toString(), request);
56+
}
57+
58+
return mapRequestToAsset(request, options);
59+
});
5460
}
5561

5662
// dynamically-generated pages
@@ -72,7 +78,7 @@ export default {
7278
* @param {any} env
7379
* @param {any} context
7480
*/
75-
async function get_asset_from_kv(req, env, context) {
81+
async function get_asset_from_kv(req, env, context, map = mapRequestToAsset) {
7682
try {
7783
return await getAssetFromKV(
7884
{
@@ -83,7 +89,8 @@ async function get_asset_from_kv(req, env, context) {
8389
},
8490
{
8591
ASSET_NAMESPACE: env.__STATIC_CONTENT,
86-
ASSET_MANIFEST: static_asset_manifest
92+
ASSET_MANIFEST: static_asset_manifest,
93+
mapRequestToAsset: map
8794
}
8895
);
8996
} catch (e) {

packages/adapter-cloudflare-workers/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ export default function (options = {}) {
4949
`${tmp}/manifest.js`,
5050
`export const manifest = ${builder.generateManifest({
5151
relativePath
52-
})};\n\nexport const prerendered = new Set(${JSON.stringify(builder.prerendered.paths)});\n`
52+
})};\n\nexport const prerendered = new Map(${JSON.stringify(
53+
Array.from(builder.prerendered.pages.entries())
54+
)});\n`
5355
);
5456

5557
await esbuild.build({

0 commit comments

Comments
 (0)