Skip to content

Commit 497f616

Browse files
fix: correctly detect Cloudflare Workers when either main or assets key exists (#13844)
Co-authored-by: Ben McCann <[email protected]>
1 parent e5ce8bb commit 497f616

File tree

17 files changed

+792
-568
lines changed

17 files changed

+792
-568
lines changed

.changeset/happy-beers-remain.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/adapter-cloudflare': patch
3+
---
4+
5+
fix: correctly warn users when assets key is missing

packages/adapter-auto/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"devDependencies": {
4343
"@sveltejs/kit": "workspace:^",
4444
"@sveltejs/vite-plugin-svelte": "catalog:",
45-
"@types/node": "^18.19.48",
45+
"@types/node": "^18.19.119",
4646
"typescript": "^5.3.3",
4747
"vitest": "catalog:"
4848
},

packages/adapter-cloudflare/index.js

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { copyFileSync, existsSync, writeFileSync } from 'node:fs';
22
import path from 'node:path';
3-
import process from 'node:process';
43
import { fileURLToPath } from 'node:url';
4+
import { is_building_for_cloudflare_pages } from './utils.js';
55
import { getPlatformProxy, unstable_readConfig } from 'wrangler';
66

77
/** @type {import('./index.js').default} */
@@ -302,20 +302,6 @@ function validate_config(config_file = undefined) {
302302
return wrangler_config;
303303
}
304304

305-
/**
306-
* @param {import('wrangler').Unstable_Config} wrangler_config
307-
* @returns {boolean}
308-
*/
309-
function is_building_for_cloudflare_pages(wrangler_config) {
310-
return (
311-
!!process.env.CF_PAGES ||
312-
!wrangler_config.configPath ||
313-
!!wrangler_config.pages_build_output_dir ||
314-
!wrangler_config.main ||
315-
!wrangler_config.assets
316-
);
317-
}
318-
319305
/** @param {string} str */
320306
function posixify(str) {
321307
return str.replace(/\\/g, '/');

packages/adapter-cloudflare/package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@
3838
"format": "pnpm lint --write",
3939
"check": "tsc --skipLibCheck",
4040
"prepublishOnly": "pnpm build",
41-
"test": "pnpm build && pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test"
41+
"test:unit": "vitest run",
42+
"test:e2e": "pnpm build && pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test",
43+
"test": "pnpm test:unit && pnpm test:e2e"
4244
},
4345
"dependencies": {
4446
"@cloudflare/workers-types": "^4.20250507.0",
@@ -47,9 +49,10 @@
4749
"devDependencies": {
4850
"@playwright/test": "catalog:",
4951
"@sveltejs/kit": "workspace:^",
50-
"@types/node": "^18.19.48",
52+
"@types/node": "^18.19.119",
5153
"esbuild": "^0.25.4",
52-
"typescript": "^5.3.3"
54+
"typescript": "^5.3.3",
55+
"vitest": "catalog:"
5356
},
5457
"peerDependencies": {
5558
"@sveltejs/kit": "^2.0.0",

packages/adapter-cloudflare/tsconfig.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,12 @@
1515
"lib": ["es2021"],
1616
"types": ["@cloudflare/workers-types"]
1717
},
18-
"include": ["index.js", "utils.js", "test/utils.js", "internal.d.ts", "src/worker.js"]
18+
"include": [
19+
"index.js",
20+
"utils.js",
21+
"utils.spec.js",
22+
"test/utils.js",
23+
"internal.d.ts",
24+
"src/worker.js"
25+
]
1926
}

packages/adapter-cloudflare/utils.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import process from 'node:process';
2+
3+
/**
4+
* @param {import('wrangler').Unstable_Config} wrangler_config
5+
* @returns {boolean}
6+
*/
7+
export function is_building_for_cloudflare_pages(wrangler_config) {
8+
if (process.env.CF_PAGES || wrangler_config.pages_build_output_dir) {
9+
return true;
10+
}
11+
12+
if (wrangler_config.main || wrangler_config.assets) {
13+
return false;
14+
}
15+
16+
return true;
17+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { describe, test, vi, expect } from 'vitest';
2+
import { is_building_for_cloudflare_pages } from './utils.js';
3+
4+
describe('detects Cloudflare Pages project', () => {
5+
test('by default', () => {
6+
expect(
7+
is_building_for_cloudflare_pages(/** @type {import('wrangler').Unstable_Config} */ ({}))
8+
).toBe(true);
9+
});
10+
11+
test('CF_PAGES environment variable', () => {
12+
vi.stubEnv('CF_PAGES', '1');
13+
const result = is_building_for_cloudflare_pages(
14+
/** @type {import('wrangler').Unstable_Config} */ ({})
15+
);
16+
vi.unstubAllEnvs();
17+
expect(result).toBe(true);
18+
});
19+
20+
test('empty Wrangler configuration file', () => {
21+
expect(
22+
is_building_for_cloudflare_pages(
23+
/** @type {import('wrangler').Unstable_Config} */ ({
24+
configPath: 'wrangler.jsonc'
25+
})
26+
)
27+
).toBe(true);
28+
});
29+
30+
test('pages_build_output_dir config key', () => {
31+
expect(
32+
is_building_for_cloudflare_pages(
33+
/** @type {import('wrangler').Unstable_Config} */ ({
34+
configPath: 'wrangler.jsonc',
35+
pages_build_output_dir: 'dist'
36+
})
37+
)
38+
).toBe(true);
39+
});
40+
});
41+
42+
describe('detects Cloudflare Workers project', () => {
43+
test('main config key', () => {
44+
expect(
45+
is_building_for_cloudflare_pages(
46+
/** @type {import('wrangler').Unstable_Config} */ ({
47+
configPath: 'wrangler.jsonc',
48+
main: 'dist/index.js'
49+
})
50+
)
51+
).toBe(false);
52+
});
53+
54+
test('assets config key', () => {
55+
expect(
56+
is_building_for_cloudflare_pages(
57+
/** @type {import('wrangler').Unstable_Config} */ ({
58+
configPath: 'wrangler.jsonc',
59+
assets: {
60+
directory: 'dist/assets',
61+
binding: 'ASSETS'
62+
}
63+
})
64+
)
65+
).toBe(false);
66+
});
67+
});

packages/adapter-netlify/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"@rollup/plugin-node-resolve": "^16.0.0",
5353
"@sveltejs/kit": "workspace:^",
5454
"@sveltejs/vite-plugin-svelte": "catalog:",
55-
"@types/node": "^18.19.48",
55+
"@types/node": "^18.19.119",
5656
"@types/set-cookie-parser": "^2.4.7",
5757
"rollup": "^4.14.2",
5858
"typescript": "^5.3.3",

packages/adapter-node/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"@polka/url": "^1.0.0-next.28",
4646
"@sveltejs/kit": "workspace:^",
4747
"@sveltejs/vite-plugin-svelte": "catalog:",
48-
"@types/node": "^18.19.48",
48+
"@types/node": "^18.19.119",
4949
"polka": "^1.0.0-next.28",
5050
"sirv": "^3.0.0",
5151
"typescript": "^5.3.3",

packages/adapter-static/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"@playwright/test": "catalog:",
4343
"@sveltejs/kit": "workspace:^",
4444
"@sveltejs/vite-plugin-svelte": "catalog:",
45-
"@types/node": "^18.19.48",
45+
"@types/node": "^18.19.119",
4646
"sirv": "^3.0.0",
4747
"svelte": "^5.35.5",
4848
"typescript": "^5.3.3",

0 commit comments

Comments
 (0)