this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Support composable cache in Next 16 (#1053)

Co-authored-by: Dario Piotrowicz <dario@cloudflare.com>

authored by

Victor Berchet
Dario Piotrowicz
and committed by
GitHub
d4471256 07b38182

+89 -156
+5
.changeset/calm-parents-report.md
··· 1 + --- 2 + "@opennextjs/cloudflare": patch 3 + --- 4 + 5 + Support composable cache in Next 16
+1 -6
examples/e2e/experimental/next.config.ts
··· 4 4 /* config options here */ 5 5 cleanDistDir: true, 6 6 output: "standalone", 7 - eslint: { 8 - ignoreDuringBuilds: true, 9 - }, 7 + cacheComponents: true, 10 8 typescript: { 11 9 // Ignore type errors during build for now, we'll need to figure this out later 12 10 ignoreBuildErrors: true, 13 - }, 14 - experimental: { 15 - cacheComponents: true, 16 11 }, 17 12 }; 18 13
+2 -2
examples/e2e/experimental/package.json
··· 4 4 "private": true, 5 5 "scripts": { 6 6 "dev": "next dev --turbopack --port 3004", 7 - "build": "next build", 7 + "build": "next build --webpack", 8 8 "start": "next start --port 3004", 9 9 "lint": "next lint", 10 10 "clean": "rm -rf .turbo node_modules .next .open-next", ··· 15 15 }, 16 16 "dependencies": { 17 17 "@opennextjs/cloudflare": "workspace:*", 18 - "next": "15.4.2-canary.29", 18 + "next": "catalog:e2e", 19 19 "react": "catalog:e2e", 20 20 "react-dom": "catalog:e2e" 21 21 },
+1 -1
examples/e2e/experimental/src/app/api/revalidate/route.ts
··· 1 1 import { revalidateTag } from "next/cache"; 2 2 3 3 export function GET() { 4 - revalidateTag("fullyTagged"); 4 + revalidateTag("fullyTagged", "max"); 5 5 return new Response("DONE"); 6 6 }
-2
examples/e2e/experimental/src/app/ppr/page.tsx
··· 2 2 import { StaticComponent } from "@/components/static"; 3 3 import { Suspense } from "react"; 4 4 5 - export const experimental_ppr = true; 6 - 7 5 export default function PPRPage() { 8 6 return ( 9 7 <div>
+3
examples/e2e/experimental/src/app/use-cache/ssr/page.tsx
··· 9 9 <div> 10 10 <h1>Cache</h1> 11 11 <p>{_headers.get("accept") ?? "No accept headers"}</p> 12 + <h2>cached:</h2> 12 13 <Suspense fallback={<p>Loading...</p>}> 13 14 <FullyCachedComponent /> 14 15 </Suspense> 16 + <h2>cached (with tag):</h2> 15 17 <Suspense fallback={<p>Loading...</p>}> 16 18 <FullyCachedComponentWithTag /> 17 19 </Suspense> 20 + <h2>isr:</h2> 18 21 <Suspense fallback={<p>Loading...</p>}> 19 22 <ISRComponent /> 20 23 </Suspense>
+3 -3
examples/e2e/experimental/src/components/cached.tsx
··· 1 - import { unstable_cacheLife, unstable_cacheTag } from "next/cache"; 1 + import { cacheLife, cacheTag } from "next/cache"; 2 2 3 3 export async function FullyCachedComponent() { 4 4 "use cache"; ··· 11 11 12 12 export async function FullyCachedComponentWithTag() { 13 13 "use cache"; 14 - unstable_cacheTag("fullyTagged"); 14 + cacheTag("fullyTagged"); 15 15 return ( 16 16 <div> 17 17 <p data-testid="fully-cached-with-tag">{Date.now()}</p> ··· 21 21 22 22 export async function ISRComponent() { 23 23 "use cache"; 24 - unstable_cacheLife({ 24 + cacheLife({ 25 25 stale: 1, 26 26 revalidate: 5, 27 27 });
+2 -2
examples/e2e/experimental/tsconfig.json
··· 11 11 "moduleResolution": "bundler", 12 12 "resolveJsonModule": true, 13 13 "isolatedModules": true, 14 - "jsx": "preserve", 14 + "jsx": "react-jsx", 15 15 "incremental": true, 16 16 "plugins": [ 17 17 { ··· 22 22 "@/*": ["./src/*"] 23 23 } 24 24 }, 25 - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 25 + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", ".next/dev/types/**/*.ts"], 26 26 "exclude": ["node_modules"] 27 27 }
+1 -1
packages/cloudflare/package.json
··· 54 54 "dependencies": { 55 55 "@ast-grep/napi": "0.40.0", 56 56 "@dotenvx/dotenvx": "catalog:", 57 - "@opennextjs/aws": "3.9.6", 57 + "@opennextjs/aws": "3.9.7", 58 58 "cloudflare": "^4.4.1", 59 59 "enquirer": "^2.4.1", 60 60 "glob": "catalog:",
+59 -8
packages/cloudflare/src/cli/build/patches/plugins/next-server.spec.ts
··· 10 10 } from "./next-server.js"; 11 11 12 12 describe("Next Server", () => { 13 - const nextServerCode = ` 13 + const next15ServerCode = ` 14 14 class NextNodeServer extends _baseserver.default { 15 15 constructor(options){ 16 16 // Initialize super class ··· 168 168 // ... 169 169 }`; 170 170 171 + const next16ServerCode = ` 172 + class NextNodeServer extends _baseserver.default { 173 + // ... 174 + 175 + async loadCustomCacheHandlers() { 176 + const { cacheMaxMemorySize, cacheHandlers } = this.nextConfig; 177 + if (!cacheHandlers) return; 178 + // If we've already initialized the cache handlers interface, don't do it 179 + // again. 180 + if (!(0, _handlers.initializeCacheHandlers)(cacheMaxMemorySize)) return; 181 + for (const [kind, handler] of Object.entries(cacheHandlers)){ 182 + if (!handler) continue; 183 + (0, _handlers.setCacheHandler)(kind, (0, _interopdefault.interopDefault)(await dynamicImportEsmDefault((0, _formatdynamicimportpath.formatDynamicImportPath)(this.distDir, handler)))); 184 + } 185 + } 186 + // ... 187 + } 188 + `; 189 + 171 190 test("build ID", () => { 172 - expect(computePatchDiff("next-server.js", nextServerCode, buildIdRule)).toMatchInlineSnapshot(` 191 + expect(computePatchDiff("next-server.js", next15ServerCode, buildIdRule)).toMatchInlineSnapshot(` 173 192 "Index: next-server.js 174 193 =================================================================== 175 194 --- next-server.js ··· 206 225 }); 207 226 208 227 test("cache handler", () => { 209 - expect(computePatchDiff("next-server.js", nextServerCode, createCacheHandlerRule("manifest"))) 228 + expect(computePatchDiff("next-server.js", next15ServerCode, createCacheHandlerRule("manifest"))) 210 229 .toMatchInlineSnapshot(` 211 230 "Index: next-server.js 212 231 =================================================================== ··· 234 253 `); 235 254 }); 236 255 237 - test("composable cache handler", () => { 238 - expect(computePatchDiff("next-server.js", nextServerCode, createComposableCacheHandlersRule("manifest"))) 239 - .toMatchInlineSnapshot(` 256 + test("composable cache handler (Next 15)", () => { 257 + expect( 258 + computePatchDiff("next-server.js", next15ServerCode, createComposableCacheHandlersRule("manifest")) 259 + ).toMatchInlineSnapshot(` 240 260 "Index: next-server.js 241 261 =================================================================== 242 262 --- next-server.js ··· 268 288 `); 269 289 }); 270 290 291 + test("composable cache handler (Next 16)", () => { 292 + expect( 293 + computePatchDiff("next-server.js", next16ServerCode, createComposableCacheHandlersRule("manifest")) 294 + ).toMatchInlineSnapshot(` 295 + "Index: next-server.js 296 + =================================================================== 297 + --- next-server.js 298 + +++ next-server.js 299 + @@ -1,10 +1,15 @@ 300 + - 301 + class NextNodeServer extends _baseserver.default { 302 + // ... 303 + 304 + async loadCustomCacheHandlers() { 305 + - const { cacheMaxMemorySize, cacheHandlers } = this.nextConfig; 306 + + const cacheHandlers = null; 307 + +const handlersSymbol = Symbol.for('@next/cache-handlers'); 308 + +const handlersMapSymbol = Symbol.for('@next/cache-handlers-map'); 309 + +const handlersSetSymbol = Symbol.for('@next/cache-handlers-set'); 310 + +globalThis[handlersMapSymbol] = new Map(); 311 + +globalThis[handlersMapSymbol].set("default", require('manifest').default); 312 + +globalThis[handlersSetSymbol] = new Set(globalThis[handlersMapSymbol].values()); 313 + if (!cacheHandlers) return; 314 + // If we've already initialized the cache handlers interface, don't do it 315 + // again. 316 + if (!(0, _handlers.initializeCacheHandlers)(cacheMaxMemorySize)) return; 317 + " 318 + `); 319 + }); 320 + 271 321 test("disable node middleware", () => { 272 - expect(computePatchDiff("next-server.js", nextServerCode, disableNodeMiddlewareRule)) 322 + expect(computePatchDiff("next-server.js", next15ServerCode, disableNodeMiddlewareRule)) 273 323 .toMatchInlineSnapshot(` 274 324 "Index: next-server.js 275 325 =================================================================== ··· 312 362 }); 313 363 314 364 test("attachRequestMeta", () => { 315 - expect(computePatchDiff("next-server.js", nextServerCode, attachRequestMetaRule)).toMatchInlineSnapshot(` 365 + expect(computePatchDiff("next-server.js", next15ServerCode, attachRequestMetaRule)) 366 + .toMatchInlineSnapshot(` 316 367 "Index: next-server.js 317 368 =================================================================== 318 369 --- next-server.js
+5 -1
packages/cloudflare/src/cli/build/patches/plugins/next-server.ts
··· 102 102 export function createComposableCacheHandlersRule(handlerPath: string) { 103 103 return ` 104 104 rule: 105 - pattern: "const { cacheHandlers } = this.nextConfig.experimental;" 105 + # matches 106 + # - const { cacheHandlers } = this.nextConfig.experimental; pre Next 16 107 + # - const { cacheMaxMemorySize, cacheHandlers } = this.nextConfig; from Next 16 108 + kind: lexical_declaration 109 + regex: cacheHandlers 106 110 inside: 107 111 kind: method_definition 108 112 has:
+7 -130
pnpm-lock.yaml
··· 526 526 specifier: workspace:* 527 527 version: link:../../../packages/cloudflare 528 528 next: 529 - specifier: 15.4.2-canary.29 530 - version: 15.4.2-canary.29(@opentelemetry/api@1.9.0)(@playwright/test@1.51.1)(react-dom@19.0.3(react@19.0.3))(react@19.0.3) 529 + specifier: catalog:e2e 530 + version: 16.0.10(@opentelemetry/api@1.9.0)(@playwright/test@1.51.1)(react-dom@19.0.3(react@19.0.3))(react@19.0.3) 531 531 react: 532 532 specifier: catalog:e2e 533 533 version: 19.0.3 ··· 1118 1118 specifier: 'catalog:' 1119 1119 version: 1.31.0 1120 1120 '@opennextjs/aws': 1121 - specifier: 3.9.6 1122 - version: 3.9.6(next@15.5.9(@opentelemetry/api@1.9.0)(@playwright/test@1.51.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) 1121 + specifier: 3.9.7 1122 + version: 3.9.7(next@15.5.9(@opentelemetry/api@1.9.0)(@playwright/test@1.51.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) 1123 1123 cloudflare: 1124 1124 specifier: ^4.4.1 1125 1125 version: 4.4.1 ··· 3526 3526 '@next/env@15.0.0-canary.174': 3527 3527 resolution: {integrity: sha512-2S0Jpc4yzsLq5xfIHknQob5k3ME9oI7syQH1fNJ3tv/HP1DVLmTWDRylPScLLUJGvOg7SEgnYK87P45cTNdfUQ==} 3528 3528 3529 - '@next/env@15.4.2-canary.29': 3530 - resolution: {integrity: sha512-zmkSqVO16lUnanrgywv4SfgiLyMI2V/IxEgRTKcded5Lor0jXC73eqtjTL4vKpFKK771l7M0zILv8Hv5uHsR1A==} 3531 - 3532 3529 '@next/env@15.5.9': 3533 3530 resolution: {integrity: sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==} 3534 3531 ··· 3559 3556 cpu: [arm64] 3560 3557 os: [darwin] 3561 3558 3562 - '@next/swc-darwin-arm64@15.4.2-canary.29': 3563 - resolution: {integrity: sha512-W0isQe+NuLgGEccJoqfuikN8irbHrq7qHYI+w2hdw0l6CzgvKa4GYEQV4FnblK9epa9rU+SRdTB428vzl5eesQ==} 3564 - engines: {node: '>= 10'} 3565 - cpu: [arm64] 3566 - os: [darwin] 3567 - 3568 3559 '@next/swc-darwin-arm64@15.5.7': 3569 3560 resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==} 3570 3561 engines: {node: '>= 10'} ··· 3589 3580 cpu: [x64] 3590 3581 os: [darwin] 3591 3582 3592 - '@next/swc-darwin-x64@15.4.2-canary.29': 3593 - resolution: {integrity: sha512-vPIml27iYFMqRNwYRO82leBuBs0Boach3thGfrUIzbDUambfQmKaylMBaEYkX2s7if+p+FmmCHY0XYrRHQf4yQ==} 3594 - engines: {node: '>= 10'} 3595 - cpu: [x64] 3596 - os: [darwin] 3597 - 3598 3583 '@next/swc-darwin-x64@15.5.7': 3599 3584 resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==} 3600 3585 engines: {node: '>= 10'} ··· 3615 3600 3616 3601 '@next/swc-linux-arm64-gnu@15.0.0-canary.174': 3617 3602 resolution: {integrity: sha512-kVEibHYyQ12zzFPY+YHbYX9z81HhLVK5pQgt1NlFet2M0iBj1PxvOJuu6In1EEV7f3jNEr4r3gf5ieyY3ywnLw==} 3618 - engines: {node: '>= 10'} 3619 - cpu: [arm64] 3620 - os: [linux] 3621 - 3622 - '@next/swc-linux-arm64-gnu@15.4.2-canary.29': 3623 - resolution: {integrity: sha512-OfjJBsSqHCNzcyMkMD2zoMOe6/l1EIWkuWYGPmffImSvPelXwY42FL42VHvYvnX6cq8xeOOEj6WIj03mPiErIA==} 3624 3603 engines: {node: '>= 10'} 3625 3604 cpu: [arm64] 3626 3605 os: [linux] ··· 3649 3628 cpu: [arm64] 3650 3629 os: [linux] 3651 3630 3652 - '@next/swc-linux-arm64-musl@15.4.2-canary.29': 3653 - resolution: {integrity: sha512-U2Rp+q3Fs/1P6/UPEIhSJ4zOuEUnq1SSLjsLdra1ZJNrt/bOiulB8EtCaGzNCP+Fc/C3x0o7HswUL1PTGPCaqA==} 3654 - engines: {node: '>= 10'} 3655 - cpu: [arm64] 3656 - os: [linux] 3657 - 3658 3631 '@next/swc-linux-arm64-musl@15.5.7': 3659 3632 resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==} 3660 3633 engines: {node: '>= 10'} ··· 3679 3652 cpu: [x64] 3680 3653 os: [linux] 3681 3654 3682 - '@next/swc-linux-x64-gnu@15.4.2-canary.29': 3683 - resolution: {integrity: sha512-naAxNmS9fB4ayezHHWnoM2nHyxHge1V8rJnJ5sGFQDexsZI0B5u4ghvVrPvX+z7u3vyOhJrWQuXiAXHcbBP2xg==} 3684 - engines: {node: '>= 10'} 3685 - cpu: [x64] 3686 - os: [linux] 3687 - 3688 3655 '@next/swc-linux-x64-gnu@15.5.7': 3689 3656 resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==} 3690 3657 engines: {node: '>= 10'} ··· 3709 3676 cpu: [x64] 3710 3677 os: [linux] 3711 3678 3712 - '@next/swc-linux-x64-musl@15.4.2-canary.29': 3713 - resolution: {integrity: sha512-4Id31wM5uep5jqwyvFlfzduPaXa6sbLdgQk+wWVMsSC9FqiIkevIB541OP/MnsoiQ6djTmd1NiRxeC0ffR7Llw==} 3714 - engines: {node: '>= 10'} 3715 - cpu: [x64] 3716 - os: [linux] 3717 - 3718 3679 '@next/swc-linux-x64-musl@15.5.7': 3719 3680 resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==} 3720 3681 engines: {node: '>= 10'} ··· 3739 3700 cpu: [arm64] 3740 3701 os: [win32] 3741 3702 3742 - '@next/swc-win32-arm64-msvc@15.4.2-canary.29': 3743 - resolution: {integrity: sha512-6x5I4/MskJ9rXC8Co+U9sAXUqGfz+pzikNE5Bt6atwILP39GNLV1RxkcZUHx1/qK/Z5+NFsUmPNfjlH6auph+g==} 3744 - engines: {node: '>= 10'} 3745 - cpu: [arm64] 3746 - os: [win32] 3747 - 3748 3703 '@next/swc-win32-arm64-msvc@15.5.7': 3749 3704 resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==} 3750 3705 engines: {node: '>= 10'} ··· 3777 3732 3778 3733 '@next/swc-win32-x64-msvc@15.0.0-canary.174': 3779 3734 resolution: {integrity: sha512-oHP+8a72t8K6LFwEXOy/Tb6nSOE3u/hUTN2fwXNUx5hJde59yeZaGIG2kQenWYLQxJHeoT90rI1DerOcfjwzQQ==} 3780 - engines: {node: '>= 10'} 3781 - cpu: [x64] 3782 - os: [win32] 3783 - 3784 - '@next/swc-win32-x64-msvc@15.4.2-canary.29': 3785 - resolution: {integrity: sha512-yKyOuM2HH1Ryvd80q+5wYZrMIcn8+4sEJo5++Ywf0CFEnkSZdj6gl5BX2qU4OdryiR2E/29PFwv7qEYTFUaXiQ==} 3786 3735 engines: {node: '>= 10'} 3787 3736 cpu: [x64] 3788 3737 os: [win32] ··· 3895 3844 '@octokit/types@13.10.0': 3896 3845 resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} 3897 3846 3898 - '@opennextjs/aws@3.9.6': 3899 - resolution: {integrity: sha512-46Z4si6Ov7pyiamRDovtfett8d1CLwIVSqMiPBrcPMD+we8DQpqBJeI1uM2y1KiOjwFpH8MKNXGtftpdACP0+g==} 3847 + '@opennextjs/aws@3.9.7': 3848 + resolution: {integrity: sha512-rj5br5fvWWqKsJo4YZvMowM4ObR2cz+dwCGuBA7amCiA+RpVmzcGfvfMucf01pUwhxxPgvdhXqdg7P2NVzQmkw==} 3900 3849 hasBin: true 3901 3850 peerDependencies: 3902 3851 next: ^14.2.35 || ~15.0.7 || ~15.1.11 || ~15.2.8 || ~15.3.8 || ~15.4.10 || ~15.5.9 || ^16.0.10 ··· 7981 7930 sass: 7982 7931 optional: true 7983 7932 7984 - next@15.4.2-canary.29: 7985 - resolution: {integrity: sha512-jRBUNrhf69oYsxbo2sFRB9W5ZI8Wav5CEMKyRG+DQwZhRyEQ2+kpS0+j/bfBjs11CBk3fhGMoQti2/EoRlWInQ==} 7986 - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} 7987 - hasBin: true 7988 - peerDependencies: 7989 - '@opentelemetry/api': ^1.1.0 7990 - '@playwright/test': ^1.51.1 7991 - babel-plugin-react-compiler: '*' 7992 - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 7993 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 7994 - sass: ^1.3.0 7995 - peerDependenciesMeta: 7996 - '@opentelemetry/api': 7997 - optional: true 7998 - '@playwright/test': 7999 - optional: true 8000 - babel-plugin-react-compiler: 8001 - optional: true 8002 - sass: 8003 - optional: true 8004 - 8005 7933 next@15.5.9: 8006 7934 resolution: {integrity: sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==} 8007 7935 engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} ··· 12975 12903 12976 12904 '@next/env@15.0.0-canary.174': {} 12977 12905 12978 - '@next/env@15.4.2-canary.29': {} 12979 - 12980 12906 '@next/env@15.5.9': {} 12981 12907 12982 12908 '@next/env@16.0.10': {} ··· 13003 12929 '@next/swc-darwin-arm64@15.0.0-canary.174': 13004 12930 optional: true 13005 12931 13006 - '@next/swc-darwin-arm64@15.4.2-canary.29': 13007 - optional: true 13008 - 13009 12932 '@next/swc-darwin-arm64@15.5.7': 13010 12933 optional: true 13011 12934 ··· 13018 12941 '@next/swc-darwin-x64@15.0.0-canary.174': 13019 12942 optional: true 13020 12943 13021 - '@next/swc-darwin-x64@15.4.2-canary.29': 13022 - optional: true 13023 - 13024 12944 '@next/swc-darwin-x64@15.5.7': 13025 12945 optional: true 13026 12946 ··· 13031 12951 optional: true 13032 12952 13033 12953 '@next/swc-linux-arm64-gnu@15.0.0-canary.174': 13034 - optional: true 13035 - 13036 - '@next/swc-linux-arm64-gnu@15.4.2-canary.29': 13037 12954 optional: true 13038 12955 13039 12956 '@next/swc-linux-arm64-gnu@15.5.7': ··· 13046 12963 optional: true 13047 12964 13048 12965 '@next/swc-linux-arm64-musl@15.0.0-canary.174': 13049 - optional: true 13050 - 13051 - '@next/swc-linux-arm64-musl@15.4.2-canary.29': 13052 12966 optional: true 13053 12967 13054 12968 '@next/swc-linux-arm64-musl@15.5.7': ··· 13063 12977 '@next/swc-linux-x64-gnu@15.0.0-canary.174': 13064 12978 optional: true 13065 12979 13066 - '@next/swc-linux-x64-gnu@15.4.2-canary.29': 13067 - optional: true 13068 - 13069 12980 '@next/swc-linux-x64-gnu@15.5.7': 13070 12981 optional: true 13071 12982 ··· 13076 12987 optional: true 13077 12988 13078 12989 '@next/swc-linux-x64-musl@15.0.0-canary.174': 13079 - optional: true 13080 - 13081 - '@next/swc-linux-x64-musl@15.4.2-canary.29': 13082 12990 optional: true 13083 12991 13084 12992 '@next/swc-linux-x64-musl@15.5.7': ··· 13093 13001 '@next/swc-win32-arm64-msvc@15.0.0-canary.174': 13094 13002 optional: true 13095 13003 13096 - '@next/swc-win32-arm64-msvc@15.4.2-canary.29': 13097 - optional: true 13098 - 13099 13004 '@next/swc-win32-arm64-msvc@15.5.7': 13100 13005 optional: true 13101 13006 ··· 13112 13017 optional: true 13113 13018 13114 13019 '@next/swc-win32-x64-msvc@15.0.0-canary.174': 13115 - optional: true 13116 - 13117 - '@next/swc-win32-x64-msvc@15.4.2-canary.29': 13118 13020 optional: true 13119 13021 13120 13022 '@next/swc-win32-x64-msvc@15.5.7': ··· 13232 13134 dependencies: 13233 13135 '@octokit/openapi-types': 24.2.0 13234 13136 13235 - '@opennextjs/aws@3.9.6(next@15.5.9(@opentelemetry/api@1.9.0)(@playwright/test@1.51.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': 13137 + '@opennextjs/aws@3.9.7(next@15.5.9(@opentelemetry/api@1.9.0)(@playwright/test@1.51.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': 13236 13138 dependencies: 13237 13139 '@ast-grep/napi': 0.40.0 13238 13140 '@aws-sdk/client-cloudfront': 3.398.0 ··· 18875 18777 '@opentelemetry/api': 1.9.0 18876 18778 '@playwright/test': 1.51.1 18877 18779 sharp: 0.33.5 18878 - transitivePeerDependencies: 18879 - - '@babel/core' 18880 - - babel-plugin-macros 18881 - 18882 - next@15.4.2-canary.29(@opentelemetry/api@1.9.0)(@playwright/test@1.51.1)(react-dom@19.0.3(react@19.0.3))(react@19.0.3): 18883 - dependencies: 18884 - '@next/env': 15.4.2-canary.29 18885 - '@swc/helpers': 0.5.15 18886 - caniuse-lite: 1.0.30001717 18887 - postcss: 8.4.31 18888 - react: 19.0.3 18889 - react-dom: 19.0.3(react@19.0.3) 18890 - styled-jsx: 5.1.6(react@19.0.3) 18891 - optionalDependencies: 18892 - '@next/swc-darwin-arm64': 15.4.2-canary.29 18893 - '@next/swc-darwin-x64': 15.4.2-canary.29 18894 - '@next/swc-linux-arm64-gnu': 15.4.2-canary.29 18895 - '@next/swc-linux-arm64-musl': 15.4.2-canary.29 18896 - '@next/swc-linux-x64-gnu': 15.4.2-canary.29 18897 - '@next/swc-linux-x64-musl': 15.4.2-canary.29 18898 - '@next/swc-win32-arm64-msvc': 15.4.2-canary.29 18899 - '@next/swc-win32-x64-msvc': 15.4.2-canary.29 18900 - '@opentelemetry/api': 1.9.0 18901 - '@playwright/test': 1.51.1 18902 - sharp: 0.34.5 18903 18780 transitivePeerDependencies: 18904 18781 - '@babel/core' 18905 18782 - babel-plugin-macros