From 6a8f860272da8eb9e4e3408fe92ece53f964fce9 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Fri, 31 Oct 2025 10:23:42 +0000 Subject: [PATCH 01/23] bump wrangler and open-next adapter --- apps/site/package.json | 4 +- pnpm-lock.yaml | 160 +++++++++++++++++++++++------------------ 2 files changed, 92 insertions(+), 72 deletions(-) diff --git a/apps/site/package.json b/apps/site/package.json index eaede8c25a8cc..4f802d27aa4eb 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -83,7 +83,7 @@ "@flarelabs-net/wrangler-build-time-fs-assets-polyfilling": "^0.0.1", "@next/eslint-plugin-next": "15.5.4", "@node-core/remark-lint": "workspace:*", - "@opennextjs/cloudflare": "^1.6.4", + "@opennextjs/cloudflare": "^1.11.0", "@playwright/test": "^1.56.1", "@testing-library/user-event": "~14.6.1", "@types/mdast": "^4.0.4", @@ -108,7 +108,7 @@ "typescript": "catalog:", "typescript-eslint": "~8.45.0", "user-agent-data-types": "0.4.2", - "wrangler": "^4.33.1" + "wrangler": "^4.45.3" }, "imports": { "#site/*": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9230b3b3909a..6e7eb64dfaed9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -227,8 +227,8 @@ importers: specifier: workspace:* version: link:../../packages/remark-lint '@opennextjs/cloudflare': - specifier: ^1.6.4 - version: 1.6.4(wrangler@4.33.1) + specifier: ^1.11.0 + version: 1.11.0(wrangler@4.45.3) '@playwright/test': specifier: ^1.56.1 version: 1.56.1 @@ -302,8 +302,8 @@ importers: specifier: 0.4.2 version: 0.4.2 wrangler: - specifier: ^4.33.1 - version: 4.33.1 + specifier: ^4.45.3 + version: 4.45.3 packages/i18n: devDependencies: @@ -1053,41 +1053,41 @@ packages: resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} - '@cloudflare/unenv-preset@2.7.0': - resolution: {integrity: sha512-0JbEj+KTCQ4nTIWg2q8Bou+fPxzG6/zwU5O/w6Cld6WEjLl+716foT+2bjg48h09hMtjTKkJdAh1m4LybBKGCg==} + '@cloudflare/unenv-preset@2.7.8': + resolution: {integrity: sha512-Ky929MfHh+qPhwCapYrRPwPVHtA2Ioex/DbGZyskGyNRDe9Ru3WThYZivyNVaPy5ergQSgMs9OKrM9Ajtz9F6w==} peerDependencies: - unenv: 2.0.0-rc.19 - workerd: ^1.20250816.0 + unenv: 2.0.0-rc.21 + workerd: ^1.20250927.0 peerDependenciesMeta: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20250823.0': - resolution: {integrity: sha512-yRLJc1cQNqQYcDViOk7kpTXnR5XuBP7B/Ms5KBdlQ6eTr2Vsg9mfKqWKInjzY8/Cx+p+Sic2Tbld42gcYkiM2A==} + '@cloudflare/workerd-darwin-64@1.20251011.0': + resolution: {integrity: sha512-0DirVP+Z82RtZLlK2B+VhLOkk+ShBqDYO/jhcRw4oVlp0TOvk3cOVZChrt3+y3NV8Y/PYgTEywzLKFSziK4wCg==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250823.0': - resolution: {integrity: sha512-KJnikUe6J29Ga1QMPKNCc8eHD56DdBlu5XE5LoBH/AYRrbS5UI1d5F844hUWoFKJb8KRaPIH9F849HZWfNa1vw==} + '@cloudflare/workerd-darwin-arm64@1.20251011.0': + resolution: {integrity: sha512-1WuFBGwZd15p4xssGN/48OE2oqokIuc51YvHvyNivyV8IYnAs3G9bJNGWth1X7iMDPe4g44pZrKhRnISS2+5dA==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250823.0': - resolution: {integrity: sha512-4QFXq4eDWEAK5QjGxRe0XUTBax1Fgarc08HETL6q0y/KPZp2nOTLfjLjklTn/qEiztafNFoJEIwhkiknHeOi/g==} + '@cloudflare/workerd-linux-64@1.20251011.0': + resolution: {integrity: sha512-BccMiBzFlWZyFghIw2szanmYJrJGBGHomw2y/GV6pYXChFzMGZkeCEMfmCyJj29xczZXxcZmUVJxNy4eJxO8QA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250823.0': - resolution: {integrity: sha512-sODSrSVe4W/maoBu76qb0sJGBhxhSM2Q2tg/+G7q1IPgRZSzArMKIPrW6nBnmBrrG1O0X6aoAdID6w5hfuEM4g==} + '@cloudflare/workerd-linux-arm64@1.20251011.0': + resolution: {integrity: sha512-79o/216lsbAbKEVDZYXR24ivEIE2ysDL9jvo0rDTkViLWju9dAp3CpyetglpJatbSi3uWBPKZBEOqN68zIjVsQ==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250823.0': - resolution: {integrity: sha512-WaNqUOXUnrcEI+i2NI4+okA9CrJMI9n2XTfVtDg/pLvcA/ZPTz23MEFMZU1splr4SslS1th1NBO38RMPnDB4rA==} + '@cloudflare/workerd-windows-64@1.20251011.0': + resolution: {integrity: sha512-RIXUQRchFdqEvaUqn1cXZXSKjpqMaSaVAkI5jNZ8XzAw/bw2bcdOVUtakrflgxDprltjFb0PTNtuss1FKtH9Jg==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -2071,15 +2071,15 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opennextjs/aws@3.7.4': - resolution: {integrity: sha512-s50dmKrgQ62GliffoI/hGGQVb3q/7ZN5VRa4jJw0ZsEGLfk25XuAulO/ySCYeE7/A23KoAYuhafnKr/h+vxOeQ==} + '@opennextjs/aws@3.8.5': + resolution: {integrity: sha512-elpMb0fJZc0a1VtymedFa7P1lYcyOmt+Pwqyacpq2C/SvbETIeBlW/Xle/vY95ICtccKUxITI8MtonrCo2+2/Q==} hasBin: true - '@opennextjs/cloudflare@1.6.4': - resolution: {integrity: sha512-vGEHr1+Dli4BSrs+CM+b2bnXoUdY/GUFiLfdH28UTRHggLMG7cL49M39LtzIVR5D8eqzZ38PDB2CZMn1LJ2gSw==} + '@opennextjs/cloudflare@1.11.0': + resolution: {integrity: sha512-2QVZLjCr3hPwkcGEetLarTZvlNIHsGV3j2+i+KNsjFIBgvsnxhmRqJbT0u8J9cVMFKNh19hSOTOmUKs1T3DWig==} hasBin: true peerDependencies: - wrangler: ^4.24.4 + wrangler: ^4.38.0 '@opentelemetry/api-logs@0.206.0': resolution: {integrity: sha512-yIVDu9jX//nV5wSMLZLdHdb1SKHIMj9k+wQVFtln5Flcgdldz9BkHtavvExQiJqBZg2OpEEJEZmzQazYztdz2A==} @@ -3578,6 +3578,9 @@ packages: '@types/node@22.18.6': resolution: {integrity: sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==} + '@types/rclone.js@0.6.3': + resolution: {integrity: sha512-BssKAAVRY//fxGKso8SatyOwiD7X0toDofNnVxZlIXmN7UHrn2UBTxldNAjgUvWA91qJyeEPfKmeJpZVhLugXg==} + '@types/react@19.2.2': resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} @@ -3997,6 +4000,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -6047,10 +6054,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.1.0: - resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} - engines: {node: 20 || >=22} - lru-cache@11.2.2: resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} engines: {node: 20 || >=22} @@ -6345,8 +6348,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@4.20250823.1: - resolution: {integrity: sha512-qjbF69XXyHXk4R//q0a9MLraKE9MLKZ/94k6jKcfouJ0g+se7VyMzCBryeWA534+ZAlNM4Ay5gqYr1v3Wk6ctQ==} + miniflare@4.20251011.1: + resolution: {integrity: sha512-Qbw1Z8HTYM1adWl6FAtzhrj34/6dPRDPwdYOx21dkae8a/EaxbMzRIPbb4HKVGMVvtqbK1FaRCgDLVLolNzGHg==} engines: {node: '>=18.0.0'} hasBin: true @@ -7008,6 +7011,12 @@ packages: resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} engines: {node: '>= 0.8'} + rclone.js@0.6.6: + resolution: {integrity: sha512-Dxh34cab/fNjFq5SSm0fYLNkGzG2cQSBy782UW9WwxJCEiVO4cGXkvaXcNlgv817dK8K8PuQ+NHUqSAMMhWujQ==} + engines: {node: '>=12'} + os: [darwin, freebsd, linux, openbsd, sunos, win32] + hasBin: true + react-docgen-typescript@2.4.0: resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: @@ -8053,12 +8062,12 @@ packages: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} - undici@7.15.0: - resolution: {integrity: sha512-7oZJCPvvMvTd0OlqWsIxTuItTpJBpU1tcbVl24FMn3xt3+VSunwUasmfPJRE57oNO1KsZ4PgA1xTdAX4hq8NyQ==} + undici@7.14.0: + resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==} engines: {node: '>=20.18.1'} - unenv@2.0.0-rc.19: - resolution: {integrity: sha512-t/OMHBNAkknVCI7bVB9OWjUUAwhVv9vsPIAGnNUxnu3FxPQN11rjh0sksLMzc3g7IlTgvHmOTl4JM7JHpcv5wA==} + unenv@2.0.0-rc.21: + resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==} unified-engine@11.2.2: resolution: {integrity: sha512-15g/gWE7qQl9tQ3nAEbMd5h9HV1EACtFs6N9xaRBZICoCwnNGbal1kOs++ICf4aiTdItZxU2s/kYWhW7htlqJg==} @@ -8351,17 +8360,17 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerd@1.20250823.0: - resolution: {integrity: sha512-95lToK9zeaC7bX5ZmlP/wz6zqoUPBk3hhec1JjEMGZrxsXY9cPRkjWNCcjDctQ17U97vjMcY/ymchgx7w8Cfmg==} + workerd@1.20251011.0: + resolution: {integrity: sha512-Dq35TLPEJAw7BuYQMkN3p9rge34zWMU2Gnd4DSJFeVqld4+DAO2aPG7+We2dNIAyM97S8Y9BmHulbQ00E0HC7Q==} engines: {node: '>=16'} hasBin: true - wrangler@4.33.1: - resolution: {integrity: sha512-8x/3Tbt+/raBMm0+vRyAHSGu2kF1QjeiSrx47apgPk/AzSBcXI9YuUUdGrKnozMYZlEbOxdBQOMyuRRDTyNmOg==} + wrangler@4.45.3: + resolution: {integrity: sha512-0ddEA9t4HeBgSVTVTcqtBHl7Z5CorWZ8tGgTQCP5XuL+9E1TJRwS6t/zzG51Ruwjb17SZYCaLchoM8V629S8cw==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250823.0 + '@cloudflare/workers-types': ^4.20251011.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -9664,25 +9673,25 @@ snapshots: dependencies: mime: 3.0.0 - '@cloudflare/unenv-preset@2.7.0(unenv@2.0.0-rc.19)(workerd@1.20250823.0)': + '@cloudflare/unenv-preset@2.7.8(unenv@2.0.0-rc.21)(workerd@1.20251011.0)': dependencies: - unenv: 2.0.0-rc.19 + unenv: 2.0.0-rc.21 optionalDependencies: - workerd: 1.20250823.0 + workerd: 1.20251011.0 - '@cloudflare/workerd-darwin-64@1.20250823.0': + '@cloudflare/workerd-darwin-64@1.20251011.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250823.0': + '@cloudflare/workerd-darwin-arm64@1.20251011.0': optional: true - '@cloudflare/workerd-linux-64@1.20250823.0': + '@cloudflare/workerd-linux-64@1.20251011.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250823.0': + '@cloudflare/workerd-linux-arm64@1.20251011.0': optional: true - '@cloudflare/workerd-windows-64@1.20250823.0': + '@cloudflare/workerd-windows-64@1.20251011.0': optional: true '@cspotcode/source-map-support@0.8.1': @@ -9728,7 +9737,7 @@ snapshots: dotenv: 16.6.1 eciesjs: 0.4.15 execa: 5.1.1 - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) ignore: 5.3.2 object-treeify: 1.1.33 picomatch: 4.0.3 @@ -10620,7 +10629,7 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opennextjs/aws@3.7.4': + '@opennextjs/aws@3.8.5': dependencies: '@ast-grep/napi': 0.35.0 '@aws-sdk/client-cloudfront': 3.398.0 @@ -10643,15 +10652,17 @@ snapshots: - aws-crt - supports-color - '@opennextjs/cloudflare@1.6.4(wrangler@4.33.1)': + '@opennextjs/cloudflare@1.11.0(wrangler@4.45.3)': dependencies: '@dotenvx/dotenvx': 1.31.0 - '@opennextjs/aws': 3.7.4 + '@opennextjs/aws': 3.8.5 + '@types/rclone.js': 0.6.3 cloudflare: 4.5.0 enquirer: 2.4.1 glob: 11.0.3 + rclone.js: 0.6.6 ts-tqdm: 0.8.6 - wrangler: 4.33.1 + wrangler: 4.45.3 yargs: 18.0.0 transitivePeerDependencies: - aws-crt @@ -12390,6 +12401,10 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/rclone.js@0.6.3': + dependencies: + '@types/node': 22.18.6 + '@types/react@19.2.2': dependencies: csstype: 3.1.3 @@ -12799,6 +12814,8 @@ snapshots: acorn@8.15.0: {} + adm-zip@0.5.16: {} + agent-base@7.1.4: {} agentkeepalive@4.6.0: @@ -15267,8 +15284,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.1.0: {} - lru-cache@11.2.2: {} lru-cache@5.1.1: @@ -15831,7 +15846,7 @@ snapshots: min-indent@1.0.1: {} - miniflare@4.20250823.1: + miniflare@4.20251011.1: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -15840,8 +15855,8 @@ snapshots: glob-to-regexp: 0.4.1 sharp: 0.33.5 stoppable: 1.1.0 - undici: 7.15.0 - workerd: 1.20250823.0 + undici: 7.14.0 + workerd: 1.20251011.0 ws: 8.18.0 youch: 4.1.0-beta.10 zod: 3.22.3 @@ -16183,7 +16198,7 @@ snapshots: path-scurry@2.0.0: dependencies: - lru-cache: 11.1.0 + lru-cache: 11.2.2 minipass: 7.1.2 path-to-regexp@6.3.0: {} @@ -16426,6 +16441,11 @@ snapshots: iconv-lite: 0.6.3 unpipe: 1.0.0 + rclone.js@0.6.6: + dependencies: + adm-zip: 0.5.16 + mri: 1.2.0 + react-docgen-typescript@2.4.0(typescript@5.8.3): dependencies: typescript: 5.8.3 @@ -18009,9 +18029,9 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - undici@7.15.0: {} + undici@7.14.0: {} - unenv@2.0.0-rc.19: + unenv@2.0.0-rc.21: dependencies: defu: 6.1.4 exsolve: 1.0.7 @@ -18469,24 +18489,24 @@ snapshots: wordwrap@1.0.0: {} - workerd@1.20250823.0: + workerd@1.20251011.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250823.0 - '@cloudflare/workerd-darwin-arm64': 1.20250823.0 - '@cloudflare/workerd-linux-64': 1.20250823.0 - '@cloudflare/workerd-linux-arm64': 1.20250823.0 - '@cloudflare/workerd-windows-64': 1.20250823.0 + '@cloudflare/workerd-darwin-64': 1.20251011.0 + '@cloudflare/workerd-darwin-arm64': 1.20251011.0 + '@cloudflare/workerd-linux-64': 1.20251011.0 + '@cloudflare/workerd-linux-arm64': 1.20251011.0 + '@cloudflare/workerd-windows-64': 1.20251011.0 - wrangler@4.33.1: + wrangler@4.45.3: dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.7.0(unenv@2.0.0-rc.19)(workerd@1.20250823.0) + '@cloudflare/unenv-preset': 2.7.8(unenv@2.0.0-rc.21)(workerd@1.20251011.0) blake3-wasm: 2.1.5 esbuild: 0.25.4 - miniflare: 4.20250823.1 + miniflare: 4.20251011.1 path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.19 - workerd: 1.20250823.0 + unenv: 2.0.0-rc.21 + workerd: 1.20251011.0 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: From 89b6b2f2ab11d10e638240749c1ed57fe5560d37 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Fri, 31 Oct 2025 14:06:23 +0000 Subject: [PATCH 02/23] for the open-next incremental cache use R2 with regional cache instead of kv --- apps/site/open-next.config.ts | 10 +++++++--- apps/site/wrangler.jsonc | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/site/open-next.config.ts b/apps/site/open-next.config.ts index 19d77d01d747e..6eb29ae534f65 100644 --- a/apps/site/open-next.config.ts +++ b/apps/site/open-next.config.ts @@ -1,9 +1,13 @@ import { defineCloudflareConfig } from '@opennextjs/cloudflare'; -import incrementalCache from '@opennextjs/cloudflare/overrides/incremental-cache/kv-incremental-cache'; - import type { OpenNextConfig } from '@opennextjs/cloudflare'; +import r2IncrementalCache from '@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache'; +import { withRegionalCache } from '@opennextjs/cloudflare/overrides/incremental-cache/regional-cache'; -const cloudflareConfig = defineCloudflareConfig({ incrementalCache }); +const cloudflareConfig = defineCloudflareConfig({ + incrementalCache: withRegionalCache(r2IncrementalCache, { + mode: 'long-lived', + }), +}); const openNextConfig: OpenNextConfig = { ...cloudflareConfig, diff --git a/apps/site/wrangler.jsonc b/apps/site/wrangler.jsonc index 3ceafca8647b7..24fcf7f9de26d 100644 --- a/apps/site/wrangler.jsonc +++ b/apps/site/wrangler.jsonc @@ -33,10 +33,10 @@ "fs": "./.wrangler/fs-assets-polyfilling/polyfills/node/fs.ts", "fs/promises": "./.wrangler/fs-assets-polyfilling/polyfills/node/fs/promises.ts", }, - "kv_namespaces": [ + "r2_buckets": [ { - "binding": "NEXT_INC_CACHE_KV", - "id": "69b7422d56dd4244bc0127b69ecdc36f", + "binding": "NEXT_INC_CACHE_R2_BUCKET", + "bucket_name": "next-cache-r2-for-open-next-website", }, ], } From 670e686a0bb95d33081cdee71e4226d468ac6c19 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Fri, 31 Oct 2025 14:22:39 +0000 Subject: [PATCH 03/23] add open-next DO queue --- apps/site/open-next.config.ts | 2 ++ apps/site/wrangler.jsonc | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/apps/site/open-next.config.ts b/apps/site/open-next.config.ts index 6eb29ae534f65..5b17a85b21b2d 100644 --- a/apps/site/open-next.config.ts +++ b/apps/site/open-next.config.ts @@ -2,11 +2,13 @@ import { defineCloudflareConfig } from '@opennextjs/cloudflare'; import type { OpenNextConfig } from '@opennextjs/cloudflare'; import r2IncrementalCache from '@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache'; import { withRegionalCache } from '@opennextjs/cloudflare/overrides/incremental-cache/regional-cache'; +import doQueue from '@opennextjs/cloudflare/overrides/queue/do-queue'; const cloudflareConfig = defineCloudflareConfig({ incrementalCache: withRegionalCache(r2IncrementalCache, { mode: 'long-lived', }), + queue: doQueue, }); const openNextConfig: OpenNextConfig = { diff --git a/apps/site/wrangler.jsonc b/apps/site/wrangler.jsonc index 24fcf7f9de26d..69afe07d5a0e2 100644 --- a/apps/site/wrangler.jsonc +++ b/apps/site/wrangler.jsonc @@ -39,4 +39,18 @@ "bucket_name": "next-cache-r2-for-open-next-website", }, ], + "durable_objects": { + "bindings": [ + { + "name": "NEXT_CACHE_DO_QUEUE", + "class_name": "DOQueueHandler", + }, + ], + }, + "migrations": [ + { + "tag": "v1", + "new_sqlite_classes": ["DOQueueHandler"], + }, + ], } From 1ef473082471ba90f70c13664a3caa5ee39f8dcf Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Fri, 31 Oct 2025 14:23:14 +0000 Subject: [PATCH 04/23] enable open-next cache interception --- apps/site/open-next.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/site/open-next.config.ts b/apps/site/open-next.config.ts index 5b17a85b21b2d..fda118f638baf 100644 --- a/apps/site/open-next.config.ts +++ b/apps/site/open-next.config.ts @@ -9,6 +9,7 @@ const cloudflareConfig = defineCloudflareConfig({ mode: 'long-lived', }), queue: doQueue, + enableCacheInterception: true, }); const openNextConfig: OpenNextConfig = { From 6cb2454915dcb57fad35b91e8540f1166ca68305 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Fri, 31 Oct 2025 18:09:28 +0000 Subject: [PATCH 05/23] add open-next custom image loader --- apps/site/cloudflare-image-loader.ts | 22 ++++++++++++++ apps/site/next.config.mjs | 45 +++++++++++++++++++--------- 2 files changed, 53 insertions(+), 14 deletions(-) create mode 100644 apps/site/cloudflare-image-loader.ts diff --git a/apps/site/cloudflare-image-loader.ts b/apps/site/cloudflare-image-loader.ts new file mode 100644 index 0000000000000..04b873f7224b6 --- /dev/null +++ b/apps/site/cloudflare-image-loader.ts @@ -0,0 +1,22 @@ +import type { ImageLoaderProps } from 'next/image'; + +const normalizeSrc = (src: string) => { + return src.startsWith('/') ? src.slice(1) : src; +}; + +export default function cloudflareLoader({ + src, + width, + quality, +}: ImageLoaderProps) { + if (process.env.NODE_ENV === 'development') { + // Serve the original image when using `next dev` + return src; + } + const params = [`width=${width}`]; + if (quality) { + params.push(`quality=${quality}`); + } + const paramsString = params.join(','); + return `/cdn-cgi/image/${paramsString}/${normalizeSrc(src)}`; +} diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index f73ff9aceb00b..e66fa7f838c2e 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -13,19 +13,36 @@ const nextConfig = { // is being built on a subdirectory (e.g. /nodejs-website) basePath: BASE_PATH, // Vercel/Next.js Image Optimization Settings - images: { - // We disable image optimisation during static export builds - unoptimized: ENABLE_STATIC_EXPORT, - // We add it to the remote pattern for the static images we use from multiple sources - // to be marked as safe sources (these come from Markdown files) - remotePatterns: [ - new URL('https://avatars.githubusercontent.com/**'), - new URL('https://bestpractices.coreinfrastructure.org/**'), - new URL('https://raw.githubusercontent.com/nodejs/**'), - new URL('https://user-images.githubusercontent.com/**'), - new URL('https://website-assets.oramasearch.com/**'), - ], - }, + images: + // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader + // + // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins + // (https://developers.cloudflare.com/images/transform-images/sources/) + // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). + // + // TODO: The `OPEN_NEXT_CLOUDFLARE` environment variable is being + // defined in the worker building script, ideally the open-next + // adapter should set it itself when it invokes the Next.js build + // process, once it does that remove the manual `OPEN_NEXT_CLOUDFLARE` + // definition in the package.json script. + process.env.OPEN_NEXT_CLOUDFLARE + ? { + loader: 'custom', + loaderFile: './cloudflare-image-loader.ts', + } + : { + // We disable image optimisation during static export builds + unoptimized: ENABLE_STATIC_EXPORT, + // We add it to the remote pattern for the static images we use from multiple sources + // to be marked as safe sources (these come from Markdown files) + remotePatterns: [ + new URL('https://avatars.githubusercontent.com/**'), + new URL('https://bestpractices.coreinfrastructure.org/**'), + new URL('https://raw.githubusercontent.com/nodejs/**'), + new URL('https://user-images.githubusercontent.com/**'), + new URL('https://website-assets.oramasearch.com/**'), + ], + }, serverExternalPackages: ['twoslash'], outputFileTracingIncludes: { // Twoslash needs TypeScript declarations to function, and, by default, Next.js @@ -86,7 +103,7 @@ const nextConfig = { // TODO: The `OPEN_NEXT_CLOUDFLARE` environment variable is being // defined in the worker building script, ideally the open-next // adapter should set it itself when it invokes the Next.js build - // process, onces it does that remove the manual `OPEN_NEXT_CLOUDFLARE` + // process, once it does that remove the manual `OPEN_NEXT_CLOUDFLARE` // definition in the package.json script. deploymentId: process.env.OPEN_NEXT_CLOUDFLARE ? (await import('@opennextjs/cloudflare')).getDeploymentId() From 7436b9fdff10add88e2a4f7f983fcd2849339e83 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 4 Nov 2025 12:42:45 +0000 Subject: [PATCH 06/23] add inline comment for regional cache --- apps/site/open-next.config.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/site/open-next.config.ts b/apps/site/open-next.config.ts index fda118f638baf..e7101abb4df1b 100644 --- a/apps/site/open-next.config.ts +++ b/apps/site/open-next.config.ts @@ -5,6 +5,11 @@ import { withRegionalCache } from '@opennextjs/cloudflare/overrides/incremental- import doQueue from '@opennextjs/cloudflare/overrides/queue/do-queue'; const cloudflareConfig = defineCloudflareConfig({ + /** + * The regional cache implementation with R2 (instead of a KV one) is is chosen here + * for both R2's strong consistency alongside the regional cache performance gains. + * @see https://opennext.js.org/cloudflare/caching + */ incrementalCache: withRegionalCache(r2IncrementalCache, { mode: 'long-lived', }), From d5fffabd01a2ff87d060ada67d54e01090771b8a Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 4 Nov 2025 12:49:34 +0000 Subject: [PATCH 07/23] define `OPEN_NEXT_CLOUDFLARE` variable in `next.consstants.mjs` --- apps/site/next.config.mjs | 20 +++++++------------- apps/site/next.constants.mjs | 11 +++++++++++ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index e66fa7f838c2e..a4a16500e171b 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -1,7 +1,11 @@ 'use strict'; import createNextIntlPlugin from 'next-intl/plugin'; -import { BASE_PATH, ENABLE_STATIC_EXPORT } from './next.constants.mjs'; +import { + BASE_PATH, + ENABLE_STATIC_EXPORT, + OPEN_NEXT_CLOUDFLARE, +} from './next.constants.mjs'; import { redirects, rewrites } from './next.rewrites.mjs'; /** @type {import('next').NextConfig} */ @@ -20,12 +24,7 @@ const nextConfig = { // (https://developers.cloudflare.com/images/transform-images/sources/) // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). // - // TODO: The `OPEN_NEXT_CLOUDFLARE` environment variable is being - // defined in the worker building script, ideally the open-next - // adapter should set it itself when it invokes the Next.js build - // process, once it does that remove the manual `OPEN_NEXT_CLOUDFLARE` - // definition in the package.json script. - process.env.OPEN_NEXT_CLOUDFLARE + OPEN_NEXT_CLOUDFLARE ? { loader: 'custom', loaderFile: './cloudflare-image-loader.ts', @@ -100,12 +99,7 @@ const nextConfig = { }, // If we're building for the Cloudflare deployment we want to set // an appropriate deploymentId (needed for skew protection) - // TODO: The `OPEN_NEXT_CLOUDFLARE` environment variable is being - // defined in the worker building script, ideally the open-next - // adapter should set it itself when it invokes the Next.js build - // process, once it does that remove the manual `OPEN_NEXT_CLOUDFLARE` - // definition in the package.json script. - deploymentId: process.env.OPEN_NEXT_CLOUDFLARE + deploymentId: OPEN_NEXT_CLOUDFLARE ? (await import('@opennextjs/cloudflare')).getDeploymentId() : undefined, }; diff --git a/apps/site/next.constants.mjs b/apps/site/next.constants.mjs index 8a8e9ec4196cb..a9265beb2f837 100644 --- a/apps/site/next.constants.mjs +++ b/apps/site/next.constants.mjs @@ -213,3 +213,14 @@ export const EOL_VERSION_IDENTIFIER = 'End-of-life'; */ export const VULNERABILITIES_URL = 'https://raw.githubusercontent.com/nodejs/security-wg/main/vuln/core/index.json'; + +/** + * Whether the build process is targeting the Cloudflare open-next build or not. + * + * TODO: The `OPEN_NEXT_CLOUDFLARE` environment variable is being + * defined in the worker building script, ideally the open-next + * adapter should set it itself when it invokes the Next.js build + * process, once it does that remove the manual `OPEN_NEXT_CLOUDFLARE` + * definition in the package.json script. + */ +export const OPEN_NEXT_CLOUDFLARE = process.env.OPEN_NEXT_CLOUDFLARE; From 12ede14b672a6d2c10ff55b15bec866e0cad573e Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 4 Nov 2025 12:54:38 +0000 Subject: [PATCH 08/23] avoid ternaries in `next.config.mjs` --- apps/site/next.config.mjs | 71 ++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index a4a16500e171b..d053d62c5259c 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -17,31 +17,7 @@ const nextConfig = { // is being built on a subdirectory (e.g. /nodejs-website) basePath: BASE_PATH, // Vercel/Next.js Image Optimization Settings - images: - // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader - // - // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins - // (https://developers.cloudflare.com/images/transform-images/sources/) - // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). - // - OPEN_NEXT_CLOUDFLARE - ? { - loader: 'custom', - loaderFile: './cloudflare-image-loader.ts', - } - : { - // We disable image optimisation during static export builds - unoptimized: ENABLE_STATIC_EXPORT, - // We add it to the remote pattern for the static images we use from multiple sources - // to be marked as safe sources (these come from Markdown files) - remotePatterns: [ - new URL('https://avatars.githubusercontent.com/**'), - new URL('https://bestpractices.coreinfrastructure.org/**'), - new URL('https://raw.githubusercontent.com/nodejs/**'), - new URL('https://user-images.githubusercontent.com/**'), - new URL('https://website-assets.oramasearch.com/**'), - ], - }, + images: getImagesConfig(), serverExternalPackages: ['twoslash'], outputFileTracingIncludes: { // Twoslash needs TypeScript declarations to function, and, by default, Next.js @@ -97,12 +73,47 @@ const nextConfig = { 'shiki', ], }, - // If we're building for the Cloudflare deployment we want to set - // an appropriate deploymentId (needed for skew protection) - deploymentId: OPEN_NEXT_CLOUDFLARE - ? (await import('@opennextjs/cloudflare')).getDeploymentId() - : undefined, + deploymentId: await getDeploymentId(), }; +function getImagesConfig() { + if (OPEN_NEXT_CLOUDFLARE) { + // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader + // + // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins + // (https://developers.cloudflare.com/images/transform-images/sources/) + // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). + // + return { + loader: 'custom', + loaderFile: './cloudflare-image-loader.ts', + }; + } + + return { + // We disable image optimisation during static export builds + unoptimized: ENABLE_STATIC_EXPORT, + // We add it to the remote pattern for the static images we use from multiple sources + // to be marked as safe sources (these come from Markdown files) + remotePatterns: [ + new URL('https://avatars.githubusercontent.com/**'), + new URL('https://bestpractices.coreinfrastructure.org/**'), + new URL('https://raw.githubusercontent.com/nodejs/**'), + new URL('https://user-images.githubusercontent.com/**'), + new URL('https://website-assets.oramasearch.com/**'), + ], + }; +} + +async function getDeploymentId() { + if (OPEN_NEXT_CLOUDFLARE) { + // If we're building for the Cloudflare deployment we want to set + // an appropriate deploymentId (needed for skew protection) + return await import('@opennextjs/cloudflare').getDeploymentId(); + } + + return undefined; +} + const withNextIntl = createNextIntlPlugin('./i18n.tsx'); export default withNextIntl(nextConfig); From f137edb2ce4ac94a4dff80aff1c484a7c1635ba7 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 4 Nov 2025 13:02:51 +0000 Subject: [PATCH 09/23] update cloudflare-build-and-deployment --- docs/cloudflare-build-and-deployment.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/cloudflare-build-and-deployment.md b/docs/cloudflare-build-and-deployment.md index 61ff12fb06c3b..f614b6c65e0ed 100644 --- a/docs/cloudflare-build-and-deployment.md +++ b/docs/cloudflare-build-and-deployment.md @@ -19,8 +19,9 @@ Key configurations include: - This is currently set to `fb4a2d0f103c6ff38854ac69eb709272`, which is the ID of a Cloudflare account controlled by Node.js, and used for testing. - `build`: Defines the build command to generate the Node.js filesystem polyfills required for the application to run on Cloudflare Workers. This uses the [`@flarelabs/wrangler-build-time-fs-assets-polyfilling`](https://github.com/flarelabs-net/wrangler-build-time-fs-assets-polyfilling) package. - `alias`: Maps aliases for the Node.js filesystem polyfills generated during the build process. -- `kv_namespaces`: Contains a single KV binding definition for `NEXT_INC_CACHE_KV`. This is used to implement the Next.js incremental cache. - - This is currently set up to a KV in the aforementioned Cloudflare testing account. +- `r2_buckets`: Contains a single R2 binding definition for `NEXT_INC_CACHE_R2_BUCKET`. This is used to implement the Next.js incremental cache. + - This is currently set up to a R2 bucket in the aforementioned Cloudflare testing account. +- `durable_objects`: Contains a single DurableObject binding definition for `NEXT_CACHE_DO_QUEUE`. This is used to implement the Open-next cache queue. ### OpenNext Configuration From ee80f763abd090152e850d6141604bf28926ef38 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 4 Nov 2025 13:15:19 +0000 Subject: [PATCH 10/23] move image-loader file inside cloudflare directory --- .../{cloudflare-image-loader.ts => cloudflare/image-loader.ts} | 0 apps/site/next.config.mjs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename apps/site/{cloudflare-image-loader.ts => cloudflare/image-loader.ts} (100%) diff --git a/apps/site/cloudflare-image-loader.ts b/apps/site/cloudflare/image-loader.ts similarity index 100% rename from apps/site/cloudflare-image-loader.ts rename to apps/site/cloudflare/image-loader.ts diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index d053d62c5259c..6f3eb625c86a9 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -86,7 +86,7 @@ function getImagesConfig() { // return { loader: 'custom', - loaderFile: './cloudflare-image-loader.ts', + loaderFile: './cloudflare/image-loader.ts', }; } From b114d778b55843c645090cf32fe58c4abdd0c4a2 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 4 Nov 2025 14:50:06 +0000 Subject: [PATCH 11/23] add missing parenthesis --- apps/site/next.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index 6f3eb625c86a9..a033f89ec9e88 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -109,7 +109,7 @@ async function getDeploymentId() { if (OPEN_NEXT_CLOUDFLARE) { // If we're building for the Cloudflare deployment we want to set // an appropriate deploymentId (needed for skew protection) - return await import('@opennextjs/cloudflare').getDeploymentId(); + return (await import('@opennextjs/cloudflare')).getDeploymentId(); } return undefined; From b889f9d2a179575c01c3277b7487da3cc25f9414 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 4 Nov 2025 15:58:50 +0000 Subject: [PATCH 12/23] add env variables for R2 cache batch uploads --- .github/workflows/tmp-cloudflare-open-next-deploy.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/tmp-cloudflare-open-next-deploy.yml b/.github/workflows/tmp-cloudflare-open-next-deploy.yml index 73e35b99c522b..4eaea12b33097 100644 --- a/.github/workflows/tmp-cloudflare-open-next-deploy.yml +++ b/.github/workflows/tmp-cloudflare-open-next-deploy.yml @@ -64,3 +64,8 @@ jobs: env: CF_WORKERS_SCRIPTS_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: fb4a2d0f103c6ff38854ac69eb709272 + # Note the R2_* env variables below are useful for speeding up the assets upload + # process, see: https://opennext.js.org/cloudflare/cli#populatecache-command + R2_ACCESS_KEY_ID: ${{ env.R2_ACCESS_KEY_ID }} + R2_SECRET_ACCESS_KEY`: ${{ secrets.R2_SECRET_ACCESS_KEY }} From 10a5ae616ce7b7f338abb103c3876fe8cd995022 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 4 Nov 2025 16:03:35 +0000 Subject: [PATCH 13/23] remove extra backtick --- .github/workflows/tmp-cloudflare-open-next-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tmp-cloudflare-open-next-deploy.yml b/.github/workflows/tmp-cloudflare-open-next-deploy.yml index 4eaea12b33097..0a6d7072c2a6a 100644 --- a/.github/workflows/tmp-cloudflare-open-next-deploy.yml +++ b/.github/workflows/tmp-cloudflare-open-next-deploy.yml @@ -68,4 +68,4 @@ jobs: # Note the R2_* env variables below are useful for speeding up the assets upload # process, see: https://opennext.js.org/cloudflare/cli#populatecache-command R2_ACCESS_KEY_ID: ${{ env.R2_ACCESS_KEY_ID }} - R2_SECRET_ACCESS_KEY`: ${{ secrets.R2_SECRET_ACCESS_KEY }} + R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} From 96261617ad348283d88d5617f279891d5693a475 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 11 Nov 2025 10:40:12 +0000 Subject: [PATCH 14/23] allow the open-next version of the site to be built using turbo and remove the `build:default` script --- apps/site/open-next.config.ts | 1 - apps/site/package.json | 7 +++---- pnpm-lock.yaml | 11 ++++++----- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/site/open-next.config.ts b/apps/site/open-next.config.ts index e7101abb4df1b..433b6c660d9c2 100644 --- a/apps/site/open-next.config.ts +++ b/apps/site/open-next.config.ts @@ -19,7 +19,6 @@ const cloudflareConfig = defineCloudflareConfig({ const openNextConfig: OpenNextConfig = { ...cloudflareConfig, - buildCommand: 'pnpm build:default', cloudflare: { skewProtection: { enabled: true, diff --git a/apps/site/package.json b/apps/site/package.json index 4f802d27aa4eb..079f8e7e5a1f4 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -3,15 +3,14 @@ "type": "module", "scripts": { "prebuild": "node --run build:blog-data", - "build": "node --run build:default -- --turbo", + "build": "cross-env NODE_NO_WARNINGS=1 next build --turbo", "build:blog-data": "cross-env NODE_NO_WARNINGS=1 node ./scripts/blog-data/index.mjs", "build:blog-data:watch": "node --watch --watch-path=pages/en/blog ./scripts/blog-data/index.mjs", - "build:default": "cross-env NODE_NO_WARNINGS=1 next build", "cloudflare:build:worker": "OPEN_NEXT_CLOUDFLARE=true opennextjs-cloudflare build", "cloudflare:deploy": "opennextjs-cloudflare deploy", "cloudflare:preview": "wrangler dev", "predeploy": "node --run build:blog-data", - "deploy": "cross-env NEXT_PUBLIC_STATIC_EXPORT=true node --run build:default -- --turbo", + "deploy": "cross-env NEXT_PUBLIC_STATIC_EXPORT=true node --run build", "predev": "node --run build:blog-data", "dev": "cross-env NODE_NO_WARNINGS=1 next dev --turbo", "lint": "node --run lint:js && node --run lint:css && node --run lint:md", @@ -83,7 +82,7 @@ "@flarelabs-net/wrangler-build-time-fs-assets-polyfilling": "^0.0.1", "@next/eslint-plugin-next": "15.5.4", "@node-core/remark-lint": "workspace:*", - "@opennextjs/cloudflare": "^1.11.0", + "@opennextjs/cloudflare": "^1.12.0", "@playwright/test": "^1.56.1", "@testing-library/user-event": "~14.6.1", "@types/mdast": "^4.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e7eb64dfaed9..c5c5010009644 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -227,8 +227,8 @@ importers: specifier: workspace:* version: link:../../packages/remark-lint '@opennextjs/cloudflare': - specifier: ^1.11.0 - version: 1.11.0(wrangler@4.45.3) + specifier: ^1.12.0 + version: 1.12.0(wrangler@4.45.3) '@playwright/test': specifier: ^1.56.1 version: 1.56.1 @@ -2075,8 +2075,8 @@ packages: resolution: {integrity: sha512-elpMb0fJZc0a1VtymedFa7P1lYcyOmt+Pwqyacpq2C/SvbETIeBlW/Xle/vY95ICtccKUxITI8MtonrCo2+2/Q==} hasBin: true - '@opennextjs/cloudflare@1.11.0': - resolution: {integrity: sha512-2QVZLjCr3hPwkcGEetLarTZvlNIHsGV3j2+i+KNsjFIBgvsnxhmRqJbT0u8J9cVMFKNh19hSOTOmUKs1T3DWig==} + '@opennextjs/cloudflare@1.12.0': + resolution: {integrity: sha512-vTw8N9tEISI2smkB0mvVVR1DOimE942DKOxzzwaQ0RrWgLSF97qf+4rnk8wwss2RAnF41pPDHzPO1AupnJmm3Q==} hasBin: true peerDependencies: wrangler: ^4.38.0 @@ -7014,6 +7014,7 @@ packages: rclone.js@0.6.6: resolution: {integrity: sha512-Dxh34cab/fNjFq5SSm0fYLNkGzG2cQSBy782UW9WwxJCEiVO4cGXkvaXcNlgv817dK8K8PuQ+NHUqSAMMhWujQ==} engines: {node: '>=12'} + cpu: [arm, arm64, mips, mipsel, x32, x64] os: [darwin, freebsd, linux, openbsd, sunos, win32] hasBin: true @@ -10652,7 +10653,7 @@ snapshots: - aws-crt - supports-color - '@opennextjs/cloudflare@1.11.0(wrangler@4.45.3)': + '@opennextjs/cloudflare@1.12.0(wrangler@4.45.3)': dependencies: '@dotenvx/dotenvx': 1.31.0 '@opennextjs/aws': 3.8.5 From 9d6385009a14384b88b629ab7591e39155e941a9 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Fri, 21 Nov 2025 02:16:09 +0000 Subject: [PATCH 15/23] Bump `@opennextjs/cloudflare` to `1.13.1` and remove no-longer needed R2 env variables --- .../tmp-cloudflare-open-next-deploy.yml | 4 - apps/site/package.json | 2 +- pnpm-lock.yaml | 207 +++++++----------- 3 files changed, 81 insertions(+), 132 deletions(-) diff --git a/.github/workflows/tmp-cloudflare-open-next-deploy.yml b/.github/workflows/tmp-cloudflare-open-next-deploy.yml index 0a6d7072c2a6a..bb8aaa0e37474 100644 --- a/.github/workflows/tmp-cloudflare-open-next-deploy.yml +++ b/.github/workflows/tmp-cloudflare-open-next-deploy.yml @@ -65,7 +65,3 @@ jobs: CF_WORKERS_SCRIPTS_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: fb4a2d0f103c6ff38854ac69eb709272 - # Note the R2_* env variables below are useful for speeding up the assets upload - # process, see: https://opennext.js.org/cloudflare/cli#populatecache-command - R2_ACCESS_KEY_ID: ${{ env.R2_ACCESS_KEY_ID }} - R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} diff --git a/apps/site/package.json b/apps/site/package.json index 079f8e7e5a1f4..afdfe6d539727 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -82,7 +82,7 @@ "@flarelabs-net/wrangler-build-time-fs-assets-polyfilling": "^0.0.1", "@next/eslint-plugin-next": "15.5.4", "@node-core/remark-lint": "workspace:*", - "@opennextjs/cloudflare": "^1.12.0", + "@opennextjs/cloudflare": "^1.13.1", "@playwright/test": "^1.56.1", "@testing-library/user-event": "~14.6.1", "@types/mdast": "^4.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5c5010009644..37c47f273df02 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -227,8 +227,8 @@ importers: specifier: workspace:* version: link:../../packages/remark-lint '@opennextjs/cloudflare': - specifier: ^1.12.0 - version: 1.12.0(wrangler@4.45.3) + specifier: ^1.13.1 + version: 1.13.1(wrangler@4.45.3) '@playwright/test': specifier: ^1.56.1 version: 1.56.1 @@ -620,62 +620,62 @@ packages: '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} - '@ast-grep/napi-darwin-arm64@0.35.0': - resolution: {integrity: sha512-T+MN4Oinc+sXjXCIHzfxDDWY7r2pKgPxM6zVeVlkMTrJV2mJtyKYBIS+CABhRM6kflps2T2I6l4DGaKV/8Ym9w==} + '@ast-grep/napi-darwin-arm64@0.40.0': + resolution: {integrity: sha512-ZMjl5yLhKjxdwbqEEdMizgQdWH2NrWsM6Px+JuGErgCDe6Aedq9yurEPV7veybGdLVJQhOah6htlSflXxjHnYA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@ast-grep/napi-darwin-x64@0.35.0': - resolution: {integrity: sha512-pEYiN6JI1HY2uWhMYJ9+3yIMyVYKuYdFzeD+dL7odA3qzK0o9N9AM3/NOt4ynU2EhufaWCJr0P5NoQ636qN6MQ==} + '@ast-grep/napi-darwin-x64@0.40.0': + resolution: {integrity: sha512-f9Ol5oQKNRMBkvDtzBK1WiNn2/3eejF2Pn9xwTj7PhXuSFseedOspPYllxQo0gbwUlw/DJqGFTce/jarhR/rBw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@ast-grep/napi-linux-arm64-gnu@0.35.0': - resolution: {integrity: sha512-NBuzQngABGKz7lhG08IQb+7nPqUx81Ol37xmS3ZhVSdSgM0mtp93rCbgFTkJcAFE8IMfCHQSg7G4g0Iotz4ABQ==} + '@ast-grep/napi-linux-arm64-gnu@0.40.0': + resolution: {integrity: sha512-+tO+VW5GDhT9jGkKOK+3b8+ohKjC98WTzn7wSskd/myyhK3oYL1WTKqCm07WSYBZOJvb3z+WaX+wOUrc4bvtyQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@ast-grep/napi-linux-arm64-musl@0.35.0': - resolution: {integrity: sha512-1EcvHPwyWpCL/96LuItBYGfeI5FaMTRvL+dHbO/hL5q1npqbb5qn+ppJwtNOjTPz8tayvgggxVk9T4C2O7taYA==} + '@ast-grep/napi-linux-arm64-musl@0.40.0': + resolution: {integrity: sha512-MS9qalLRjUnF2PCzuTKTvCMVSORYHxxe3Qa0+SSaVULsXRBmuy5C/b1FeWwMFnwNnC0uie3VDet31Zujwi8q6A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@ast-grep/napi-linux-x64-gnu@0.35.0': - resolution: {integrity: sha512-FDzNdlqmQnsiWXhnLxusw5AOfEcEM+5xtmrnAf3SBRFr86JyWD9qsynnFYC2pnP9hlMfifNH2TTmMpyGJW49Xw==} + '@ast-grep/napi-linux-x64-gnu@0.40.0': + resolution: {integrity: sha512-BeHZVMNXhM3WV3XE2yghO0fRxhMOt8BTN972p5piYEQUvKeSHmS8oeGcs6Ahgx5znBclqqqq37ZfioYANiTqJA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@ast-grep/napi-linux-x64-musl@0.35.0': - resolution: {integrity: sha512-wlmndjfBafT8u5p4DBnoRQyoCSGNuVSz7rT3TqhvlHcPzUouRWMn95epU9B1LNLyjXvr9xHeRjSktyCN28w57Q==} + '@ast-grep/napi-linux-x64-musl@0.40.0': + resolution: {integrity: sha512-rG1YujF7O+lszX8fd5u6qkFTuv4FwHXjWvt1CCvCxXwQLSY96LaCW88oVKg7WoEYQh54y++Fk57F+Wh9Gv9nVQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@ast-grep/napi-win32-arm64-msvc@0.35.0': - resolution: {integrity: sha512-gkhJeYc4rrZLX2icLxalPikTLMR57DuIYLwLr9g+StHYXIsGHrbfrE6Nnbdd8Izfs34ArFCrcwdaMrGlvOPSeg==} + '@ast-grep/napi-win32-arm64-msvc@0.40.0': + resolution: {integrity: sha512-9SqmnQqd4zTEUk6yx0TuW2ycZZs2+e569O/R0QnhSiQNpgwiJCYOe/yPS0BC9HkiaozQm6jjAcasWpFtz/dp+w==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@ast-grep/napi-win32-ia32-msvc@0.35.0': - resolution: {integrity: sha512-OdUuRa3chHCZ65y+qALfkUjz0W0Eg21YZ9TyPquV5why07M6HAK38mmYGzLxFH6294SvRQhs+FA/rAfbKeH0jA==} + '@ast-grep/napi-win32-ia32-msvc@0.40.0': + resolution: {integrity: sha512-0JkdBZi5l9vZhGEO38A1way0LmLRDU5Vos6MXrLIOVkymmzDTDlCdY394J1LMmmsfwWcyJg6J7Yv2dw41MCxDQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@ast-grep/napi-win32-x64-msvc@0.35.0': - resolution: {integrity: sha512-pcQRUHqbroTN1oQ56V982a7IZTUUySQYWa2KEyksiifHGuBuitlzcyzFGjT96ThcqD9XW0UVJMvpoF2Qjh006Q==} + '@ast-grep/napi-win32-x64-msvc@0.40.0': + resolution: {integrity: sha512-Hk2IwfPqMFGZt5SRxsoWmGLxBXxprow4LRp1eG6V8EEiJCNHxZ9ZiEaIc5bNvMDBjHVSnqZAXT22dROhrcSKQg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@ast-grep/napi@0.35.0': - resolution: {integrity: sha512-3ucaaSxV6fxXoqHrE/rxAvP1THnDdY5jNzGlnvx+JvnY9C/dSRKc0jlRMRz59N3El572+/yNRUUpAV1T9aBJug==} + '@ast-grep/napi@0.40.0': + resolution: {integrity: sha512-tq6nO/8KwUF/mHuk1ECaAOSOlz2OB/PmygnvprJzyAHGRVzdcffblaOOWe90M9sGz5MAasXoF+PTcayQj9TKKA==} engines: {node: '>= 10'} '@aws-crypto/crc32@5.2.0': @@ -2071,15 +2071,15 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opennextjs/aws@3.8.5': - resolution: {integrity: sha512-elpMb0fJZc0a1VtymedFa7P1lYcyOmt+Pwqyacpq2C/SvbETIeBlW/Xle/vY95ICtccKUxITI8MtonrCo2+2/Q==} + '@opennextjs/aws@3.9.0': + resolution: {integrity: sha512-04VpIbnKOJwBEoAdSUI1lbbDRWj482oEbRggXtAs+hXOCp54fxDRouNmonvXPoRq6Wbmry73PI1Ko6g3ygL2Hg==} hasBin: true - '@opennextjs/cloudflare@1.12.0': - resolution: {integrity: sha512-vTw8N9tEISI2smkB0mvVVR1DOimE942DKOxzzwaQ0RrWgLSF97qf+4rnk8wwss2RAnF41pPDHzPO1AupnJmm3Q==} + '@opennextjs/cloudflare@1.13.1': + resolution: {integrity: sha512-JuXUdpUcB8LYBgG/M3ms+3tgot+zpehchnXmG0vlBUr9GMNZcrcobMEPJLK9ywb/7L8dUXryx+yzqC0EdR5iRw==} hasBin: true peerDependencies: - wrangler: ^4.38.0 + wrangler: ^4.49.1 '@opentelemetry/api-logs@0.206.0': resolution: {integrity: sha512-yIVDu9jX//nV5wSMLZLdHdb1SKHIMj9k+wQVFtln5Flcgdldz9BkHtavvExQiJqBZg2OpEEJEZmzQazYztdz2A==} @@ -3578,9 +3578,6 @@ packages: '@types/node@22.18.6': resolution: {integrity: sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==} - '@types/rclone.js@0.6.3': - resolution: {integrity: sha512-BssKAAVRY//fxGKso8SatyOwiD7X0toDofNnVxZlIXmN7UHrn2UBTxldNAjgUvWA91qJyeEPfKmeJpZVhLugXg==} - '@types/react@19.2.2': resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} @@ -4000,10 +3997,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} - engines: {node: '>=12.0'} - agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -4528,15 +4521,6 @@ packages: supports-color: optional: true - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -5077,8 +5061,8 @@ packages: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} - express@5.0.1: - resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} engines: {node: '>= 18'} exsolve@1.0.7: @@ -5328,6 +5312,11 @@ packages: engines: {node: 20 || >=22} hasBin: true + glob@12.0.0: + resolution: {integrity: sha512-5Qcll1z7IKgHr5g485ePDdHcNQY0k2dtv/bjYy0iuyGxQw2qSOiiXUXJ+AYQpg3HNoUMHqAruX478Jeev7UULw==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -6199,10 +6188,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -6357,6 +6342,10 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -6399,9 +6388,6 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -6986,10 +6972,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - qs@6.14.0: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} @@ -7011,13 +6993,6 @@ packages: resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} engines: {node: '>= 0.8'} - rclone.js@0.6.6: - resolution: {integrity: sha512-Dxh34cab/fNjFq5SSm0fYLNkGzG2cQSBy782UW9WwxJCEiVO4cGXkvaXcNlgv817dK8K8PuQ+NHUqSAMMhWujQ==} - engines: {node: '>=12'} - cpu: [arm, arm64, mips, mipsel, x32, x64] - os: [darwin, freebsd, linux, openbsd, sunos, win32] - hasBin: true - react-docgen-typescript@2.4.0: resolution: {integrity: sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg==} peerDependencies: @@ -8201,10 +8176,6 @@ packages: utila@0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -8532,44 +8503,44 @@ snapshots: '@asamuzakjp/nwsapi@2.3.9': {} - '@ast-grep/napi-darwin-arm64@0.35.0': + '@ast-grep/napi-darwin-arm64@0.40.0': optional: true - '@ast-grep/napi-darwin-x64@0.35.0': + '@ast-grep/napi-darwin-x64@0.40.0': optional: true - '@ast-grep/napi-linux-arm64-gnu@0.35.0': + '@ast-grep/napi-linux-arm64-gnu@0.40.0': optional: true - '@ast-grep/napi-linux-arm64-musl@0.35.0': + '@ast-grep/napi-linux-arm64-musl@0.40.0': optional: true - '@ast-grep/napi-linux-x64-gnu@0.35.0': + '@ast-grep/napi-linux-x64-gnu@0.40.0': optional: true - '@ast-grep/napi-linux-x64-musl@0.35.0': + '@ast-grep/napi-linux-x64-musl@0.40.0': optional: true - '@ast-grep/napi-win32-arm64-msvc@0.35.0': + '@ast-grep/napi-win32-arm64-msvc@0.40.0': optional: true - '@ast-grep/napi-win32-ia32-msvc@0.35.0': + '@ast-grep/napi-win32-ia32-msvc@0.40.0': optional: true - '@ast-grep/napi-win32-x64-msvc@0.35.0': + '@ast-grep/napi-win32-x64-msvc@0.40.0': optional: true - '@ast-grep/napi@0.35.0': + '@ast-grep/napi@0.40.0': optionalDependencies: - '@ast-grep/napi-darwin-arm64': 0.35.0 - '@ast-grep/napi-darwin-x64': 0.35.0 - '@ast-grep/napi-linux-arm64-gnu': 0.35.0 - '@ast-grep/napi-linux-arm64-musl': 0.35.0 - '@ast-grep/napi-linux-x64-gnu': 0.35.0 - '@ast-grep/napi-linux-x64-musl': 0.35.0 - '@ast-grep/napi-win32-arm64-msvc': 0.35.0 - '@ast-grep/napi-win32-ia32-msvc': 0.35.0 - '@ast-grep/napi-win32-x64-msvc': 0.35.0 + '@ast-grep/napi-darwin-arm64': 0.40.0 + '@ast-grep/napi-darwin-x64': 0.40.0 + '@ast-grep/napi-linux-arm64-gnu': 0.40.0 + '@ast-grep/napi-linux-arm64-musl': 0.40.0 + '@ast-grep/napi-linux-x64-gnu': 0.40.0 + '@ast-grep/napi-linux-x64-musl': 0.40.0 + '@ast-grep/napi-win32-arm64-msvc': 0.40.0 + '@ast-grep/napi-win32-ia32-msvc': 0.40.0 + '@ast-grep/napi-win32-x64-msvc': 0.40.0 '@aws-crypto/crc32@5.2.0': dependencies: @@ -10630,9 +10601,9 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opennextjs/aws@3.8.5': + '@opennextjs/aws@3.9.0': dependencies: - '@ast-grep/napi': 0.35.0 + '@ast-grep/napi': 0.40.0 '@aws-sdk/client-cloudfront': 3.398.0 '@aws-sdk/client-dynamodb': 3.859.0 '@aws-sdk/client-lambda': 3.859.0 @@ -10645,7 +10616,7 @@ snapshots: chalk: 5.6.2 cookie: 1.0.2 esbuild: 0.25.4 - express: 5.0.1 + express: 5.1.0 path-to-regexp: 6.3.0 urlpattern-polyfill: 10.1.0 yaml: 2.8.1 @@ -10653,15 +10624,14 @@ snapshots: - aws-crt - supports-color - '@opennextjs/cloudflare@1.12.0(wrangler@4.45.3)': + '@opennextjs/cloudflare@1.13.1(wrangler@4.45.3)': dependencies: + '@ast-grep/napi': 0.40.0 '@dotenvx/dotenvx': 1.31.0 - '@opennextjs/aws': 3.8.5 - '@types/rclone.js': 0.6.3 + '@opennextjs/aws': 3.9.0 cloudflare: 4.5.0 enquirer: 2.4.1 - glob: 11.0.3 - rclone.js: 0.6.6 + glob: 12.0.0 ts-tqdm: 0.8.6 wrangler: 4.45.3 yargs: 18.0.0 @@ -12402,10 +12372,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/rclone.js@0.6.3': - dependencies: - '@types/node': 22.18.6 - '@types/react@19.2.2': dependencies: csstype: 3.1.3 @@ -12815,8 +12781,6 @@ snapshots: acorn@8.15.0: {} - adm-zip@0.5.16: {} - agent-base@7.1.4: {} agentkeepalive@4.6.0: @@ -13355,10 +13319,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.6: - dependencies: - ms: 2.1.2 - debug@4.4.1: dependencies: ms: 2.1.3 @@ -14154,7 +14114,7 @@ snapshots: exit-hook@2.2.1: {} - express@5.0.1: + express@5.1.0: dependencies: accepts: 2.0.0 body-parser: 2.2.0 @@ -14162,8 +14122,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.1 cookie-signature: 1.2.2 - debug: 4.3.6 - depd: 2.0.0 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -14171,22 +14130,18 @@ snapshots: fresh: 2.0.0 http-errors: 2.0.0 merge-descriptors: 2.0.0 - methods: 1.1.2 mime-types: 3.0.1 on-finished: 2.4.1 once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.13.0 + qs: 6.14.0 range-parser: 1.2.1 router: 2.2.0 - safe-buffer: 5.2.1 send: 1.2.0 serve-static: 2.2.0 - setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 2.0.1 - utils-merge: 1.0.1 vary: 1.1.2 transitivePeerDependencies: - supports-color @@ -14465,6 +14420,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.0 + glob@12.0.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.1.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -15549,8 +15513,6 @@ snapshots: merge2@1.4.1: {} - methods@1.1.2: {} - micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.2.0 @@ -15869,6 +15831,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -15899,8 +15865,6 @@ snapshots: mri@1.2.0: {} - ms@2.1.2: {} - ms@2.1.3: {} nano-spawn@1.0.3: {} @@ -16417,10 +16381,6 @@ snapshots: punycode@2.3.1: {} - qs@6.13.0: - dependencies: - side-channel: 1.1.0 - qs@6.14.0: dependencies: side-channel: 1.1.0 @@ -16442,11 +16402,6 @@ snapshots: iconv-lite: 0.6.3 unpipe: 1.0.0 - rclone.js@0.6.6: - dependencies: - adm-zip: 0.5.16 - mri: 1.2.0 - react-docgen-typescript@2.4.0(typescript@5.8.3): dependencies: typescript: 5.8.3 @@ -18268,8 +18223,6 @@ snapshots: utila@0.4.0: {} - utils-merge@1.0.1: {} - uuid@9.0.1: {} uvu@0.5.6: From 5134a76c099ec59463b3bb75b01507f0d501b102 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 25 Nov 2025 00:10:20 +0000 Subject: [PATCH 16/23] update image-loader code as suggested --- apps/site/cloudflare/image-loader.ts | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/apps/site/cloudflare/image-loader.ts b/apps/site/cloudflare/image-loader.ts index 04b873f7224b6..2137028e23db4 100644 --- a/apps/site/cloudflare/image-loader.ts +++ b/apps/site/cloudflare/image-loader.ts @@ -13,10 +13,21 @@ export default function cloudflareLoader({ // Serve the original image when using `next dev` return src; } - const params = [`width=${width}`]; - if (quality) { - params.push(`quality=${quality}`); + + // Sets the requested width by next/image + const params = new Map(); + + if (width > 0) { + params.set('width', `${width}`); + } + + if (quality && quality > 0) { + params.set('quality', `${quality}`); } - const paramsString = params.join(','); - return `/cdn-cgi/image/${paramsString}/${normalizeSrc(src)}`; + + const pathParams = [...params] + .map(([key, value]) => `${key}=${value}`) + .join(','); + + return `/cdn-cgi/image/${pathParams}/${normalizeSrc(src)}`; } From 2a984f805611431bd9b22453b8fc7b7c9a7e9c72 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 25 Nov 2025 00:16:22 +0000 Subject: [PATCH 17/23] use arrow functions --- apps/site/next.config.mjs | 78 +++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index a033f89ec9e88..711539493bf03 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -8,6 +8,45 @@ import { } from './next.constants.mjs'; import { redirects, rewrites } from './next.rewrites.mjs'; +const getImagesConfig = () => { + if (OPEN_NEXT_CLOUDFLARE) { + // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader + // + // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins + // (https://developers.cloudflare.com/images/transform-images/sources/) + // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). + // + return { + loader: 'custom', + loaderFile: './cloudflare/image-loader.ts', + }; + } + + return { + // We disable image optimisation during static export builds + unoptimized: ENABLE_STATIC_EXPORT, + // We add it to the remote pattern for the static images we use from multiple sources + // to be marked as safe sources (these come from Markdown files) + remotePatterns: [ + new URL('https://avatars.githubusercontent.com/**'), + new URL('https://bestpractices.coreinfrastructure.org/**'), + new URL('https://raw.githubusercontent.com/nodejs/**'), + new URL('https://user-images.githubusercontent.com/**'), + new URL('https://website-assets.oramasearch.com/**'), + ], + }; +}; + +const getDeploymentId = async () => { + if (OPEN_NEXT_CLOUDFLARE) { + // If we're building for the Cloudflare deployment we want to set + // an appropriate deploymentId (needed for skew protection) + return (await import('@opennextjs/cloudflare')).getDeploymentId(); + } + + return undefined; +}; + /** @type {import('next').NextConfig} */ const nextConfig = { allowedDevOrigins: ['10.1.1.232'], @@ -76,44 +115,5 @@ const nextConfig = { deploymentId: await getDeploymentId(), }; -function getImagesConfig() { - if (OPEN_NEXT_CLOUDFLARE) { - // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader - // - // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins - // (https://developers.cloudflare.com/images/transform-images/sources/) - // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). - // - return { - loader: 'custom', - loaderFile: './cloudflare/image-loader.ts', - }; - } - - return { - // We disable image optimisation during static export builds - unoptimized: ENABLE_STATIC_EXPORT, - // We add it to the remote pattern for the static images we use from multiple sources - // to be marked as safe sources (these come from Markdown files) - remotePatterns: [ - new URL('https://avatars.githubusercontent.com/**'), - new URL('https://bestpractices.coreinfrastructure.org/**'), - new URL('https://raw.githubusercontent.com/nodejs/**'), - new URL('https://user-images.githubusercontent.com/**'), - new URL('https://website-assets.oramasearch.com/**'), - ], - }; -} - -async function getDeploymentId() { - if (OPEN_NEXT_CLOUDFLARE) { - // If we're building for the Cloudflare deployment we want to set - // an appropriate deploymentId (needed for skew protection) - return (await import('@opennextjs/cloudflare')).getDeploymentId(); - } - - return undefined; -} - const withNextIntl = createNextIntlPlugin('./i18n.tsx'); export default withNextIntl(nextConfig); From d4d116a42b9c20e3ff524c7c2397be7080a052e6 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 25 Nov 2025 00:19:05 +0000 Subject: [PATCH 18/23] move getImagesConfig to its own file --- apps/site/next.config.mjs | 30 +----------------------------- apps/site/next.image.config.mjs | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 29 deletions(-) create mode 100644 apps/site/next.image.config.mjs diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index 711539493bf03..5845e6bfbf6cc 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -6,37 +6,9 @@ import { ENABLE_STATIC_EXPORT, OPEN_NEXT_CLOUDFLARE, } from './next.constants.mjs'; +import { getImagesConfig } from './next.image.config.mjs'; import { redirects, rewrites } from './next.rewrites.mjs'; -const getImagesConfig = () => { - if (OPEN_NEXT_CLOUDFLARE) { - // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader - // - // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins - // (https://developers.cloudflare.com/images/transform-images/sources/) - // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). - // - return { - loader: 'custom', - loaderFile: './cloudflare/image-loader.ts', - }; - } - - return { - // We disable image optimisation during static export builds - unoptimized: ENABLE_STATIC_EXPORT, - // We add it to the remote pattern for the static images we use from multiple sources - // to be marked as safe sources (these come from Markdown files) - remotePatterns: [ - new URL('https://avatars.githubusercontent.com/**'), - new URL('https://bestpractices.coreinfrastructure.org/**'), - new URL('https://raw.githubusercontent.com/nodejs/**'), - new URL('https://user-images.githubusercontent.com/**'), - new URL('https://website-assets.oramasearch.com/**'), - ], - }; -}; - const getDeploymentId = async () => { if (OPEN_NEXT_CLOUDFLARE) { // If we're building for the Cloudflare deployment we want to set diff --git a/apps/site/next.image.config.mjs b/apps/site/next.image.config.mjs new file mode 100644 index 0000000000000..58e5e17aeba41 --- /dev/null +++ b/apps/site/next.image.config.mjs @@ -0,0 +1,33 @@ +import { + ENABLE_STATIC_EXPORT, + OPEN_NEXT_CLOUDFLARE, +} from './next.constants.mjs'; + +export const getImagesConfig = () => { + if (OPEN_NEXT_CLOUDFLARE) { + // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader + // + // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins + // (https://developers.cloudflare.com/images/transform-images/sources/) + // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). + // + return { + loader: 'custom', + loaderFile: './cloudflare/image-loader.ts', + }; + } + + return { + // We disable image optimisation during static export builds + unoptimized: ENABLE_STATIC_EXPORT, + // We add it to the remote pattern for the static images we use from multiple sources + // to be marked as safe sources (these come from Markdown files) + remotePatterns: [ + new URL('https://avatars.githubusercontent.com/**'), + new URL('https://bestpractices.coreinfrastructure.org/**'), + new URL('https://raw.githubusercontent.com/nodejs/**'), + new URL('https://user-images.githubusercontent.com/**'), + new URL('https://website-assets.oramasearch.com/**'), + ], + }; +}; From 22df719fb2e91025dbdb1ded3e84c251dd49811e Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 25 Nov 2025 00:20:47 +0000 Subject: [PATCH 19/23] add mapping from string urls to URL objects --- apps/site/next.image.config.mjs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/site/next.image.config.mjs b/apps/site/next.image.config.mjs index 58e5e17aeba41..eb6314752adc2 100644 --- a/apps/site/next.image.config.mjs +++ b/apps/site/next.image.config.mjs @@ -3,13 +3,21 @@ import { OPEN_NEXT_CLOUDFLARE, } from './next.constants.mjs'; +const remotePatterns = [ + 'https://avatars.githubusercontent.com/**', + 'https://bestpractices.coreinfrastructure.org/**', + 'https://raw.githubusercontent.com/nodejs/**', + 'https://user-images.githubusercontent.com/**', + 'https://website-assets.oramasearch.com/**', +]; + export const getImagesConfig = () => { if (OPEN_NEXT_CLOUDFLARE) { // If we're building for the Cloudflare deployment we want to use the custom cloudflare image loader // // Important: The custom loader ignores `remotePatterns` as those are configured as allowed source origins // (https://developers.cloudflare.com/images/transform-images/sources/) - // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` below). + // in the Cloudflare dashboard itself instead (to the exact same values present in `remotePatterns` above). // return { loader: 'custom', @@ -22,12 +30,6 @@ export const getImagesConfig = () => { unoptimized: ENABLE_STATIC_EXPORT, // We add it to the remote pattern for the static images we use from multiple sources // to be marked as safe sources (these come from Markdown files) - remotePatterns: [ - new URL('https://avatars.githubusercontent.com/**'), - new URL('https://bestpractices.coreinfrastructure.org/**'), - new URL('https://raw.githubusercontent.com/nodejs/**'), - new URL('https://user-images.githubusercontent.com/**'), - new URL('https://website-assets.oramasearch.com/**'), - ], + remotePatterns: remotePatterns.map(url => new URL(url)), }; }; From 5bbe6f7dcb71fc9cea7465cfd2f2eb2f5abe99cb Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 25 Nov 2025 21:43:19 +0000 Subject: [PATCH 20/23] move cloudflare constant in `next.constants.cloudflare.mjs` --- apps/site/next.config.mjs | 7 ++----- apps/site/next.constants.cloudflare.mjs | 12 ++++++++++++ apps/site/next.constants.mjs | 11 ----------- apps/site/next.image.config.mjs | 6 ++---- 4 files changed, 16 insertions(+), 20 deletions(-) create mode 100644 apps/site/next.constants.cloudflare.mjs diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index 5845e6bfbf6cc..9f2faa4c98acf 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -1,11 +1,8 @@ 'use strict'; import createNextIntlPlugin from 'next-intl/plugin'; -import { - BASE_PATH, - ENABLE_STATIC_EXPORT, - OPEN_NEXT_CLOUDFLARE, -} from './next.constants.mjs'; +import { OPEN_NEXT_CLOUDFLARE } from './next.constants.cloudflare.mjs'; +import { BASE_PATH, ENABLE_STATIC_EXPORT } from './next.constants.mjs'; import { getImagesConfig } from './next.image.config.mjs'; import { redirects, rewrites } from './next.rewrites.mjs'; diff --git a/apps/site/next.constants.cloudflare.mjs b/apps/site/next.constants.cloudflare.mjs new file mode 100644 index 0000000000000..a87b3ed2a5214 --- /dev/null +++ b/apps/site/next.constants.cloudflare.mjs @@ -0,0 +1,12 @@ +'use strict'; + +/** + * Whether the build process is targeting the Cloudflare open-next build or not. + * + * TODO: The `OPEN_NEXT_CLOUDFLARE` environment variable is being + * defined in the worker building script, ideally the open-next + * adapter should set it itself when it invokes the Next.js build + * process, once it does that remove the manual `OPEN_NEXT_CLOUDFLARE` + * definition in the package.json script. + */ +export const OPEN_NEXT_CLOUDFLARE = process.env.OPEN_NEXT_CLOUDFLARE; diff --git a/apps/site/next.constants.mjs b/apps/site/next.constants.mjs index a9265beb2f837..8a8e9ec4196cb 100644 --- a/apps/site/next.constants.mjs +++ b/apps/site/next.constants.mjs @@ -213,14 +213,3 @@ export const EOL_VERSION_IDENTIFIER = 'End-of-life'; */ export const VULNERABILITIES_URL = 'https://raw.githubusercontent.com/nodejs/security-wg/main/vuln/core/index.json'; - -/** - * Whether the build process is targeting the Cloudflare open-next build or not. - * - * TODO: The `OPEN_NEXT_CLOUDFLARE` environment variable is being - * defined in the worker building script, ideally the open-next - * adapter should set it itself when it invokes the Next.js build - * process, once it does that remove the manual `OPEN_NEXT_CLOUDFLARE` - * definition in the package.json script. - */ -export const OPEN_NEXT_CLOUDFLARE = process.env.OPEN_NEXT_CLOUDFLARE; diff --git a/apps/site/next.image.config.mjs b/apps/site/next.image.config.mjs index eb6314752adc2..519523ca2aafe 100644 --- a/apps/site/next.image.config.mjs +++ b/apps/site/next.image.config.mjs @@ -1,7 +1,5 @@ -import { - ENABLE_STATIC_EXPORT, - OPEN_NEXT_CLOUDFLARE, -} from './next.constants.mjs'; +import { OPEN_NEXT_CLOUDFLARE } from './next.constants.cloudflare.mjs'; +import { ENABLE_STATIC_EXPORT } from './next.constants.mjs'; const remotePatterns = [ 'https://avatars.githubusercontent.com/**', From dbf3b69426db2e45dcc7cbaf43de5b77ea190096 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 25 Nov 2025 21:54:25 +0000 Subject: [PATCH 21/23] add brief documentation regarding the cloudflare image loader --- docs/cloudflare-build-and-deployment.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/cloudflare-build-and-deployment.md b/docs/cloudflare-build-and-deployment.md index f614b6c65e0ed..79917e42db45e 100644 --- a/docs/cloudflare-build-and-deployment.md +++ b/docs/cloudflare-build-and-deployment.md @@ -46,6 +46,14 @@ The OpenNext skew protection requires the following environment variables to be Additionally, when deploying, an extra `CF_WORKERS_SCRIPTS_API_TOKEN` environment variable needs to be set to an API token that has the `Workers Scripts:Read` permission available on the Worker's account. +### Image loader + +When deployed on the Cloudflare network a custom image loader is required. We set such loader in the Next.js config file when the `OPEN_NEXT_CLOUDFLARE` environment variable is set (which indicates that we're building the application for the Cloudflare deployment). + +The custom loader can be found at [`site/cloudflare/image-loader.ts`](../apps/site/cloudflare/image-loader.ts). + +For more details on this see: https://developers.cloudflare.com/images/transform-images/integrate-with-frameworks/#global-loader + ## Scripts Preview and deployment of the website targeting the Cloudflare network is implemented via the following two commands: From 75fad0b8a414035d9f3b5b730a0f0e9648f00739 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 25 Nov 2025 22:03:53 +0000 Subject: [PATCH 22/23] Update apps/site/next.config.mjs Co-authored-by: Claudio Wunder Signed-off-by: Dario Piotrowicz --- apps/site/next.config.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index 9f2faa4c98acf..f2c99aece9cbf 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -10,7 +10,9 @@ const getDeploymentId = async () => { if (OPEN_NEXT_CLOUDFLARE) { // If we're building for the Cloudflare deployment we want to set // an appropriate deploymentId (needed for skew protection) - return (await import('@opennextjs/cloudflare')).getDeploymentId(); + const openNextAdapter = await import('@opennextjs/cloudflare'); + + return openNextAdapter.getDeploymentId(); } return undefined; From 8b265952c0d17a6b66f7b6f47d30c1e3b317d8c4 Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Tue, 25 Nov 2025 22:11:45 +0000 Subject: [PATCH 23/23] fix linting issues --- apps/site/open-next.config.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/site/open-next.config.ts b/apps/site/open-next.config.ts index 433b6c660d9c2..a0080eca48b27 100644 --- a/apps/site/open-next.config.ts +++ b/apps/site/open-next.config.ts @@ -1,9 +1,10 @@ import { defineCloudflareConfig } from '@opennextjs/cloudflare'; -import type { OpenNextConfig } from '@opennextjs/cloudflare'; import r2IncrementalCache from '@opennextjs/cloudflare/overrides/incremental-cache/r2-incremental-cache'; import { withRegionalCache } from '@opennextjs/cloudflare/overrides/incremental-cache/regional-cache'; import doQueue from '@opennextjs/cloudflare/overrides/queue/do-queue'; +import type { OpenNextConfig } from '@opennextjs/cloudflare'; + const cloudflareConfig = defineCloudflareConfig({ /** * The regional cache implementation with R2 (instead of a KV one) is is chosen here