diff --git a/.changeset/dry-mirrors-shout.md b/.changeset/dry-mirrors-shout.md new file mode 100644 index 000000000000..9aa59e115c6f --- /dev/null +++ b/.changeset/dry-mirrors-shout.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/adapter-cloudflare-workers": patch +"@sveltejs/adapter-cloudflare": patch +--- + +fix: correctly return static assets if base path is set diff --git a/packages/adapter-cloudflare-workers/files/entry.js b/packages/adapter-cloudflare-workers/files/entry.js index 5e2a6bdc14d0..c63b6482ad83 100644 --- a/packages/adapter-cloudflare-workers/files/entry.js +++ b/packages/adapter-cloudflare-workers/files/entry.js @@ -1,5 +1,5 @@ import { Server } from 'SERVER'; -import { manifest, prerendered } from 'MANIFEST'; +import { manifest, prerendered, base_path } from 'MANIFEST'; import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler'; import static_asset_manifest_json from '__STATIC_CONTENT_MANIFEST'; const static_asset_manifest = JSON.parse(static_asset_manifest_json); @@ -54,7 +54,7 @@ export default { // prerendered pages and /static files let is_static_asset = false; - const filename = stripped_pathname.substring(1); + const filename = stripped_pathname.slice(base_path.length + 1); if (filename) { is_static_asset = manifest.assets.has(filename) || manifest.assets.has(filename + '/index.html'); diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index 40962940bea3..5811f1d91a4f 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -73,9 +73,9 @@ export default function ({ config = 'wrangler.toml' } = {}) { writeFileSync( `${tmp}/manifest.js`, - `export const manifest = ${builder.generateManifest({ - relativePath - })};\n\nexport const prerendered = new Map(${JSON.stringify(prerendered_entries)});\n` + `export const manifest = ${builder.generateManifest({ relativePath })};\n\n` + + `export const prerendered = new Map(${JSON.stringify(prerendered_entries)});\n\n` + + `export const base_path = ${JSON.stringify(builder.config.kit.paths.base)};\n` ); const external = ['__STATIC_CONTENT_MANIFEST', 'cloudflare:*']; diff --git a/packages/adapter-cloudflare-workers/placeholders.d.ts b/packages/adapter-cloudflare-workers/placeholders.d.ts index 78ceb0e62887..3877ad52f4a5 100644 --- a/packages/adapter-cloudflare-workers/placeholders.d.ts +++ b/packages/adapter-cloudflare-workers/placeholders.d.ts @@ -7,6 +7,7 @@ declare module 'MANIFEST' { export const manifest: SSRManifest; export const prerendered: Map; + export const base_path: string; } declare module '__STATIC_CONTENT_MANIFEST' { diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index 30603c50030e..7d489ea4296d 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -52,7 +52,7 @@ export default function (options = {}) { `${tmp}/manifest.js`, `export const manifest = ${builder.generateManifest({ relativePath })};\n\n` + `export const prerendered = new Set(${JSON.stringify(builder.prerendered.paths)});\n\n` + - `export const app_path = ${JSON.stringify(builder.getAppPath())};\n` + `export const base_path = ${JSON.stringify(builder.config.kit.paths.base)};\n` ); writeFileSync( @@ -193,7 +193,7 @@ function get_routes_json(builder, assets, { include = ['/*'], exclude = ['' file === '_redirects' ) ) - .map((file) => `/${file}`); + .map((file) => `${builder.config.kit.paths.base}/${file}`); } if (rule === '') { diff --git a/packages/adapter-cloudflare/placeholders.d.ts b/packages/adapter-cloudflare/placeholders.d.ts index 9e0d2fd33dcd..6c79569f7f7f 100644 --- a/packages/adapter-cloudflare/placeholders.d.ts +++ b/packages/adapter-cloudflare/placeholders.d.ts @@ -8,4 +8,5 @@ declare module 'MANIFEST' { export const manifest: SSRManifest; export const prerendered: Set; export const app_path: string; + export const base_path: string; } diff --git a/packages/adapter-cloudflare/src/worker.js b/packages/adapter-cloudflare/src/worker.js index a1cef121090a..978c61a08ab8 100644 --- a/packages/adapter-cloudflare/src/worker.js +++ b/packages/adapter-cloudflare/src/worker.js @@ -1,11 +1,13 @@ import { Server } from 'SERVER'; -import { manifest, prerendered, app_path } from 'MANIFEST'; +import { manifest, prerendered, base_path } from 'MANIFEST'; import * as Cache from 'worktop/cfw.cache'; const server = new Server(manifest); -const immutable = `/${app_path}/immutable/`; -const version_file = `/${app_path}/version.json`; +const app_path = `/${manifest.appPath}`; + +const immutable = `${app_path}/immutable/`; +const version_file = `${app_path}/version.json`; /** @type {import('worktop/cfw').Module.Worker<{ ASSETS: import('worktop/cfw.durable').Durable.Object }>} */ const worker = { @@ -28,7 +30,7 @@ const worker = { // prerendered pages and /static files let is_static_asset = false; - const filename = stripped_pathname.substring(1); + const filename = stripped_pathname.slice(base_path.length + 1); if (filename) { is_static_asset = manifest.assets.has(filename) || manifest.assets.has(filename + '/index.html');