diff --git a/.changeset/new-donkeys-approve.md b/.changeset/new-donkeys-approve.md new file mode 100644 index 000000000000..2ae59dabf9d1 --- /dev/null +++ b/.changeset/new-donkeys-approve.md @@ -0,0 +1,5 @@ +--- +"@sveltejs/adapter-cloudflare": patch +--- + +fix: resolve the absolute path of the Wrangler config setting `assets.directory` in case the config file is in a different directory than the root project diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index a5d7bdcdfd95..fdbdf9a769ed 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -1,9 +1,10 @@ import { VERSION } from '@sveltejs/kit'; import { copyFileSync, existsSync, writeFileSync } from 'node:fs'; import path from 'node:path'; +import process from 'node:process'; import { fileURLToPath } from 'node:url'; -import { is_building_for_cloudflare_pages, validate_worker_settings } from './utils.js'; import { getPlatformProxy, unstable_readConfig } from 'wrangler'; +import { is_building_for_cloudflare_pages, validate_worker_settings } from './utils.js'; const name = '@sveltejs/adapter-cloudflare'; const [kit_major, kit_minor] = VERSION.split('.'); @@ -32,6 +33,7 @@ export default function (options = {}) { } const wrangler_config = validate_wrangler_config(options.config); + const building_for_cloudflare_pages = is_building_for_cloudflare_pages(wrangler_config); let dest = builder.getBuildDirectory('cloudflare'); @@ -48,7 +50,12 @@ export default function (options = {}) { worker_dest = wrangler_config.main; } if (wrangler_config.assets?.directory) { - dest = wrangler_config.assets.directory; + // wrangler doesn't resolve `assets.directory` to an absolute path unlike + // `main` and `pages_build_output_dir` so we need to do it ourselves here + const parent_dir = wrangler_config.configPath + ? path.dirname(path.resolve(wrangler_config.configPath)) + : process.cwd(); + dest = path.resolve(parent_dir, wrangler_config.assets.directory); } if (wrangler_config.assets?.binding) { assets_binding = wrangler_config.assets.binding; diff --git a/packages/adapter-cloudflare/test/apps/workers/config/wrangler.jsonc b/packages/adapter-cloudflare/test/apps/workers/config/wrangler.jsonc new file mode 100644 index 000000000000..0bf8a9db8c3a --- /dev/null +++ b/packages/adapter-cloudflare/test/apps/workers/config/wrangler.jsonc @@ -0,0 +1,10 @@ +// we've moved the wrangler config away from the root of the project +// to test that the adapter still resolves the paths correctly +{ + "$schema": "../node_modules/wrangler/config-schema.json", + "main": "../dist/index.js", + "assets": { + "directory": "../dist/public", + "binding": "ASSETS" + } +} diff --git a/packages/adapter-cloudflare/test/apps/workers/svelte.config.js b/packages/adapter-cloudflare/test/apps/workers/svelte.config.js index 20cd2b3ff5b8..26cd6a965908 100644 --- a/packages/adapter-cloudflare/test/apps/workers/svelte.config.js +++ b/packages/adapter-cloudflare/test/apps/workers/svelte.config.js @@ -3,7 +3,9 @@ import adapter from '../../../index.js'; /** @type {import('@sveltejs/kit').Config} */ const config = { kit: { - adapter: adapter() + adapter: adapter({ + config: 'config/wrangler.jsonc' + }) } }; diff --git a/packages/adapter-cloudflare/test/apps/workers/wrangler.jsonc b/packages/adapter-cloudflare/test/apps/workers/wrangler.jsonc deleted file mode 100644 index 1f2cb073f7b6..000000000000 --- a/packages/adapter-cloudflare/test/apps/workers/wrangler.jsonc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "main": "./dist/index.js", - "assets": { - "directory": "./dist/public", - "binding": "ASSETS" - } -}