diff --git a/.changeset/moody-baboons-drum.md b/.changeset/moody-baboons-drum.md new file mode 100644 index 000000000000..b224830500b6 --- /dev/null +++ b/.changeset/moody-baboons-drum.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-cloudflare': patch +--- + +fix: deprecate `platform.context` in favor of `platform.ctx` to align with Cloudflare's naming convention diff --git a/.prettierrc b/.prettierrc index 0fd4cd0a2cc1..fc699c71d960 100644 --- a/.prettierrc +++ b/.prettierrc @@ -26,11 +26,13 @@ "**/.custom-out-dir/**", "**/build/**", "**/test-results/**", + "**/.wrangler/**", "documentation/**/*.md", "packages/package/test/fixtures/**/expected/**/*", "packages/package/test/watch/expected/**/*", "packages/package/test/watch/package/**/*", - "packages/kit/src/core/postbuild/fixtures/**/*" + "packages/kit/src/core/postbuild/fixtures/**/*", + "packages/adapter-cloudflare/test/apps/workers/dist/**/*" ], "options": { "rangeEnd": 0 diff --git a/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md b/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md index 665214fb718b..0e438e5b0f12 100644 --- a/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md +++ b/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md @@ -122,7 +122,7 @@ Functions contained in the [`/functions` directory](https://developers.cloudflar ## Runtime APIs -The [`env`](https://developers.cloudflare.com/workers/runtime-apis/fetch-event#parameters) object contains your project's [bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/), which consist of KV/DO namespaces, etc. It is passed to SvelteKit via the `platform` property, along with [`context`](https://developers.cloudflare.com/workers/runtime-apis/context/), [`caches`](https://developers.cloudflare.com/workers/runtime-apis/cache/), and [`cf`](https://developers.cloudflare.com/workers/runtime-apis/request/#incomingrequestcfproperties), meaning that you can access it in hooks and endpoints: +The [`env`](https://developers.cloudflare.com/workers/runtime-apis/fetch-event#parameters) object contains your project's [bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/), which consist of KV/DO namespaces, etc. It is passed to SvelteKit via the `platform` property, along with [`ctx`](https://developers.cloudflare.com/workers/runtime-apis/context/), [`caches`](https://developers.cloudflare.com/workers/runtime-apis/cache/), and [`cf`](https://developers.cloudflare.com/workers/runtime-apis/request/#incomingrequestcfproperties), meaning that you can access it in hooks and endpoints: ```js // @errors: 7031 diff --git a/documentation/docs/25-build-and-deploy/70-adapter-cloudflare-workers.md b/documentation/docs/25-build-and-deploy/70-adapter-cloudflare-workers.md index 942f57fed034..12042800d5e5 100644 --- a/documentation/docs/25-build-and-deploy/70-adapter-cloudflare-workers.md +++ b/documentation/docs/25-build-and-deploy/70-adapter-cloudflare-workers.md @@ -77,7 +77,7 @@ wrangler deploy ## Runtime APIs -The [`env`](https://developers.cloudflare.com/workers/runtime-apis/fetch-event#parameters) object contains your project's [bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/), which consist of KV/DO namespaces, etc. It is passed to SvelteKit via the `platform` property, along with [`context`](https://developers.cloudflare.com/workers/runtime-apis/context/), [`caches`](https://developers.cloudflare.com/workers/runtime-apis/cache/), and [`cf`](https://developers.cloudflare.com/workers/runtime-apis/request/#incomingrequestcfproperties), meaning that you can access it in hooks and endpoints: +The [`env`](https://developers.cloudflare.com/workers/runtime-apis/fetch-event#parameters) object contains your project's [bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/), which consist of KV/DO namespaces, etc. It is passed to SvelteKit via the `platform` property, along with [`ctx`](https://developers.cloudflare.com/workers/runtime-apis/context/), [`caches`](https://developers.cloudflare.com/workers/runtime-apis/cache/), and [`cf`](https://developers.cloudflare.com/workers/runtime-apis/request/#incomingrequestcfproperties), meaning that you can access it in hooks and endpoints: ```js // @errors: 7031 diff --git a/packages/adapter-cloudflare/ambient.d.ts b/packages/adapter-cloudflare/ambient.d.ts index 9bee6700f8ac..d99dd15ab6cc 100644 --- a/packages/adapter-cloudflare/ambient.d.ts +++ b/packages/adapter-cloudflare/ambient.d.ts @@ -8,6 +8,8 @@ declare global { namespace App { export interface Platform { env: unknown; + ctx: ExecutionContext; + /** @deprecated Use `ctx` instead */ context: ExecutionContext; caches: CacheStorage; cf?: IncomingRequestCfProperties; diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index 5bb705f6a6ae..266265556369 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -135,7 +135,8 @@ export default function (options = {}) { const proxy = await getPlatformProxy(options.platformProxy); const platform = /** @type {App.Platform} */ ({ env: proxy.env, - context: proxy.ctx, + ctx: proxy.ctx, + context: proxy.ctx, // deprecated in favor of ctx caches: proxy.caches, cf: proxy.cf }); diff --git a/packages/adapter-cloudflare/src/worker.js b/packages/adapter-cloudflare/src/worker.js index a2ea423c1653..7a89657b3997 100644 --- a/packages/adapter-cloudflare/src/worker.js +++ b/packages/adapter-cloudflare/src/worker.js @@ -13,10 +13,10 @@ export default { /** * @param {Request} req * @param {{ ASSETS: { fetch: typeof fetch } }} env - * @param {ExecutionContext} context + * @param {ExecutionContext} ctx * @returns {Promise} */ - async fetch(req, env, context) { + async fetch(req, env, ctx) { await server.init({ // @ts-expect-error env contains environment variables and bindings env @@ -70,7 +70,8 @@ export default { res = await server.respond(req, { platform: { env, - context, + ctx, + context: ctx, // deprecated in favor of ctx // @ts-expect-error webworker types from worktop are not compatible with Cloudflare Workers types caches, // @ts-expect-error the type is correct but ts is confused because platform.cf uses the type from index.ts while req.cf uses the type from index.d.ts @@ -85,6 +86,6 @@ export default { // write to `Cache` only if response is not an error, // let `Cache.save` handle the Cache-Control and Vary headers pragma = res.headers.get('cache-control') || ''; - return pragma && res.status < 400 ? Cache.save(req, res, context) : res; + return pragma && res.status < 400 ? Cache.save(req, res, ctx) : res; } }; diff --git a/packages/adapter-cloudflare/test/apps/pages/src/routes/+page.server.js b/packages/adapter-cloudflare/test/apps/pages/src/routes/+page.server.js index 2e1aac593126..0eeb7d398ffd 100644 --- a/packages/adapter-cloudflare/test/apps/pages/src/routes/+page.server.js +++ b/packages/adapter-cloudflare/test/apps/pages/src/routes/+page.server.js @@ -1,3 +1,4 @@ +// this tests that Wrangler can correctly resolve and bundle server-side dependencies import { sum } from 'server-side-dep'; export function load() { diff --git a/packages/adapter-cloudflare/test/apps/pages/test/test.js b/packages/adapter-cloudflare/test/apps/pages/test/test.js index aab7cbca568a..0619c030bbc2 100644 --- a/packages/adapter-cloudflare/test/apps/pages/test/test.js +++ b/packages/adapter-cloudflare/test/apps/pages/test/test.js @@ -1,6 +1,6 @@ import { expect, test } from '@playwright/test'; -test('worker works', async ({ page }) => { +test('worker', async ({ page }) => { await page.goto('/'); await expect(page.locator('h1')).toContainText('Sum: 3'); }); diff --git a/packages/adapter-cloudflare/test/apps/workers/package.json b/packages/adapter-cloudflare/test/apps/workers/package.json index b32f21342585..35398cb300a4 100644 --- a/packages/adapter-cloudflare/test/apps/workers/package.json +++ b/packages/adapter-cloudflare/test/apps/workers/package.json @@ -7,11 +7,14 @@ "build": "vite build", "preview": "wrangler dev dist/index.js", "prepare": "svelte-kit sync || echo ''", - "test": "playwright test" + "test:dev": "cross-env DEV=true playwright test", + "test:build": "playwright test", + "test": "pnpm test:dev && pnpm test:build" }, "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", + "cross-env": "catalog:", "server-side-dep": "file:server-side-dep", "svelte": "^5.23.1", "vite": "catalog:", diff --git a/packages/adapter-cloudflare/test/apps/workers/src/app.d.ts b/packages/adapter-cloudflare/test/apps/workers/src/app.d.ts new file mode 100644 index 000000000000..101a9db0b8bf --- /dev/null +++ b/packages/adapter-cloudflare/test/apps/workers/src/app.d.ts @@ -0,0 +1,3 @@ +// TODO: remove this in 3.0 once svelte.config.js is included by the generated tsconfig.json +// this ensures we get the ambient types from the adapter +import '../../../../index.js'; diff --git a/packages/adapter-cloudflare/test/apps/workers/src/routes/+page.server.js b/packages/adapter-cloudflare/test/apps/workers/src/routes/+page.server.js index 2e1aac593126..0eeb7d398ffd 100644 --- a/packages/adapter-cloudflare/test/apps/workers/src/routes/+page.server.js +++ b/packages/adapter-cloudflare/test/apps/workers/src/routes/+page.server.js @@ -1,3 +1,4 @@ +// this tests that Wrangler can correctly resolve and bundle server-side dependencies import { sum } from 'server-side-dep'; export function load() { diff --git a/packages/adapter-cloudflare/test/apps/workers/src/routes/ctx/+server.js b/packages/adapter-cloudflare/test/apps/workers/src/routes/ctx/+server.js new file mode 100644 index 000000000000..e26ae2cbbd71 --- /dev/null +++ b/packages/adapter-cloudflare/test/apps/workers/src/routes/ctx/+server.js @@ -0,0 +1,3 @@ +export function GET({ platform }) { + return new Response(platform?.ctx.waitUntil ? 'ctx works' : 'ctx does not work'); +} diff --git a/packages/adapter-cloudflare/test/apps/workers/test/test.js b/packages/adapter-cloudflare/test/apps/workers/test/test.js index aab7cbca568a..f938d3cf5bf2 100644 --- a/packages/adapter-cloudflare/test/apps/workers/test/test.js +++ b/packages/adapter-cloudflare/test/apps/workers/test/test.js @@ -1,6 +1,11 @@ import { expect, test } from '@playwright/test'; -test('worker works', async ({ page }) => { +test('worker', async ({ page }) => { await page.goto('/'); await expect(page.locator('h1')).toContainText('Sum: 3'); }); + +test('ctx', async ({ request }) => { + const res = await request.get('/ctx'); + expect(await res.text()).toBe('ctx works'); +}); diff --git a/packages/adapter-cloudflare/test/utils.js b/packages/adapter-cloudflare/test/utils.js index 719822d7aa53..3b15f891cf0a 100644 --- a/packages/adapter-cloudflare/test/utils.js +++ b/packages/adapter-cloudflare/test/utils.js @@ -7,8 +7,8 @@ export const config = { // generous timeouts on CI timeout: process.env.CI ? 45000 : 15000, webServer: { - command: 'pnpm build && pnpm preview', - port: 8787 + command: process.env.DEV ? 'pnpm dev' : 'pnpm build && pnpm preview', + port: process.env.DEV ? 5173 : 8787 }, retries: process.env.CI ? 2 : 0, projects: [ diff --git a/packages/kit/test/apps/amp/package.json b/packages/kit/test/apps/amp/package.json index c83e16224c82..5d1004241cb5 100644 --- a/packages/kit/test/apps/amp/package.json +++ b/packages/kit/test/apps/amp/package.json @@ -16,7 +16,7 @@ "@sveltejs/amp": "workspace:^", "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "dropcss": "^1.0.16", "svelte": "^5.23.1", "svelte-check": "^4.1.1", diff --git a/packages/kit/test/apps/basics/package.json b/packages/kit/test/apps/basics/package.json index dac246c3e953..4bcdd9c87f1b 100644 --- a/packages/kit/test/apps/basics/package.json +++ b/packages/kit/test/apps/basics/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "redirect-pkg": "file:./_test_dependencies/redirect-pkg", diff --git a/packages/kit/test/apps/dev-only/package.json b/packages/kit/test/apps/dev-only/package.json index 47a595c06089..4de5b18df866 100644 --- a/packages/kit/test/apps/dev-only/package.json +++ b/packages/kit/test/apps/dev-only/package.json @@ -13,7 +13,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "e2e-test-dep-error": "file:./_test_dependencies/cjs-only", "e2e-test-dep-hooks": "file:./_test_dependencies/cjs-only", "e2e-test-dep-hooks-client": "file:./_test_dependencies/cjs-only", diff --git a/packages/kit/test/apps/embed/package.json b/packages/kit/test/apps/embed/package.json index abb145d2e0f0..f7b23562acc5 100644 --- a/packages/kit/test/apps/embed/package.json +++ b/packages/kit/test/apps/embed/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "typescript": "^5.5.4", diff --git a/packages/kit/test/apps/hash-based-routing/package.json b/packages/kit/test/apps/hash-based-routing/package.json index b5a261cd2bf4..95d2828cc90e 100644 --- a/packages/kit/test/apps/hash-based-routing/package.json +++ b/packages/kit/test/apps/hash-based-routing/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "typescript": "^5.5.4", diff --git a/packages/kit/test/apps/no-ssr/package.json b/packages/kit/test/apps/no-ssr/package.json index c9eac729dc8b..75ba8628c753 100644 --- a/packages/kit/test/apps/no-ssr/package.json +++ b/packages/kit/test/apps/no-ssr/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "typescript": "^5.5.4", diff --git a/packages/kit/test/apps/options-2/package.json b/packages/kit/test/apps/options-2/package.json index ecbe6f9ed672..9a875ac5163c 100644 --- a/packages/kit/test/apps/options-2/package.json +++ b/packages/kit/test/apps/options-2/package.json @@ -16,7 +16,7 @@ "@sveltejs/adapter-node": "workspace:^", "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "typescript": "^5.5.4", diff --git a/packages/kit/test/apps/options/package.json b/packages/kit/test/apps/options/package.json index 7d160dc0ce43..df1618f6b07f 100644 --- a/packages/kit/test/apps/options/package.json +++ b/packages/kit/test/apps/options/package.json @@ -18,7 +18,7 @@ "@fontsource/libre-barcode-128-text": "^5.1.0", "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "typescript": "^5.5.4", diff --git a/packages/kit/test/apps/prerendered-app-error-pages/package.json b/packages/kit/test/apps/prerendered-app-error-pages/package.json index 5ace86cb671d..832d0316979e 100644 --- a/packages/kit/test/apps/prerendered-app-error-pages/package.json +++ b/packages/kit/test/apps/prerendered-app-error-pages/package.json @@ -17,7 +17,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "typescript": "^5.5.4", diff --git a/packages/kit/test/apps/writes/package.json b/packages/kit/test/apps/writes/package.json index d101e1a44de7..0019074f72f7 100644 --- a/packages/kit/test/apps/writes/package.json +++ b/packages/kit/test/apps/writes/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "typescript": "^5.5.4", diff --git a/packages/kit/test/build-errors/apps/private-static-env/package.json b/packages/kit/test/build-errors/apps/private-static-env/package.json index 5fa56f19c9e8..41f544cc045d 100644 --- a/packages/kit/test/build-errors/apps/private-static-env/package.json +++ b/packages/kit/test/build-errors/apps/private-static-env/package.json @@ -13,7 +13,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "cross-env": "^7.0.3", + "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", "typescript": "^5.5.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 484df1fd429e..5cdc8481c3ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,6 +12,9 @@ catalogs: '@sveltejs/vite-plugin-svelte': specifier: ^6.0.0-next.0 version: 6.0.0-next.0 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 vite: specifier: ^6.3.5 version: 6.3.5 @@ -123,6 +126,9 @@ importers: '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) + cross-env: + specifier: 'catalog:' + version: 7.0.3 server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/workers/server-side-dep @@ -459,7 +465,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 dropcss: specifier: ^1.0.16 @@ -486,7 +492,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 redirect-pkg: specifier: file:./_test_dependencies/redirect-pkg @@ -519,7 +525,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 e2e-test-dep-error: specifier: file:./_test_dependencies/cjs-only @@ -573,7 +579,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 svelte: specifier: ^5.23.1 @@ -597,7 +603,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 svelte: specifier: ^5.23.1 @@ -621,7 +627,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 svelte: specifier: ^5.23.1 @@ -648,7 +654,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 svelte: specifier: ^5.23.1 @@ -675,7 +681,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 svelte: specifier: ^5.23.1 @@ -699,7 +705,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 svelte: specifier: ^5.23.1 @@ -723,7 +729,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 svelte: specifier: ^5.23.1 @@ -867,7 +873,7 @@ importers: specifier: 'catalog:' version: 6.0.0-next.0(svelte@5.23.1)(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) cross-env: - specifier: ^7.0.3 + specifier: 'catalog:' version: 7.0.3 svelte: specifier: ^5.23.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 54880d83fa33..22100cc6619e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,5 +14,6 @@ packages: catalog: '@playwright/test': '^1.51.1' '@sveltejs/vite-plugin-svelte': '^6.0.0-next.0' + 'cross-env': '^7.0.3' 'vitest': '^3.2.3' 'vite': '^6.3.5' \ No newline at end of file