From 8daecc539e03cbe37521a4df4d9e367df6945a85 Mon Sep 17 00:00:00 2001 From: Chien Tran <70304839+chientrm@users.noreply.github.com> Date: Tue, 18 Jul 2023 22:47:03 +0700 Subject: [PATCH 01/26] make `cloudflare:email` as external --- packages/adapter-cloudflare/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index 484a4412b87c..8ad1c4c38ca4 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -25,7 +25,7 @@ "ambient.d.ts" ], "scripts": { - "build": "esbuild src/worker.js --bundle --outfile=files/worker.js --external:SERVER --external:MANIFEST --format=esm", + "build": "esbuild src/worker.js --bundle --outfile=files/worker.js --external:SERVER --external:MANIFEST --external:cloudflare:email --format=esm", "lint": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore", "format": "pnpm lint --write", "check": "tsc --skipLibCheck", From dc77c1412e1f85e6241f3e5b0293973f9d8d0815 Mon Sep 17 00:00:00 2001 From: chientrm Date: Tue, 18 Jul 2023 16:12:08 +0000 Subject: [PATCH 02/26] make cloudflare:email as external --- packages/adapter-cloudflare/index.js | 3 ++- packages/adapter-cloudflare/package.json | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index ccf6887beca8..5b6539a098de 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -57,7 +57,8 @@ export default function (options = {}) { bundle: true, loader: { '.wasm': 'copy' - } + }, + external: ['cloudflare:email'] }); } }; diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index 8ad1c4c38ca4..128e9b4b41aa 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -25,7 +25,7 @@ "ambient.d.ts" ], "scripts": { - "build": "esbuild src/worker.js --bundle --outfile=files/worker.js --external:SERVER --external:MANIFEST --external:cloudflare:email --format=esm", + "build": "esbuild src/worker.js --bundle --outfile=files/worker.js --external:SERVER --external:MANIFEST --format=esm", "lint": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore", "format": "pnpm lint --write", "check": "tsc --skipLibCheck", @@ -47,4 +47,4 @@ "publishConfig": { "access": "public" } -} +} \ No newline at end of file From 4a3404e2139f980479564004d02e79dc34491463 Mon Sep 17 00:00:00 2001 From: chientrm Date: Tue, 18 Jul 2023 16:27:55 +0000 Subject: [PATCH 03/26] add changeset --- .changeset/grumpy-paws-crash.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/grumpy-paws-crash.md diff --git a/.changeset/grumpy-paws-crash.md b/.changeset/grumpy-paws-crash.md new file mode 100644 index 000000000000..7fc61bc54a6f --- /dev/null +++ b/.changeset/grumpy-paws-crash.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-cloudflare': minor +--- + +make cloudflare:email as external From 01f39121f74cd56bb55b3c781dab4b40be66b6c1 Mon Sep 17 00:00:00 2001 From: chientrm Date: Tue, 18 Jul 2023 16:31:53 +0000 Subject: [PATCH 04/26] format --- packages/adapter-cloudflare/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index 128e9b4b41aa..484a4412b87c 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -47,4 +47,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} From 48e3f6b00d9a0bfddfca972bc49d6f4a71ea3b5c Mon Sep 17 00:00:00 2001 From: chientrm Date: Tue, 18 Jul 2023 16:36:30 +0000 Subject: [PATCH 05/26] fix changeset --- .changeset/friendly-dragons-hide.md | 5 +++++ .changeset/grumpy-paws-crash.md | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 .changeset/friendly-dragons-hide.md delete mode 100644 .changeset/grumpy-paws-crash.md diff --git a/.changeset/friendly-dragons-hide.md b/.changeset/friendly-dragons-hide.md new file mode 100644 index 000000000000..ffe9a72ffcce --- /dev/null +++ b/.changeset/friendly-dragons-hide.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-cloudflare': patch +--- + +patch: mark cloudflare:email as external diff --git a/.changeset/grumpy-paws-crash.md b/.changeset/grumpy-paws-crash.md deleted file mode 100644 index 7fc61bc54a6f..000000000000 --- a/.changeset/grumpy-paws-crash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@sveltejs/adapter-cloudflare': minor ---- - -make cloudflare:email as external From 823b599d1b57a229f8f1f09701809dc2c9756569 Mon Sep 17 00:00:00 2001 From: chientrm Date: Tue, 18 Jul 2023 16:49:11 +0000 Subject: [PATCH 06/26] add for adapter-cloudflare-worker, too --- packages/adapter-cloudflare-workers/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index e21c1b9bdd38..1f5a5261fb12 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -62,7 +62,7 @@ export default function ({ config = 'wrangler.toml' } = {}) { entryPoints: [`${tmp}/entry.js`], outfile: main, bundle: true, - external: ['__STATIC_CONTENT_MANIFEST'], + external: ['__STATIC_CONTENT_MANIFEST', 'cloudflare:email'], format: 'esm', loader: { '.wasm': 'copy' From 11e3504bf498c96e75660a62105f9823ee6e296c Mon Sep 17 00:00:00 2001 From: chientrm Date: Tue, 18 Jul 2023 17:39:16 +0000 Subject: [PATCH 07/26] add changeset for adapter-cloudflare-worker --- .changeset/eighty-fans-rescue.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/eighty-fans-rescue.md diff --git a/.changeset/eighty-fans-rescue.md b/.changeset/eighty-fans-rescue.md new file mode 100644 index 000000000000..d1011654a3e9 --- /dev/null +++ b/.changeset/eighty-fans-rescue.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-cloudflare-workers': patch +--- + +patch: mark cloudflare:email as external From cb679a921c325ca77675e6c7bd7a7da0b4dfe90e Mon Sep 17 00:00:00 2001 From: Chien Tran <70304839+chientrm@users.noreply.github.com> Date: Sat, 22 Jul 2023 05:01:28 +0700 Subject: [PATCH 08/26] Update .changeset/eighty-fans-rescue.md Co-authored-by: Willow (GHOST) --- .changeset/eighty-fans-rescue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/eighty-fans-rescue.md b/.changeset/eighty-fans-rescue.md index d1011654a3e9..43df8adf1a8d 100644 --- a/.changeset/eighty-fans-rescue.md +++ b/.changeset/eighty-fans-rescue.md @@ -2,4 +2,4 @@ '@sveltejs/adapter-cloudflare-workers': patch --- -patch: mark cloudflare:email as external +fix: mark cloudflare:email as external From dd595132cb1107fddfc212c4c1786b393df74cf1 Mon Sep 17 00:00:00 2001 From: Chien Tran <70304839+chientrm@users.noreply.github.com> Date: Sat, 22 Jul 2023 05:01:35 +0700 Subject: [PATCH 09/26] Update .changeset/friendly-dragons-hide.md Co-authored-by: Willow (GHOST) --- .changeset/friendly-dragons-hide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/friendly-dragons-hide.md b/.changeset/friendly-dragons-hide.md index ffe9a72ffcce..7d241e4a1e05 100644 --- a/.changeset/friendly-dragons-hide.md +++ b/.changeset/friendly-dragons-hide.md @@ -2,4 +2,4 @@ '@sveltejs/adapter-cloudflare': patch --- -patch: mark cloudflare:email as external +fix: mark cloudflare:email as external From 5f91d0e290bbf40f9eb1d9a6429b8fb2ef4ba617 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:31:10 -0700 Subject: [PATCH 10/26] Update .changeset/eighty-fans-rescue.md --- .changeset/eighty-fans-rescue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/eighty-fans-rescue.md b/.changeset/eighty-fans-rescue.md index 43df8adf1a8d..98bddcbb37fd 100644 --- a/.changeset/eighty-fans-rescue.md +++ b/.changeset/eighty-fans-rescue.md @@ -2,4 +2,4 @@ '@sveltejs/adapter-cloudflare-workers': patch --- -fix: mark cloudflare:email as external +fix: mark `cloudflare:email` as external From ad515c3e369d752ba40b5cc963c519452c7fe99d Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:31:27 -0700 Subject: [PATCH 11/26] Update .changeset/friendly-dragons-hide.md --- .changeset/friendly-dragons-hide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/friendly-dragons-hide.md b/.changeset/friendly-dragons-hide.md index 7d241e4a1e05..dca7555b2d5b 100644 --- a/.changeset/friendly-dragons-hide.md +++ b/.changeset/friendly-dragons-hide.md @@ -2,4 +2,4 @@ '@sveltejs/adapter-cloudflare': patch --- -fix: mark cloudflare:email as external +fix: mark `cloudflare:email` as external From 6b3c109612aee51424b9e99874e62f12cb617dc1 Mon Sep 17 00:00:00 2001 From: Chien Tran <70304839+chientrm@users.noreply.github.com> Date: Fri, 28 Jul 2023 04:04:27 +0700 Subject: [PATCH 12/26] Update packages/adapter-cloudflare/index.js Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- packages/adapter-cloudflare/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index 5b6539a098de..46e1c2c3800b 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -58,7 +58,7 @@ export default function (options = {}) { loader: { '.wasm': 'copy' }, - external: ['cloudflare:email'] + external: ['cloudflare:*'] }); } }; From 0ca2569a171558d50b3bf657dd4c03efe646d7e5 Mon Sep 17 00:00:00 2001 From: Chien Tran <70304839+chientrm@users.noreply.github.com> Date: Fri, 28 Jul 2023 04:05:26 +0700 Subject: [PATCH 13/26] Update index.js --- packages/adapter-cloudflare-workers/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index 1f5a5261fb12..6ab595989024 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -62,7 +62,7 @@ export default function ({ config = 'wrangler.toml' } = {}) { entryPoints: [`${tmp}/entry.js`], outfile: main, bundle: true, - external: ['__STATIC_CONTENT_MANIFEST', 'cloudflare:email'], + external: ['__STATIC_CONTENT_MANIFEST', 'cloudflare:*'], format: 'esm', loader: { '.wasm': 'copy' From 5e4bdd966d91e99f1878c0db5916ca1e57af81d1 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 27 Jul 2023 14:06:02 -0700 Subject: [PATCH 14/26] Update .changeset/friendly-dragons-hide.md --- .changeset/friendly-dragons-hide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/friendly-dragons-hide.md b/.changeset/friendly-dragons-hide.md index dca7555b2d5b..ab63b6fc9c0c 100644 --- a/.changeset/friendly-dragons-hide.md +++ b/.changeset/friendly-dragons-hide.md @@ -2,4 +2,4 @@ '@sveltejs/adapter-cloudflare': patch --- -fix: mark `cloudflare:email` as external +fix: mark `cloudflare:` packages as external From 3ba4b44f7586d5f637629a4424a0ee5529ea67bc Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 27 Jul 2023 14:06:19 -0700 Subject: [PATCH 15/26] Update .changeset/eighty-fans-rescue.md --- .changeset/eighty-fans-rescue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/eighty-fans-rescue.md b/.changeset/eighty-fans-rescue.md index 98bddcbb37fd..d35560f3a175 100644 --- a/.changeset/eighty-fans-rescue.md +++ b/.changeset/eighty-fans-rescue.md @@ -2,4 +2,4 @@ '@sveltejs/adapter-cloudflare-workers': patch --- -fix: mark `cloudflare:email` as external +fix: mark `cloudflare:` packages as external From 2d50b6a05f994803e3fabda85f26cf1845695cc6 Mon Sep 17 00:00:00 2001 From: chientrm Date: Sat, 12 Aug 2023 07:49:19 +0000 Subject: [PATCH 16/26] mark `node:` as external --- .changeset/rare-moles-yell.md | 6 ++++++ packages/adapter-cloudflare-workers/index.js | 2 +- packages/adapter-cloudflare/index.js | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 .changeset/rare-moles-yell.md diff --git a/.changeset/rare-moles-yell.md b/.changeset/rare-moles-yell.md new file mode 100644 index 000000000000..6c0877171438 --- /dev/null +++ b/.changeset/rare-moles-yell.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/adapter-cloudflare-workers': patch +'@sveltejs/adapter-cloudflare': patch +--- + +fix: mark `node:` packages as external diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index 6ab595989024..f933bd71dbaa 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -62,7 +62,7 @@ export default function ({ config = 'wrangler.toml' } = {}) { entryPoints: [`${tmp}/entry.js`], outfile: main, bundle: true, - external: ['__STATIC_CONTENT_MANIFEST', 'cloudflare:*'], + external: ['__STATIC_CONTENT_MANIFEST', 'cloudflare:*', 'node:*'], format: 'esm', loader: { '.wasm': 'copy' diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index 46e1c2c3800b..6aed6eb9d4c6 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -58,7 +58,7 @@ export default function (options = {}) { loader: { '.wasm': 'copy' }, - external: ['cloudflare:*'] + external: ['cloudflare:*', 'node:*'] }); } }; From c572a2181c257bac23bc31f5bba9c88f5880e065 Mon Sep 17 00:00:00 2001 From: chientrm Date: Sat, 12 Aug 2023 08:10:52 +0000 Subject: [PATCH 17/26] remove old changesets --- .changeset/eighty-fans-rescue.md | 5 ----- .changeset/friendly-dragons-hide.md | 5 ----- 2 files changed, 10 deletions(-) delete mode 100644 .changeset/eighty-fans-rescue.md delete mode 100644 .changeset/friendly-dragons-hide.md diff --git a/.changeset/eighty-fans-rescue.md b/.changeset/eighty-fans-rescue.md deleted file mode 100644 index d35560f3a175..000000000000 --- a/.changeset/eighty-fans-rescue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@sveltejs/adapter-cloudflare-workers': patch ---- - -fix: mark `cloudflare:` packages as external diff --git a/.changeset/friendly-dragons-hide.md b/.changeset/friendly-dragons-hide.md deleted file mode 100644 index ab63b6fc9c0c..000000000000 --- a/.changeset/friendly-dragons-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@sveltejs/adapter-cloudflare': patch ---- - -fix: mark `cloudflare:` packages as external From 73faf431d9e85467ca0c74bae86f3357d48f2d89 Mon Sep 17 00:00:00 2001 From: chientrm Date: Sat, 12 Aug 2023 17:07:42 +0000 Subject: [PATCH 18/26] options.nodeCompat --- .../{rare-moles-yell.md => pretty-geese-drum.md} | 2 +- packages/adapter-cloudflare-workers/index.d.ts | 12 +++++++++++- packages/adapter-cloudflare-workers/index.js | 10 +++++++--- packages/adapter-cloudflare/index.d.ts | 6 ++++++ packages/adapter-cloudflare/index.js | 2 +- 5 files changed, 26 insertions(+), 6 deletions(-) rename .changeset/{rare-moles-yell.md => pretty-geese-drum.md} (60%) diff --git a/.changeset/rare-moles-yell.md b/.changeset/pretty-geese-drum.md similarity index 60% rename from .changeset/rare-moles-yell.md rename to .changeset/pretty-geese-drum.md index 6c0877171438..d1cd806ea2f3 100644 --- a/.changeset/rare-moles-yell.md +++ b/.changeset/pretty-geese-drum.md @@ -3,4 +3,4 @@ '@sveltejs/adapter-cloudflare': patch --- -fix: mark `node:` packages as external +fix: add `options.nodeCompat` to allow Node.js compatibility diff --git a/packages/adapter-cloudflare-workers/index.d.ts b/packages/adapter-cloudflare-workers/index.d.ts index 8b90611b73c3..2fc4b3f14269 100644 --- a/packages/adapter-cloudflare-workers/index.d.ts +++ b/packages/adapter-cloudflare-workers/index.d.ts @@ -1,4 +1,14 @@ import { Adapter } from '@sveltejs/kit'; import './ambient.js'; -export default function plugin(options: { config?: string }): Adapter; +export default function plugin(options?: AdapterOptions): Adapter; + +export interface AdapterOptions { + config?: string; + /** + * Enable Node.js compatibility + * https://developers.cloudflare.com/workers/runtime-apis/nodejs/ + * @default undefined + */ + nodeCompat?: boolean; +} diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index f933bd71dbaa..251c58567640 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -15,12 +15,12 @@ import { fileURLToPath } from 'node:url'; */ /** @type {import('.').default} */ -export default function ({ config = 'wrangler.toml' } = {}) { +export default function (options = { config: 'wrangler.toml' }) { return { name: '@sveltejs/adapter-cloudflare-workers', async adapt(builder) { - const { main, site } = validate_config(builder, config); + const { main, site } = validate_config(builder, options.config); const files = fileURLToPath(new URL('./files', import.meta.url).href); const tmp = builder.getBuildDirectory('cloudflare-workers-tmp'); @@ -62,7 +62,11 @@ export default function ({ config = 'wrangler.toml' } = {}) { entryPoints: [`${tmp}/entry.js`], outfile: main, bundle: true, - external: ['__STATIC_CONTENT_MANIFEST', 'cloudflare:*', 'node:*'], + external: [ + '__STATIC_CONTENT_MANIFEST', + 'cloudflare:*', + ...(options.nodeCompat ? ['node:*'] : []) + ], format: 'esm', loader: { '.wasm': 'copy' diff --git a/packages/adapter-cloudflare/index.d.ts b/packages/adapter-cloudflare/index.d.ts index e6fb925ff102..76532e31a5da 100644 --- a/packages/adapter-cloudflare/index.d.ts +++ b/packages/adapter-cloudflare/index.d.ts @@ -30,6 +30,12 @@ export interface AdapterOptions { */ exclude?: string[]; }; + /** + * Enable Node.js compatibility + * https://developers.cloudflare.com/workers/runtime-apis/nodejs/ + * @default undefined + */ + nodeCompat?: boolean; } export interface RoutesJSONSpec { diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index 6aed6eb9d4c6..a1f9f814deae 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -58,7 +58,7 @@ export default function (options = {}) { loader: { '.wasm': 'copy' }, - external: ['cloudflare:*', 'node:*'] + external: ['cloudflare:*', ...(options.nodeCompat ? ['node:*'] : [])] }); } }; From 925d8ec2b2e59cd9b423689fd95aafa7c9d62917 Mon Sep 17 00:00:00 2001 From: chientrm Date: Sun, 13 Aug 2023 12:22:39 +0000 Subject: [PATCH 19/26] add docs --- .../25-build-and-deploy/60-adapter-cloudflare.md | 5 ++++- .../70-adapter-cloudflare-workers.md | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) 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 92ceff556129..ba118c1a95dc 100644 --- a/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md +++ b/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md @@ -28,7 +28,8 @@ export default { routes: { include: ['/*'], exclude: [''] - } + }, + nodeCompat: undefined }) } }; @@ -45,6 +46,8 @@ The `routes` option allows you to customise the [`_routes.json`](https://develop - `` contains a list of prerendered pages - `` (the default) contains all of the above +The `nodeCompat` option allows you to enable [Node.js compatibility](https://developers.cloudflare.com/workers/runtime-apis/nodejs/), and defaults to `undefined` mean `disabled`. If `nodeCompat` is `true`, you will also need to [Enable Node.js from the Cloudflare dashboard](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-from-the-cloudflare-dashboard). + You can have up to 100 `include` and `exclude` rules combined. Generally you can omit the `routes` options, but if (for example) your `` paths exceed that limit, you may find it helpful to manually create an `exclude` list that includes `'/articles/*'` instead of the auto-generated `['/articles/foo', '/articles/bar', '/articles/baz', ...]`. ## Deployment 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 b35a2597b828..b753847e1a1c 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,6 +77,22 @@ export default { }; ``` +If you would like to enable [Node.js compatibility](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-from-the-cloudflare-dashboard), you can do like so: + +```js +// @errors: 2307 +/// file: svelte.config.js +import adapter from '@sveltejs/adapter-cloudflare-workers'; + +export default { + kit: { + adapter: adapter({ nodeCompat: true }) + } +}; +``` + +You will also need to [Enable Node.js with Workers](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-with-workers). + ## Bindings The [`env`](https://developers.cloudflare.com/workers/runtime-apis/fetch-event#parameters) object contains your project's [bindings](https://developers.cloudflare.com/workers/platform/environment-variables/), which consist of KV/DO namespaces, etc. It is passed to SvelteKit via the `platform` property, along with `context` and `caches`, meaning that you can access it in hooks and endpoints: From 390ba888a8aa9a16602c1b501fe105820cf2bb7b Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 18 Jan 2024 09:12:46 -0800 Subject: [PATCH 20/26] Update documentation/docs/25-build-and-deploy/70-adapter-cloudflare-workers.md --- .../docs/25-build-and-deploy/70-adapter-cloudflare-workers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b753847e1a1c..8b1c60b413a5 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 @@ -91,7 +91,7 @@ export default { }; ``` -You will also need to [Enable Node.js with Workers](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-with-workers). +You will also need to [enable Node.js with Workers](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-with-workers). ## Bindings From b3a771f05324019fbbe8deb53b1da822e34a64b3 Mon Sep 17 00:00:00 2001 From: chientrm Date: Thu, 18 Jan 2024 18:25:25 +0000 Subject: [PATCH 21/26] switch it to just the list of APIs that Cloudflare supports with their node compatibility --- packages/adapter-cloudflare-workers/index.js | 23 +++++++++++++++----- packages/adapter-cloudflare/index.js | 19 +++++++++++++++- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index 5f319ef10510..7375d623b1a3 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -61,6 +61,23 @@ export default function (options = { config: 'wrangler.toml' }) { })};\n\nexport const prerendered = new Map(${JSON.stringify(prerendered_entries)});\n` ); + const external = ['__STATIC_CONTENT_MANIFEST', 'cloudflare:*']; + if (options.nodeCompat) { + external.push( + 'node:assert', + 'node:async_hooks', + 'node:buffer', + 'node:crypto', + 'node:diagnostics_channel', + 'node:events', + 'node:path', + 'node:process', + 'node:stream', + 'node:string_decoder', + 'node:util' + ); + } + await esbuild.build({ platform: 'browser', conditions: ['worker', 'browser'], @@ -69,11 +86,7 @@ export default function (options = { config: 'wrangler.toml' }) { entryPoints: [`${tmp}/entry.js`], outfile: main, bundle: true, - external: [ - '__STATIC_CONTENT_MANIFEST', - 'cloudflare:*', - ...(options.nodeCompat ? ['node:*'] : []) - ], + external, format: 'esm', loader: { '.wasm': 'copy' diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index b1e872d10bec..bb4198bb76c0 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -53,6 +53,23 @@ export default function (options = {}) { } }); + const external = ['cloudflare:*']; + if (options.nodeCompat) { + external.push( + 'node:assert', + 'node:async_hooks', + 'node:buffer', + 'node:crypto', + 'node:diagnostics_channel', + 'node:events', + 'node:path', + 'node:process', + 'node:stream', + 'node:string_decoder', + 'node:util' + ); + } + await esbuild.build({ platform: 'browser', conditions: ['worker', 'browser'], @@ -66,7 +83,7 @@ export default function (options = {}) { loader: { '.wasm': 'copy' }, - external: ['cloudflare:*', ...(options.nodeCompat ? ['node:*'] : [])] + external }); } }; From df03b361df56bea33b8687c5e65126ff2176c2ce Mon Sep 17 00:00:00 2001 From: chientrm Date: Thu, 18 Jan 2024 18:41:49 +0000 Subject: [PATCH 22/26] read `nodejs_compat` flag from the wrangler.toml to avoid making the user specify it twice --- .../70-adapter-cloudflare-workers.md | 17 ++++------------- packages/adapter-cloudflare-workers/index.d.ts | 6 ------ packages/adapter-cloudflare-workers/index.js | 5 +++-- 3 files changed, 7 insertions(+), 21 deletions(-) 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 0c3adabd1dde..f0f11e7c682e 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,22 +77,13 @@ export default { }; ``` -If you would like to enable [Node.js compatibility](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-from-the-cloudflare-dashboard), you can do like so: +If you would like to enable [Node.js compatibility](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-from-the-cloudflare-dashboard), you can add "nodejs_compat" flag to `wrangler.toml`: -```js -// @errors: 2307 -/// file: svelte.config.js -import adapter from '@sveltejs/adapter-cloudflare-workers'; - -export default { - kit: { - adapter: adapter({ nodeCompat: true }) - } -}; +```toml +/// file: wrangler.toml +compatibility_flags = [ "nodejs_compat" ] ``` -You will also need to [enable Node.js with Workers](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-with-workers). - ## Bindings The [`env`](https://developers.cloudflare.com/workers/runtime-apis/fetch-event#parameters) object contains your project's [bindings](https://developers.cloudflare.com/workers/platform/environment-variables/), which consist of KV/DO namespaces, etc. It is passed to SvelteKit via the `platform` property, along with `context` and `caches`, meaning that you can access it in hooks and endpoints: diff --git a/packages/adapter-cloudflare-workers/index.d.ts b/packages/adapter-cloudflare-workers/index.d.ts index 2fc4b3f14269..5bfd868e0604 100644 --- a/packages/adapter-cloudflare-workers/index.d.ts +++ b/packages/adapter-cloudflare-workers/index.d.ts @@ -5,10 +5,4 @@ export default function plugin(options?: AdapterOptions): Adapter; export interface AdapterOptions { config?: string; - /** - * Enable Node.js compatibility - * https://developers.cloudflare.com/workers/runtime-apis/nodejs/ - * @default undefined - */ - nodeCompat?: boolean; } diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index 7375d623b1a3..7eaf385d3e46 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -11,6 +11,7 @@ import { fileURLToPath } from 'node:url'; * site: { * bucket: string; * } + * compatibility_flags?: string[]; * }} WranglerConfig */ @@ -20,7 +21,7 @@ export default function (options = { config: 'wrangler.toml' }) { name: '@sveltejs/adapter-cloudflare-workers', async adapt(builder) { - const { main, site } = validate_config(builder, options.config); + const { main, site, compatibility_flags } = validate_config(builder, options.config); const files = fileURLToPath(new URL('./files', import.meta.url).href); const tmp = builder.getBuildDirectory('cloudflare-workers-tmp'); @@ -62,7 +63,7 @@ export default function (options = { config: 'wrangler.toml' }) { ); const external = ['__STATIC_CONTENT_MANIFEST', 'cloudflare:*']; - if (options.nodeCompat) { + if (compatibility_flags && compatibility_flags.includes('nodejs_compat')) { external.push( 'node:assert', 'node:async_hooks', From 7692979cb9d9ee7751b076782d496dc8d4389671 Mon Sep 17 00:00:00 2001 From: chientrm Date: Thu, 18 Jan 2024 19:05:18 +0000 Subject: [PATCH 23/26] changeset --- .changeset/pretty-geese-drum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/pretty-geese-drum.md b/.changeset/pretty-geese-drum.md index d1cd806ea2f3..0983b18b567b 100644 --- a/.changeset/pretty-geese-drum.md +++ b/.changeset/pretty-geese-drum.md @@ -3,4 +3,4 @@ '@sveltejs/adapter-cloudflare': patch --- -fix: add `options.nodeCompat` to allow Node.js compatibility +fix: Add Node.js compatibility to adapter-cloudflare and adapter-cloudflare-workers From ea0ecb95bdb88958d690128bdb34f801bc6818af Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 18 Jan 2024 17:32:28 -0500 Subject: [PATCH 24/26] remove `nodeCompat` option, always assume compatibility --- .../60-adapter-cloudflare.md | 5 +--- packages/adapter-cloudflare/index.d.ts | 6 ---- packages/adapter-cloudflare/index.js | 30 +++++++++---------- 3 files changed, 15 insertions(+), 26 deletions(-) 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 b50502eb2146..033a01c8247d 100644 --- a/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md +++ b/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md @@ -28,8 +28,7 @@ export default { routes: { include: ['/*'], exclude: [''] - }, - nodeCompat: undefined + } }) } }; @@ -46,8 +45,6 @@ The `routes` option allows you to customise the [`_routes.json`](https://develop - `` contains a list of prerendered pages - `` (the default) contains all of the above -The `nodeCompat` option allows you to enable [Node.js compatibility](https://developers.cloudflare.com/workers/runtime-apis/nodejs/), and defaults to `undefined` mean `disabled`. If `nodeCompat` is `true`, you will also need to [Enable Node.js from the Cloudflare dashboard](https://developers.cloudflare.com/workers/runtime-apis/nodejs/#enable-nodejs-from-the-cloudflare-dashboard). - You can have up to 100 `include` and `exclude` rules combined. Generally you can omit the `routes` options, but if (for example) your `` paths exceed that limit, you may find it helpful to manually create an `exclude` list that includes `'/articles/*'` instead of the auto-generated `['/articles/foo', '/articles/bar', '/articles/baz', ...]`. ## Deployment diff --git a/packages/adapter-cloudflare/index.d.ts b/packages/adapter-cloudflare/index.d.ts index e82da2491cbf..0ef6ee967d85 100644 --- a/packages/adapter-cloudflare/index.d.ts +++ b/packages/adapter-cloudflare/index.d.ts @@ -42,12 +42,6 @@ export interface AdapterOptions { */ exclude?: string[]; }; - /** - * Enable Node.js compatibility - * https://developers.cloudflare.com/workers/runtime-apis/nodejs/ - * @default undefined - */ - nodeCompat?: boolean; } export interface RoutesJSONSpec { diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index bb4198bb76c0..2e9bc47a2968 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -53,22 +53,20 @@ export default function (options = {}) { } }); - const external = ['cloudflare:*']; - if (options.nodeCompat) { - external.push( - 'node:assert', - 'node:async_hooks', - 'node:buffer', - 'node:crypto', - 'node:diagnostics_channel', - 'node:events', - 'node:path', - 'node:process', - 'node:stream', - 'node:string_decoder', - 'node:util' - ); - } + const external = [ + 'cloudflare:*', + 'node:assert', + 'node:async_hooks', + 'node:buffer', + 'node:crypto', + 'node:diagnostics_channel', + 'node:events', + 'node:path', + 'node:process', + 'node:stream', + 'node:string_decoder', + 'node:util' + ]; await esbuild.build({ platform: 'browser', From 65b23fab1443576dae50de252f3d591f3bf687cb Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 18 Jan 2024 17:41:37 -0500 Subject: [PATCH 25/26] Apply suggestions from code review --- packages/adapter-cloudflare-workers/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/adapter-cloudflare-workers/index.js b/packages/adapter-cloudflare-workers/index.js index 7eaf385d3e46..c3bbb78126ea 100644 --- a/packages/adapter-cloudflare-workers/index.js +++ b/packages/adapter-cloudflare-workers/index.js @@ -16,12 +16,12 @@ import { fileURLToPath } from 'node:url'; */ /** @type {import('./index.js').default} */ -export default function (options = { config: 'wrangler.toml' }) { +export default function ({ config = 'wrangler.toml' } = {}) { return { name: '@sveltejs/adapter-cloudflare-workers', async adapt(builder) { - const { main, site, compatibility_flags } = validate_config(builder, options.config); + const { main, site, compatibility_flags } = validate_config(builder, config); const files = fileURLToPath(new URL('./files', import.meta.url).href); const tmp = builder.getBuildDirectory('cloudflare-workers-tmp'); From 62dd0f5a05b3de17dc4de51a3a18608077957626 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 18 Jan 2024 17:43:41 -0500 Subject: [PATCH 26/26] Update .changeset/pretty-geese-drum.md --- .changeset/pretty-geese-drum.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.changeset/pretty-geese-drum.md b/.changeset/pretty-geese-drum.md index 0983b18b567b..3384033cb97d 100644 --- a/.changeset/pretty-geese-drum.md +++ b/.changeset/pretty-geese-drum.md @@ -1,6 +1,6 @@ --- -'@sveltejs/adapter-cloudflare-workers': patch -'@sveltejs/adapter-cloudflare': patch +'@sveltejs/adapter-cloudflare-workers': minor +'@sveltejs/adapter-cloudflare': minor --- -fix: Add Node.js compatibility to adapter-cloudflare and adapter-cloudflare-workers +feat: Add Node.js compatibility