diff --git a/.github/workflows/tmp-cloudflare-open-next-deploy.yml b/.github/workflows/tmp-cloudflare-open-next-deploy.yml index 73e35b99c522b..bb8aaa0e37474 100644 --- a/.github/workflows/tmp-cloudflare-open-next-deploy.yml +++ b/.github/workflows/tmp-cloudflare-open-next-deploy.yml @@ -64,3 +64,4 @@ jobs: env: CF_WORKERS_SCRIPTS_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: fb4a2d0f103c6ff38854ac69eb709272 diff --git a/apps/site/cloudflare/image-loader.ts b/apps/site/cloudflare/image-loader.ts new file mode 100644 index 0000000000000..2137028e23db4 --- /dev/null +++ b/apps/site/cloudflare/image-loader.ts @@ -0,0 +1,33 @@ +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; + } + + // 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 pathParams = [...params] + .map(([key, value]) => `${key}=${value}`) + .join(','); + + return `/cdn-cgi/image/${pathParams}/${normalizeSrc(src)}`; +} diff --git a/apps/site/next.config.mjs b/apps/site/next.config.mjs index f73ff9aceb00b..f2c99aece9cbf 100644 --- a/apps/site/next.config.mjs +++ b/apps/site/next.config.mjs @@ -1,9 +1,23 @@ 'use strict'; import createNextIntlPlugin from 'next-intl/plugin'; +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'; +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) + const openNextAdapter = await import('@opennextjs/cloudflare'); + + return openNextAdapter.getDeploymentId(); + } + + return undefined; +}; + /** @type {import('next').NextConfig} */ const nextConfig = { allowedDevOrigins: ['10.1.1.232'], @@ -13,19 +27,7 @@ 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: getImagesConfig(), serverExternalPackages: ['twoslash'], outputFileTracingIncludes: { // Twoslash needs TypeScript declarations to function, and, by default, Next.js @@ -81,16 +83,7 @@ const nextConfig = { 'shiki', ], }, - // 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, onces 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() - : undefined, + deploymentId: await getDeploymentId(), }; const withNextIntl = createNextIntlPlugin('./i18n.tsx'); 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.image.config.mjs b/apps/site/next.image.config.mjs new file mode 100644 index 0000000000000..519523ca2aafe --- /dev/null +++ b/apps/site/next.image.config.mjs @@ -0,0 +1,33 @@ +import { OPEN_NEXT_CLOUDFLARE } from './next.constants.cloudflare.mjs'; +import { ENABLE_STATIC_EXPORT } 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` above). + // + 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: remotePatterns.map(url => new URL(url)), + }; +}; diff --git a/apps/site/open-next.config.ts b/apps/site/open-next.config.ts index 19d77d01d747e..a0080eca48b27 100644 --- a/apps/site/open-next.config.ts +++ b/apps/site/open-next.config.ts @@ -1,13 +1,25 @@ import { defineCloudflareConfig } from '@opennextjs/cloudflare'; -import incrementalCache from '@opennextjs/cloudflare/overrides/incremental-cache/kv-incremental-cache'; +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({ incrementalCache }); +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', + }), + queue: doQueue, + enableCacheInterception: true, +}); 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 eaede8c25a8cc..afdfe6d539727 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.6.4", + "@opennextjs/cloudflare": "^1.13.1", "@playwright/test": "^1.56.1", "@testing-library/user-event": "~14.6.1", "@types/mdast": "^4.0.4", @@ -108,7 +107,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/apps/site/wrangler.jsonc b/apps/site/wrangler.jsonc index 3ceafca8647b7..69afe07d5a0e2 100644 --- a/apps/site/wrangler.jsonc +++ b/apps/site/wrangler.jsonc @@ -33,10 +33,24 @@ "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", + }, + ], + "durable_objects": { + "bindings": [ + { + "name": "NEXT_CACHE_DO_QUEUE", + "class_name": "DOQueueHandler", + }, + ], + }, + "migrations": [ + { + "tag": "v1", + "new_sqlite_classes": ["DOQueueHandler"], }, ], } diff --git a/docs/cloudflare-build-and-deployment.md b/docs/cloudflare-build-and-deployment.md index 61ff12fb06c3b..79917e42db45e 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 @@ -45,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: diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9230b3b3909a..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.6.4 - version: 1.6.4(wrangler@4.33.1) + specifier: ^1.13.1 + version: 1.13.1(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: @@ -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': @@ -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.9.0': + resolution: {integrity: sha512-04VpIbnKOJwBEoAdSUI1lbbDRWj482oEbRggXtAs+hXOCp54fxDRouNmonvXPoRq6Wbmry73PI1Ko6g3ygL2Hg==} hasBin: true - '@opennextjs/cloudflare@1.6.4': - resolution: {integrity: sha512-vGEHr1+Dli4BSrs+CM+b2bnXoUdY/GUFiLfdH28UTRHggLMG7cL49M39LtzIVR5D8eqzZ38PDB2CZMn1LJ2gSw==} + '@opennextjs/cloudflare@1.13.1': + resolution: {integrity: sha512-JuXUdpUcB8LYBgG/M3ms+3tgot+zpehchnXmG0vlBUr9GMNZcrcobMEPJLK9ywb/7L8dUXryx+yzqC0EdR5iRw==} hasBin: true peerDependencies: - wrangler: ^4.24.4 + wrangler: ^4.49.1 '@opentelemetry/api-logs@0.206.0': resolution: {integrity: sha512-yIVDu9jX//nV5wSMLZLdHdb1SKHIMj9k+wQVFtln5Flcgdldz9BkHtavvExQiJqBZg2OpEEJEZmzQazYztdz2A==} @@ -4521,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'} @@ -5070,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: @@ -5321,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 @@ -6047,10 +6043,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} @@ -6196,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==} @@ -6345,8 +6333,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 @@ -6354,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==} @@ -6396,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==} @@ -6983,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'} @@ -8053,12 +8038,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==} @@ -8191,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 @@ -8351,17 +8332,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 @@ -8522,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: @@ -9664,25 +9645,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 +9709,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,9 +10601,9 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opennextjs/aws@3.7.4': + '@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 @@ -10635,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 @@ -10643,15 +10624,16 @@ snapshots: - aws-crt - supports-color - '@opennextjs/cloudflare@1.6.4(wrangler@4.33.1)': + '@opennextjs/cloudflare@1.13.1(wrangler@4.45.3)': dependencies: + '@ast-grep/napi': 0.40.0 '@dotenvx/dotenvx': 1.31.0 - '@opennextjs/aws': 3.7.4 + '@opennextjs/aws': 3.9.0 cloudflare: 4.5.0 enquirer: 2.4.1 - glob: 11.0.3 + glob: 12.0.0 ts-tqdm: 0.8.6 - wrangler: 4.33.1 + wrangler: 4.45.3 yargs: 18.0.0 transitivePeerDependencies: - aws-crt @@ -13337,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 @@ -14136,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 @@ -14144,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 @@ -14153,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 @@ -14447,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 @@ -15267,8 +15249,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.1.0: {} - lru-cache@11.2.2: {} lru-cache@5.1.1: @@ -15533,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 @@ -15831,7 +15809,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 +15818,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 @@ -15853,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 @@ -15883,8 +15865,6 @@ snapshots: mri@1.2.0: {} - ms@2.1.2: {} - ms@2.1.3: {} nano-spawn@1.0.3: {} @@ -16183,7 +16163,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: {} @@ -16401,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 @@ -18009,9 +17985,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 @@ -18247,8 +18223,6 @@ snapshots: utila@0.4.0: {} - utils-merge@1.0.1: {} - uuid@9.0.1: {} uvu@0.5.6: @@ -18469,24 +18443,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: