From 57eb2b34f00fa7c93b0539dfe6759815b1b6e120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Martin?= Date: Mon, 21 Sep 2026 02:58:23 +0200 Subject: [PATCH 1/3] Remove unused `hasWarnings` and `warnings` (#96956) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Fixing a bug Nothing reads the two fields `hasWarnings` and `warnings` on `TypeCheckResult`. `verifyAndRunTypeScript` has four callers: - `build/type-check.ts` only reads `inputFilesCount`, `totalFilesCount` and `incremental` - `next-test` only reads `version` - `setup-dev-bundler` only reads `version` - `next-typegen` throws the result away `warnings` is also always empty. It looks for diagnostics with the `Warning` category, but I checked, and TypeScript 6.0.2 has no messages in that category. Deprecation messages use `Suggestion` instead. So on every build, we filtered and formatted every diagnostic to build a list that was always empty, and that nobody read. So I'm suggesting removing it instead, as it is clearly not being used. I also checked the GitHub code search across all public repositories and couldn't find anyone using either of them. That aside, it also never really worked correctly, as it would always return `hasWarnings: true` even if `warnings` was empty. No test added since the fields are being removed. Also since this is such a small change I didn't create an issue to link here, I'd be happy to file one if you prefer me to. Thanks for the hard work and taking the time for reviewing this PR! 😊 --- packages/next/src/lib/typescript/runTypeCheck.ts | 11 ----------- packages/next/src/lib/typescript/runTypeCheckCli.ts | 1 - 2 files changed, 12 deletions(-) diff --git a/packages/next/src/lib/typescript/runTypeCheck.ts b/packages/next/src/lib/typescript/runTypeCheck.ts index 56462a875037..9d97f59146fc 100644 --- a/packages/next/src/lib/typescript/runTypeCheck.ts +++ b/packages/next/src/lib/typescript/runTypeCheck.ts @@ -8,8 +8,6 @@ import { CompileError } from '../compile-error' import { warn } from '../../build/output/log' export interface TypeCheckResult { - hasWarnings: boolean - warnings?: string[] inputFilesCount?: number totalFilesCount?: number incremental: boolean @@ -108,7 +106,6 @@ export async function runTypeCheck( if (fileNames.length < 1) { return { - hasWarnings: false, inputFilesCount: 0, totalFilesCount: 0, incremental: false, @@ -214,15 +211,7 @@ export async function runTypeCheck( ) } - const warnings = allDiagnostics - .filter((d) => d.category === typescript.DiagnosticCategory.Warning) - .map((d) => - getFormattedDiagnostic(typescript, baseDir, distDir, d, isAppDirEnabled) - ) - return { - hasWarnings: true, - warnings, inputFilesCount: fileNames.length, totalFilesCount: program.getSourceFiles().length, incremental, diff --git a/packages/next/src/lib/typescript/runTypeCheckCli.ts b/packages/next/src/lib/typescript/runTypeCheckCli.ts index 75258d3369f6..1abdb7f37685 100644 --- a/packages/next/src/lib/typescript/runTypeCheckCli.ts +++ b/packages/next/src/lib/typescript/runTypeCheckCli.ts @@ -59,7 +59,6 @@ export async function runTypeCheckCli({ } return { - hasWarnings: false, incremental, } } From 0927d3e819005f80f462fa4b1061206eb213bd75 Mon Sep 17 00:00:00 2001 From: "next-js-bot[bot]" <279046576+next-js-bot[bot]@users.noreply.github.com> Date: Mon, 21 Sep 2026 07:55:29 +0200 Subject: [PATCH 2/3] Upgrade React from `ff8f88fc-20260915` to `59aff3e1-20260918` (#98897) --- package.json | 30 +- .../cjs/react-dom-client.development.js | 10 +- .../cjs/react-dom-client.production.js | 10 +- .../cjs/react-dom-profiling.development.js | 10 +- .../cjs/react-dom-profiling.profiling.js | 10 +- ...t-dom-server-legacy.browser.development.js | 2 +- ...ct-dom-server-legacy.browser.production.js | 2 +- ...eact-dom-server-legacy.node.development.js | 2 +- ...react-dom-server-legacy.node.production.js | 2 +- .../react-dom-server.browser.development.js | 6 +- .../react-dom-server.browser.production.js | 6 +- .../cjs/react-dom-server.bun.production.js | 6 +- .../cjs/react-dom-server.edge.development.js | 6 +- .../cjs/react-dom-server.edge.production.js | 6 +- .../cjs/react-dom-server.node.development.js | 6 +- .../cjs/react-dom-server.node.production.js | 6 +- .../react-dom-unstable_testing.development.js | 10 +- .../react-dom-unstable_testing.production.js | 10 +- .../cjs/react-dom.development.js | 2 +- .../cjs/react-dom.production.js | 2 +- .../cjs/react-dom.react-server.development.js | 2 +- .../cjs/react-dom.react-server.production.js | 2 +- .../react-dom-experimental/package.json | 4 +- .../cjs/react-dom-client.development.js | 10 +- .../cjs/react-dom-client.production.js | 10 +- .../cjs/react-dom-profiling.development.js | 10 +- .../cjs/react-dom-profiling.profiling.js | 10 +- ...t-dom-server-legacy.browser.development.js | 2 +- ...ct-dom-server-legacy.browser.production.js | 2 +- ...eact-dom-server-legacy.node.development.js | 2 +- ...react-dom-server-legacy.node.production.js | 2 +- .../react-dom-server.browser.development.js | 6 +- .../react-dom-server.browser.production.js | 6 +- .../cjs/react-dom-server.bun.production.js | 6 +- .../cjs/react-dom-server.edge.development.js | 6 +- .../cjs/react-dom-server.edge.production.js | 6 +- .../cjs/react-dom-server.node.development.js | 6 +- .../cjs/react-dom-server.node.production.js | 6 +- .../react-dom/cjs/react-dom.development.js | 2 +- .../react-dom/cjs/react-dom.production.js | 2 +- .../cjs/react-dom.react-server.development.js | 2 +- .../cjs/react-dom.react-server.production.js | 2 +- .../next/src/compiled/react-dom/package.json | 4 +- .../cjs/react.development.js | 2 +- .../cjs/react.production.js | 2 +- .../cjs/react.react-server.development.js | 2 +- .../cjs/react.react-server.production.js | 2 +- .../next/src/compiled/react-is/package.json | 2 +- ...om-turbopack-client.browser.development.js | 190 ++- ...dom-turbopack-client.browser.production.js | 197 ++- ...r-dom-turbopack-client.edge.development.js | 186 ++- ...er-dom-turbopack-client.edge.production.js | 205 ++- ...r-dom-turbopack-client.node.development.js | 186 ++- ...er-dom-turbopack-client.node.production.js | 205 ++- ...om-turbopack-server.browser.development.js | 463 ++++--- ...dom-turbopack-server.browser.production.js | 416 +++--- ...r-dom-turbopack-server.edge.development.js | 463 ++++--- ...er-dom-turbopack-server.edge.production.js | 428 +++--- ...r-dom-turbopack-server.node.development.js | 477 ++++--- ...er-dom-turbopack-server.node.production.js | 439 +++--- .../package.json | 4 +- .../server.browser.js | 1 + .../server.edge.js | 1 + .../server.node.js | 1 + ...om-turbopack-client.browser.development.js | 6 +- ...dom-turbopack-client.browser.production.js | 2 + ...r-dom-turbopack-client.edge.development.js | 2 + ...er-dom-turbopack-client.edge.production.js | 2 + ...r-dom-turbopack-client.node.development.js | 2 + ...er-dom-turbopack-client.node.production.js | 2 + ...om-turbopack-server.browser.development.js | 292 ++-- ...dom-turbopack-server.browser.production.js | 260 ++-- ...r-dom-turbopack-server.edge.development.js | 292 ++-- ...er-dom-turbopack-server.edge.production.js | 270 ++-- ...r-dom-turbopack-server.node.development.js | 292 ++-- ...er-dom-turbopack-server.node.production.js | 270 ++-- .../react-server-dom-turbopack/package.json | 4 +- .../server.browser.js | 1 + .../react-server-dom-turbopack/server.edge.js | 1 + .../react-server-dom-turbopack/server.node.js | 1 + ...-dom-webpack-client.browser.development.js | 190 ++- ...r-dom-webpack-client.browser.production.js | 197 ++- ...ver-dom-webpack-client.edge.development.js | 186 ++- ...rver-dom-webpack-client.edge.production.js | 205 ++- ...ver-dom-webpack-client.node.development.js | 186 ++- ...rver-dom-webpack-client.node.production.js | 205 ++- ...-dom-webpack-server.browser.development.js | 446 ++++--- ...r-dom-webpack-server.browser.production.js | 407 +++--- ...ver-dom-webpack-server.edge.development.js | 446 ++++--- ...rver-dom-webpack-server.edge.production.js | 419 +++--- ...ver-dom-webpack-server.node.development.js | 460 ++++--- ...rver-dom-webpack-server.node.production.js | 430 +++--- .../package.json | 4 +- ...-dom-webpack-client.browser.development.js | 6 +- ...r-dom-webpack-client.browser.production.js | 2 + ...ver-dom-webpack-client.edge.development.js | 2 + ...rver-dom-webpack-client.edge.production.js | 2 + ...ver-dom-webpack-client.node.development.js | 2 + ...rver-dom-webpack-client.node.production.js | 2 + ...-dom-webpack-server.browser.development.js | 275 ++-- ...r-dom-webpack-server.browser.production.js | 251 ++-- ...ver-dom-webpack-server.edge.development.js | 275 ++-- ...rver-dom-webpack-server.edge.production.js | 261 ++-- ...ver-dom-webpack-server.node.development.js | 275 ++-- ...rver-dom-webpack-server.node.production.js | 261 ++-- .../react-server-dom-webpack/package.json | 4 +- .../compiled/react/cjs/react.development.js | 2 +- .../compiled/react/cjs/react.production.js | 2 +- .../cjs/react.react-server.development.js | 2 +- .../cjs/react.react-server.production.js | 2 +- .../next/src/compiled/unistore/unistore.js | 2 +- pnpm-lock.yaml | 1186 ++++++++--------- 112 files changed, 7372 insertions(+), 5048 deletions(-) diff --git a/package.json b/package.json index d66d293d4147..f0080d46d420 100644 --- a/package.json +++ b/package.json @@ -258,24 +258,24 @@ "pretty-ms": "7.0.0", "random-seed": "0.3.0", "react": "19.0.0", - "react-builtin": "npm:react@19.3.0-canary-ff8f88fc-20260915", + "react-builtin": "npm:react@19.3.0-canary-59aff3e1-20260918", "react-dom": "19.0.0", - "react-dom-builtin": "npm:react-dom@19.3.0-canary-ff8f88fc-20260915", - "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-ff8f88fc-20260915", - "react-experimental-builtin": "npm:react@0.0.0-experimental-ff8f88fc-20260915", - "react-is-builtin": "npm:react-is@19.3.0-canary-ff8f88fc-20260915", - "react-server-dom-turbopack": "npm:react-server-dom-turbopack@19.3.0-canary-ff8f88fc-20260915", - "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-ff8f88fc-20260915", - "react-server-dom-webpack": "npm:react-server-dom-webpack@19.3.0-canary-ff8f88fc-20260915", - "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-ff8f88fc-20260915", + "react-dom-builtin": "npm:react-dom@19.3.0-canary-59aff3e1-20260918", + "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-59aff3e1-20260918", + "react-experimental-builtin": "npm:react@0.0.0-experimental-59aff3e1-20260918", + "react-is-builtin": "npm:react-is@19.3.0-canary-59aff3e1-20260918", + "react-server-dom-turbopack": "npm:react-server-dom-turbopack@19.3.0-canary-59aff3e1-20260918", + "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-59aff3e1-20260918", + "react-server-dom-webpack": "npm:react-server-dom-webpack@19.3.0-canary-59aff3e1-20260918", + "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-59aff3e1-20260918", "react-ssr-prepass": "1.0.8", "react-virtualized": "9.22.3", "request-promise-core": "1.1.2", "resolve-from": "5.0.0", "sass": "1.54.0", "satori": "0.29.0", - "scheduler-builtin": "npm:scheduler@0.28.0-canary-ff8f88fc-20260915", - "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-ff8f88fc-20260915", + "scheduler-builtin": "npm:scheduler@0.28.0-canary-59aff3e1-20260918", + "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-59aff3e1-20260918", "seedrandom": "3.0.5", "semver": "7.3.7", "serve-handler": "6.1.6", @@ -319,10 +319,10 @@ "@types/react-dom": "19.2.4", "@types/retry": "0.12.0", "jest-snapshot": "30.0.0-alpha.6", - "react": "npm:react@19.3.0-canary-ff8f88fc-20260915", - "react-dom": "npm:react-dom@19.3.0-canary-ff8f88fc-20260915", - "react-is": "npm:react-is@19.3.0-canary-ff8f88fc-20260915", - "scheduler": "npm:scheduler@0.28.0-canary-ff8f88fc-20260915" + "react": "npm:react@19.3.0-canary-59aff3e1-20260918", + "react-dom": "npm:react-dom@19.3.0-canary-59aff3e1-20260918", + "react-is": "npm:react-is@19.3.0-canary-59aff3e1-20260918", + "scheduler": "npm:scheduler@0.28.0-canary-59aff3e1-20260918" }, "packageExtensions": { "eslint-plugin-react-hooks@0.0.0-experimental-6de32a5a-20250822": { diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js index 3350b9cb7528..1f797c6b3c79 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.development.js @@ -33477,11 +33477,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -33518,10 +33518,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-ff8f88fc-20260915", + version: "19.3.0-experimental-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-experimental-59aff3e1-20260918" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -33669,7 +33669,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.production.js index 87ddc094ddb4..e259c8666c1e 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-client.production.js @@ -20472,14 +20472,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2240 = React.version; if ( - "19.3.0-experimental-ff8f88fc-20260915" !== + "19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion$jscomp$inline_2240 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2240, - "19.3.0-experimental-ff8f88fc-20260915" + "19.3.0-experimental-59aff3e1-20260918" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20501,10 +20501,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2896 = { bundleType: 0, - version: "19.3.0-experimental-ff8f88fc-20260915", + version: "19.3.0-experimental-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-experimental-59aff3e1-20260918" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2897 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20611,4 +20611,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.development.js index ce4f8ca77415..94a46243c0c1 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.development.js @@ -33534,11 +33534,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -33575,10 +33575,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-ff8f88fc-20260915", + version: "19.3.0-experimental-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-experimental-59aff3e1-20260918" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -34068,7 +34068,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.profiling.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.profiling.js index 4084d9fc6b03..811050602a1c 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.profiling.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-profiling.profiling.js @@ -22559,14 +22559,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2544 = React.version; if ( - "19.3.0-experimental-ff8f88fc-20260915" !== + "19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion$jscomp$inline_2544 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2544, - "19.3.0-experimental-ff8f88fc-20260915" + "19.3.0-experimental-59aff3e1-20260918" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -22588,10 +22588,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_3217 = { bundleType: 0, - version: "19.3.0-experimental-ff8f88fc-20260915", + version: "19.3.0-experimental-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-experimental-59aff3e1-20260918" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_3218 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -22871,7 +22871,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.development.js index e0079c67e0dd..6264c309fe42 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.development.js @@ -10825,5 +10825,5 @@ 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js index 8b5ccfa26a16..4e9ae68bc679 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.browser.production.js @@ -7253,4 +7253,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.development.js index e5159d2adf7d..0df166ddbb00 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.development.js @@ -10825,5 +10825,5 @@ 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' ); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.production.js index ecfd62b629de..c8079d1c24ed 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server-legacy.node.production.js @@ -7358,4 +7358,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' ); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.development.js index 370144045eec..7a10c172ee55 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.development.js @@ -9857,11 +9857,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -11658,5 +11658,5 @@ startWork(request); }); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.production.js index 881168749b3f..22a31e323c2b 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.browser.production.js @@ -7980,12 +7980,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.3.0-experimental-ff8f88fc-20260915" + "19.3.0-experimental-59aff3e1-20260918" ) ); } @@ -8200,4 +8200,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.bun.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.bun.production.js index 0dd84fb1faf8..1ae29fdbf3b9 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.bun.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.bun.production.js @@ -7674,11 +7674,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8171,4 +8171,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.development.js index 91715ee93983..b9d6612d8937 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.development.js @@ -9886,11 +9886,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -11683,5 +11683,5 @@ startWork(request); }); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.production.js index daf25a4c633d..fec7269c151b 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.edge.production.js @@ -8100,11 +8100,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8318,4 +8318,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.development.js index e28745da2f6d..b8d95af092bc 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.development.js @@ -9747,11 +9747,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -11834,5 +11834,5 @@ } }; }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js index e9fe1f49ebc1..f0212291bd57 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-server.node.production.js @@ -7979,11 +7979,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8481,4 +8481,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.development.js index 0a19e4e3a718..9ce9c7103a8f 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.development.js @@ -33798,11 +33798,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-experimental-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -33839,10 +33839,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-ff8f88fc-20260915", + version: "19.3.0-experimental-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-experimental-59aff3e1-20260918" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -34156,5 +34156,5 @@ } }; }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.production.js index b5329905e1cc..31980afee995 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom-unstable_testing.production.js @@ -20788,14 +20788,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2269 = React.version; if ( - "19.3.0-experimental-ff8f88fc-20260915" !== + "19.3.0-experimental-59aff3e1-20260918" !== isomorphicReactPackageVersion$jscomp$inline_2269 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2269, - "19.3.0-experimental-ff8f88fc-20260915" + "19.3.0-experimental-59aff3e1-20260918" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20817,10 +20817,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2930 = { bundleType: 0, - version: "19.3.0-experimental-ff8f88fc-20260915", + version: "19.3.0-experimental-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-experimental-59aff3e1-20260918" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2931 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -21078,4 +21078,4 @@ exports.observeVisibleRects = function ( } }; }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.development.js index b16061df12fc..ea27e8bb6027 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.development.js @@ -435,7 +435,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.production.js index d2b5544bb5a0..54b2f457d4b1 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.production.js @@ -226,4 +226,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.development.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.development.js index c79131725d46..da75652de882 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.development.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.development.js @@ -345,5 +345,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.production.js b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.production.js index 4582a2541365..9b6ddbf82314 100644 --- a/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.production.js +++ b/packages/next/src/compiled/react-dom-experimental/cjs/react-dom.react-server.production.js @@ -158,4 +158,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom-experimental/package.json b/packages/next/src/compiled/react-dom-experimental/package.json index f0e4b2c2fe31..426d42101c98 100644 --- a/packages/next/src/compiled/react-dom-experimental/package.json +++ b/packages/next/src/compiled/react-dom-experimental/package.json @@ -72,10 +72,10 @@ "./package.json": "./package.json" }, "dependencies": { - "scheduler": "0.0.0-experimental-ff8f88fc-20260915" + "scheduler": "0.0.0-experimental-59aff3e1-20260918" }, "peerDependencies": { - "react": "0.0.0-experimental-ff8f88fc-20260915" + "react": "0.0.0-experimental-59aff3e1-20260918" }, "browser": { "./server.js": "./server.browser.js", diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-client.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-client.development.js index 2d76e440b8d4..6fb63f54c42d 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-client.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-client.development.js @@ -31089,11 +31089,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -31130,10 +31130,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-canary-ff8f88fc-20260915", + version: "19.3.0-canary-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-canary-59aff3e1-20260918" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -31271,7 +31271,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-client.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-client.production.js index b4fd89ccf16c..72b5ed0e7b11 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-client.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-client.production.js @@ -18541,14 +18541,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2047 = React.version; if ( - "19.3.0-canary-ff8f88fc-20260915" !== + "19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion$jscomp$inline_2047 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2047, - "19.3.0-canary-ff8f88fc-20260915" + "19.3.0-canary-59aff3e1-20260918" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -18570,10 +18570,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2590 = { bundleType: 0, - version: "19.3.0-canary-ff8f88fc-20260915", + version: "19.3.0-canary-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-canary-59aff3e1-20260918" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2591 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -18671,4 +18671,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.development.js index 0a32f8640152..ea6fc89e1360 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.development.js @@ -31147,11 +31147,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -31188,10 +31188,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-canary-ff8f88fc-20260915", + version: "19.3.0-canary-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-canary-59aff3e1-20260918" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -31671,7 +31671,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.profiling.js b/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.profiling.js index 080a5b1739bb..f99f5b40cac5 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.profiling.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-profiling.profiling.js @@ -20475,14 +20475,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2351 = React.version; if ( - "19.3.0-canary-ff8f88fc-20260915" !== + "19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion$jscomp$inline_2351 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2351, - "19.3.0-canary-ff8f88fc-20260915" + "19.3.0-canary-59aff3e1-20260918" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20504,10 +20504,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2907 = { bundleType: 0, - version: "19.3.0-canary-ff8f88fc-20260915", + version: "19.3.0-canary-59aff3e1-20260918", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-ff8f88fc-20260915" + reconcilerVersion: "19.3.0-canary-59aff3e1-20260918" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2908 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20778,7 +20778,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.development.js index bdb0d0995b72..f831be10f5bc 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.development.js @@ -10438,5 +10438,5 @@ 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.production.js index 8df7efee93fb..679e05017c1e 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.browser.production.js @@ -6975,4 +6975,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.development.js index 10bb975e6998..20937219b4c1 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.development.js @@ -10438,5 +10438,5 @@ 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' ); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.production.js index 2f5c04d76c21..7c0933876c65 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server-legacy.node.production.js @@ -7069,4 +7069,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToPipeableStream" which supports Suspense on the server' ); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.development.js index eb38ecffea38..c6ecf2adfd66 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.development.js @@ -9425,11 +9425,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -11209,5 +11209,5 @@ startWork(request); }); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.production.js index 6e54769727e4..0c867e935aee 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.browser.production.js @@ -7619,12 +7619,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.3.0-canary-ff8f88fc-20260915" + "19.3.0-canary-59aff3e1-20260918" ) ); } @@ -7839,4 +7839,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js index dd534d5f94ae..eb0f9f8e0771 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js @@ -7328,11 +7328,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7825,4 +7825,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.development.js index c289ea78679c..70cf7a0f6e52 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.development.js @@ -9448,11 +9448,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -11228,5 +11228,5 @@ startWork(request); }); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js index 7f68626aa721..2559c3fbf22a 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js @@ -7728,11 +7728,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7946,4 +7946,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.development.js index fb5bfcef6603..607dadcef892 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.development.js @@ -9323,11 +9323,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -11393,5 +11393,5 @@ } }; }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.production.js index 2ff31651840e..366a09e1b53c 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom-server.node.production.js @@ -7621,11 +7621,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-ff8f88fc-20260915" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-59aff3e1-20260918" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.3.0-canary-ff8f88fc-20260915\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-59aff3e1-20260918\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8123,4 +8123,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom.development.js index d05b805e680d..54d1ef25700a 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom.development.js @@ -435,7 +435,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom.production.js index 3eb0fe2c258c..589c8fb8ed66 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom.production.js @@ -226,4 +226,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.development.js b/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.development.js index 93b61aee189c..c6dedfe50eb8 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.development.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.development.js @@ -345,5 +345,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.production.js b/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.production.js index a2a6592d7b3b..da27d3ba8830 100644 --- a/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.production.js +++ b/packages/next/src/compiled/react-dom/cjs/react-dom.react-server.production.js @@ -158,4 +158,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-dom/package.json b/packages/next/src/compiled/react-dom/package.json index 43276dc6e25e..7c36f567eafe 100644 --- a/packages/next/src/compiled/react-dom/package.json +++ b/packages/next/src/compiled/react-dom/package.json @@ -67,10 +67,10 @@ "./package.json": "./package.json" }, "dependencies": { - "scheduler": "0.28.0-canary-ff8f88fc-20260915" + "scheduler": "0.28.0-canary-59aff3e1-20260918" }, "peerDependencies": { - "react": "19.3.0-canary-ff8f88fc-20260915" + "react": "19.3.0-canary-59aff3e1-20260918" }, "browser": { "./server.js": "./server.browser.js", diff --git a/packages/next/src/compiled/react-experimental/cjs/react.development.js b/packages/next/src/compiled/react-experimental/cjs/react.development.js index de90d518bde9..76c8628ba78a 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.development.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.development.js @@ -1391,7 +1391,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react-experimental/cjs/react.production.js b/packages/next/src/compiled/react-experimental/cjs/react.production.js index ef85acb05789..c8f22316b2c3 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.production.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.production.js @@ -613,4 +613,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-experimental/cjs/react.react-server.development.js b/packages/next/src/compiled/react-experimental/cjs/react.react-server.development.js index f2f4bc76b0c9..89dddfa7e188 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.react-server.development.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.react-server.development.js @@ -1061,5 +1061,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.3.0-experimental-ff8f88fc-20260915"; + exports.version = "19.3.0-experimental-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react-experimental/cjs/react.react-server.production.js b/packages/next/src/compiled/react-experimental/cjs/react.react-server.production.js index bc788942a3c6..8a2a15b7a6f7 100644 --- a/packages/next/src/compiled/react-experimental/cjs/react.react-server.production.js +++ b/packages/next/src/compiled/react-experimental/cjs/react.react-server.production.js @@ -579,4 +579,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.3.0-experimental-ff8f88fc-20260915"; +exports.version = "19.3.0-experimental-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react-is/package.json b/packages/next/src/compiled/react-is/package.json index df2c9e0af549..ef1e5244d516 100644 --- a/packages/next/src/compiled/react-is/package.json +++ b/packages/next/src/compiled/react-is/package.json @@ -1,6 +1,6 @@ { "name": "react-is", - "version": "19.3.0-canary-ff8f88fc-20260915", + "version": "19.3.0-canary-59aff3e1-20260918", "description": "Brand checking of React Elements.", "main": "index.js", "sideEffects": false, diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js index b7b8e350735d..baa0b5733ad7 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.development.js @@ -479,16 +479,28 @@ )); if (null === value) return null; if ("object" === typeof value) { + originalValue = knownServerObjectReferences.get(value); + if (void 0 !== originalValue) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: originalValue }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( @@ -501,9 +513,9 @@ null === formData && (formData = new FormData()); pendingParts++; try { - parentReference = init(originalValue); + refId = init(originalValue); var lazyId = nextPartId++, - partJSON = serializeModel(parentReference, lazyId); + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -514,7 +526,7 @@ ) { pendingParts++; var _lazyId = nextPartId++; - parentReference = function () { + refId = function () { try { var _partJSON2 = serializeModel(value, _lazyId), _data = formData; @@ -525,7 +537,7 @@ reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + _lazyId.toString(16); } reject(x); @@ -534,11 +546,11 @@ pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -561,17 +573,17 @@ }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((parentReference = parentReference + ":" + key), - writtenObjects.set(value, parentReference), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((refId = refId + ":" + key), + writtenObjects.set(value, refId), void 0 !== temporaryReferences && - temporaryReferences.set(parentReference, value))); + temporaryReferences.set(refId, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); @@ -586,26 +598,26 @@ if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); @@ -637,33 +649,29 @@ formData.append(formFieldPrefix + key, value), "$B" + key.toString(16) ); - if ((parentReference = getIteratorFn(value))) + if ((refId = getIteratorFn(value))) return ( - (parentReference = parentReference.call(value)), - parentReference === value + (refId = refId.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && value instanceof ReadableStream ) return serializeReadableStream(value); - parentReference = value[ASYNC_ITERATOR]; - if ("function" === typeof parentReference) - return serializeAsyncIterable(value, parentReference.call(value)); - parentReference = getPrototypeOf(value); + refId = value[ASYNC_ITERATOR]; + if ("function" === typeof refId) + return serializeAsyncIterable(value, refId.call(value)); + refId = getPrototypeOf(value); if ( - parentReference !== ObjectPrototype$1 && - (null === parentReference || - null !== getPrototypeOf(parentReference)) + refId !== ObjectPrototype$1 && + (null === refId || null !== getPrototypeOf(refId)) ) { if (void 0 === temporaryReferences) throw Error( @@ -685,11 +693,11 @@ ) : isSimpleObject(value) ? Object.getOwnPropertySymbols && - ((parentReference = Object.getOwnPropertySymbols(value)), - 0 < parentReference.length && + ((refId = Object.getOwnPropertySymbols(value)), + 0 < refId.length && console.error( "Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s", - parentReference[0].description, + refId[0].description, describeObjectForErrorMessage(this, key) )) : console.error( @@ -708,30 +716,27 @@ if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -740,12 +745,9 @@ if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." + describeObjectForErrorMessage(this, key) @@ -2465,6 +2467,14 @@ ); return null; } + function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); + } function resolveLazy(value) { for ( ; @@ -2801,6 +2811,17 @@ key, loadServerReference ); + case "H": + return ( + (ref = value.slice(2)), + getOutlinedModel( + response, + ref, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -5141,7 +5162,44 @@ CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"), ObjectPrototype$1 = Object.prototype, knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(), fakeServerFunctionIdx = 0, + serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, v8FrameRegExp = /^ {3} at (?:(.+) \((.+):(\d+):(\d+)\)|(?:async )?(.+):(\d+):(\d+))$/, jscSpiderMonkeyFrameRegExp = /(?:(.*)@)?(.*):(\d+):(\d+)/, @@ -5332,10 +5390,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-ff8f88fc-20260915", + version: "19.3.0-experimental-59aff3e1-20260918", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-ff8f88fc-20260915", + reconcilerVersion: "19.3.0-experimental-59aff3e1-20260918", getCurrentComponentInfo: function () { return currentOwnerInDEV; } diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.production.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.production.js index d3a73a55123f..741d7b704963 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.browser.production.js @@ -125,7 +125,8 @@ var ASYNC_ITERATOR = Symbol.asyncIterator, isArrayImpl = Array.isArray, getPrototypeOf = Object.getPrototypeOf, ObjectPrototype$1 = Object.prototype, - knownServerReferences = new WeakMap(); + knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(); function serializeNumber(number) { return Number.isFinite(number) ? 0 === number && -Infinity === 1 / number @@ -272,28 +273,40 @@ function processReply( function resolveToJSON(key, value) { if (null === value) return null; if ("object" === typeof value) { + var objectReferenceId = knownServerObjectReferences.get(value); + if (void 0 !== objectReferenceId) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: objectReferenceId }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error(formatProdErrorMessage(510, "")); case REACT_LAZY_TYPE: - parentReference = value._payload; + objectReferenceId = value._payload; var init = value._init; null === formData && (formData = new FormData()); pendingParts++; try { - var resolvedModel = init(parentReference), - lazyId = nextPartId++, - partJSON = serializeModel(resolvedModel, lazyId); + refId = init(objectReferenceId); + var lazyId = nextPartId++, + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -304,7 +317,7 @@ function processReply( ) { pendingParts++; var lazyId$23 = nextPartId++; - parentReference = function () { + refId = function () { try { var partJSON$24 = serializeModel(value, lazyId$23), data$25 = formData; @@ -315,7 +328,7 @@ function processReply( reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + lazyId$23.toString(16); } reject(x); @@ -324,11 +337,11 @@ function processReply( pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -337,12 +350,12 @@ function processReply( value.then(function (partValue) { try { var previousReference = writtenObjects.get(partValue); - var partJSON$27 = + var partJSON$28 = void 0 !== previousReference ? JSON.stringify(previousReference) : serializeModel(partValue, promiseId); partValue = formData; - partValue.append(formFieldPrefix + promiseId, partJSON$27); + partValue.append(formFieldPrefix + promiseId, partJSON$28); pendingParts--; 0 === pendingParts && resolve(partValue); } catch (reason) { @@ -351,51 +364,51 @@ function processReply( }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((key = parentReference + ":" + key), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((key = refId + ":" + key), writtenObjects.set(value, key), void 0 !== temporaryReferences && temporaryReferences.set(key, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); - var data$31 = formData; + var data$32 = formData; key = nextPartId++; var prefix = formFieldPrefix + "_" + key + "_"; value.forEach(function (originalValue, originalKey) { - data$31.append(prefix + originalKey, originalValue); + data$32.append(prefix + originalKey, originalValue); }); return "$K" + key.toString(16); } if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); if (value instanceof Uint8Array) return serializeTypedArray("o", value); @@ -421,17 +434,14 @@ function processReply( ); if ((key = getIteratorFn(value))) return ( - (parentReference = key.call(value)), - parentReference === value + (refId = key.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && @@ -462,42 +472,36 @@ function processReply( if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error(formatProdErrorMessage(469)); } if ("symbol" === typeof value) { if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error(formatProdErrorMessage(517, "")); } if ("bigint" === typeof value) return "$n" + value.toString(10); @@ -540,6 +544,36 @@ function registerBoundServerReference(reference, id, bound) { bound: bound }); } +var serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error(formatProdErrorMessage(609, String(name))); + }, + set: function () { + throw Error(formatProdErrorMessage(610)); + } +}; function createBoundServerReference(metaData, callServer) { function action() { var args = Array.prototype.slice.call(arguments); @@ -968,19 +1002,19 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$45 = value._payload; - if (referencedChunk$45 === handler.chunk) value = handler.value; + var referencedChunk$47 = value._payload; + if (referencedChunk$47 === handler.chunk) value = handler.value; else { - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "resolved_model": - initializeModelChunk(referencedChunk$45); + initializeModelChunk(referencedChunk$47); break; case "resolved_module": - initializeModuleChunk(referencedChunk$45); + initializeModuleChunk(referencedChunk$47); } - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "fulfilled": - value = referencedChunk$45.value; + value = referencedChunk$47.value; continue; } break; @@ -1120,6 +1154,14 @@ function loadServerReference(response, metaData, parentObject, key) { ); return null; } +function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); +} var EMPTY_REFERENCE_PATH = []; function getOutlinedModel(response, reference, parentObject, key, map) { var id = parseInt(reference, 16); @@ -1347,6 +1389,17 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return ( + (value = value.slice(2)), + getOutlinedModel( + response, + value, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -1519,8 +1572,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$59 = new ReactPromise("pending", null, null); - chunk$59.then( + var chunk$62 = new ReactPromise("pending", null, null); + chunk$62.then( function (v) { return controller.enqueue(v); }, @@ -1528,10 +1581,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$59; + previousBlockedChunk = chunk$62; chunk.then(function () { - previousBlockedChunk === chunk$59 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$59, json); + previousBlockedChunk === chunk$62 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$62, json); }); } }, @@ -1687,8 +1740,8 @@ function mergeBuffer(buffer, lastChunk) { for (var l = buffer.length, byteLength = lastChunk.length, i = 0; i < l; i++) byteLength += buffer[i].byteLength; byteLength = new Uint8Array(byteLength); - for (var i$60 = (i = 0); i$60 < l; i$60++) { - var chunk = buffer[i$60]; + for (var i$63 = (i = 0); i$63 < l; i$63++) { + var chunk = buffer[i$63]; byteLength.set(chunk, i); i += chunk.byteLength; } diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.edge.development.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.edge.development.js index f798f0451de2..79cd2ef9a324 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.edge.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.edge.development.js @@ -508,16 +508,28 @@ )); if (null === value) return null; if ("object" === typeof value) { + originalValue = knownServerObjectReferences.get(value); + if (void 0 !== originalValue) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: originalValue }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( @@ -530,9 +542,9 @@ null === formData && (formData = new FormData()); pendingParts++; try { - parentReference = init(originalValue); + refId = init(originalValue); var lazyId = nextPartId++, - partJSON = serializeModel(parentReference, lazyId); + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -543,7 +555,7 @@ ) { pendingParts++; var _lazyId = nextPartId++; - parentReference = function () { + refId = function () { try { var _partJSON2 = serializeModel(value, _lazyId), _data = formData; @@ -554,7 +566,7 @@ reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + _lazyId.toString(16); } reject(x); @@ -563,11 +575,11 @@ pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -590,17 +602,17 @@ }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((parentReference = parentReference + ":" + key), - writtenObjects.set(value, parentReference), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((refId = refId + ":" + key), + writtenObjects.set(value, refId), void 0 !== temporaryReferences && - temporaryReferences.set(parentReference, value))); + temporaryReferences.set(refId, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); @@ -615,26 +627,26 @@ if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); @@ -666,33 +678,29 @@ formData.append(formFieldPrefix + key, value), "$B" + key.toString(16) ); - if ((parentReference = getIteratorFn(value))) + if ((refId = getIteratorFn(value))) return ( - (parentReference = parentReference.call(value)), - parentReference === value + (refId = refId.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && value instanceof ReadableStream ) return serializeReadableStream(value); - parentReference = value[ASYNC_ITERATOR]; - if ("function" === typeof parentReference) - return serializeAsyncIterable(value, parentReference.call(value)); - parentReference = getPrototypeOf(value); + refId = value[ASYNC_ITERATOR]; + if ("function" === typeof refId) + return serializeAsyncIterable(value, refId.call(value)); + refId = getPrototypeOf(value); if ( - parentReference !== ObjectPrototype$1 && - (null === parentReference || - null !== getPrototypeOf(parentReference)) + refId !== ObjectPrototype$1 && + (null === refId || null !== getPrototypeOf(refId)) ) { if (void 0 === temporaryReferences) throw Error( @@ -714,11 +722,11 @@ ) : isSimpleObject(value) ? Object.getOwnPropertySymbols && - ((parentReference = Object.getOwnPropertySymbols(value)), - 0 < parentReference.length && + ((refId = Object.getOwnPropertySymbols(value)), + 0 < refId.length && console.error( "Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s", - parentReference[0].description, + refId[0].description, describeObjectForErrorMessage(this, key) )) : console.error( @@ -737,30 +745,27 @@ if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -769,12 +774,9 @@ if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." + describeObjectForErrorMessage(this, key) @@ -2624,6 +2626,14 @@ ); return null; } + function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); + } function resolveLazy(value) { for ( ; @@ -2960,6 +2970,17 @@ key, loadServerReference ); + case "H": + return ( + (ref = value.slice(2)), + getOutlinedModel( + response, + ref, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -5184,8 +5205,45 @@ CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"), ObjectPrototype$1 = Object.prototype, knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(), boundCache = new WeakMap(), fakeServerFunctionIdx = 0, + serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice, v8FrameRegExp = diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.edge.production.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.edge.production.js index 120f49896d8a..059eaf402758 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.edge.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.edge.production.js @@ -144,7 +144,8 @@ var ASYNC_ITERATOR = Symbol.asyncIterator, isArrayImpl = Array.isArray, getPrototypeOf = Object.getPrototypeOf, ObjectPrototype$1 = Object.prototype, - knownServerReferences = new WeakMap(); + knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(); function serializeNumber(number) { return Number.isFinite(number) ? 0 === number && -Infinity === 1 / number @@ -291,30 +292,42 @@ function processReply( function resolveToJSON(key, value) { if (null === value) return null; if ("object" === typeof value) { + var objectReferenceId = knownServerObjectReferences.get(value); + if (void 0 !== objectReferenceId) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: objectReferenceId }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( "React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options." ); case REACT_LAZY_TYPE: - parentReference = value._payload; + objectReferenceId = value._payload; var init = value._init; null === formData && (formData = new FormData()); pendingParts++; try { - var resolvedModel = init(parentReference), - lazyId = nextPartId++, - partJSON = serializeModel(resolvedModel, lazyId); + refId = init(objectReferenceId); + var lazyId = nextPartId++, + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -325,7 +338,7 @@ function processReply( ) { pendingParts++; var lazyId$23 = nextPartId++; - parentReference = function () { + refId = function () { try { var partJSON$24 = serializeModel(value, lazyId$23), data$25 = formData; @@ -336,7 +349,7 @@ function processReply( reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + lazyId$23.toString(16); } reject(x); @@ -345,11 +358,11 @@ function processReply( pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -358,12 +371,12 @@ function processReply( value.then(function (partValue) { try { var previousReference = writtenObjects.get(partValue); - var partJSON$27 = + var partJSON$28 = void 0 !== previousReference ? JSON.stringify(previousReference) : serializeModel(partValue, promiseId); partValue = formData; - partValue.append(formFieldPrefix + promiseId, partJSON$27); + partValue.append(formFieldPrefix + promiseId, partJSON$28); pendingParts--; 0 === pendingParts && resolve(partValue); } catch (reason) { @@ -372,51 +385,51 @@ function processReply( }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((key = parentReference + ":" + key), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((key = refId + ":" + key), writtenObjects.set(value, key), void 0 !== temporaryReferences && temporaryReferences.set(key, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); - var data$31 = formData; + var data$32 = formData; key = nextPartId++; var prefix = formFieldPrefix + "_" + key + "_"; value.forEach(function (originalValue, originalKey) { - data$31.append(prefix + originalKey, originalValue); + data$32.append(prefix + originalKey, originalValue); }); return "$K" + key.toString(16); } if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); if (value instanceof Uint8Array) return serializeTypedArray("o", value); @@ -442,17 +455,14 @@ function processReply( ); if ((key = getIteratorFn(value))) return ( - (parentReference = key.call(value)), - parentReference === value + (refId = key.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && @@ -485,30 +495,27 @@ function processReply( if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -517,12 +524,9 @@ function processReply( if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." ); @@ -686,7 +690,43 @@ function registerBoundServerReference(reference, id, bound, encodeFormAction) { bind: { value: bind } })); } -var FunctionBind = Function.prototype.bind, +var serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, + FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice; function bind() { var referenceClosure = knownServerReferences.get(this); @@ -1148,19 +1188,19 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$45 = value._payload; - if (referencedChunk$45 === handler.chunk) value = handler.value; + var referencedChunk$47 = value._payload; + if (referencedChunk$47 === handler.chunk) value = handler.value; else { - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "resolved_model": - initializeModelChunk(referencedChunk$45); + initializeModelChunk(referencedChunk$47); break; case "resolved_module": - initializeModuleChunk(referencedChunk$45); + initializeModuleChunk(referencedChunk$47); } - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "fulfilled": - value = referencedChunk$45.value; + value = referencedChunk$47.value; continue; } break; @@ -1314,6 +1354,14 @@ function loadServerReference(response, metaData, parentObject, key) { ); return null; } +function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); +} var EMPTY_REFERENCE_PATH = []; function getOutlinedModel(response, reference, parentObject, key, map) { var id = parseInt(reference, 16); @@ -1541,6 +1589,17 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return ( + (value = value.slice(2)), + getOutlinedModel( + response, + value, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -1726,8 +1785,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$59 = new ReactPromise("pending", null, null); - chunk$59.then( + var chunk$62 = new ReactPromise("pending", null, null); + chunk$62.then( function (v) { return controller.enqueue(v); }, @@ -1735,10 +1794,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$59; + previousBlockedChunk = chunk$62; chunk.then(function () { - previousBlockedChunk === chunk$59 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$59, json); + previousBlockedChunk === chunk$62 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$62, json); }); } }, @@ -1899,8 +1958,8 @@ function mergeBuffer(buffer, lastChunk) { for (var l = buffer.length, byteLength = lastChunk.length, i = 0; i < l; i++) byteLength += buffer[i].byteLength; byteLength = new Uint8Array(byteLength); - for (var i$60 = (i = 0); i$60 < l; i$60++) { - var chunk = buffer[i$60]; + for (var i$63 = (i = 0); i$63 < l; i$63++) { + var chunk = buffer[i$63]; byteLength.set(chunk, i); i += chunk.byteLength; } diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.node.development.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.node.development.js index a85a56bb8244..9c48d1ecb7e8 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.node.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.node.development.js @@ -508,16 +508,28 @@ )); if (null === value) return null; if ("object" === typeof value) { + originalValue = knownServerObjectReferences.get(value); + if (void 0 !== originalValue) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: originalValue }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( @@ -530,9 +542,9 @@ null === formData && (formData = new FormData()); pendingParts++; try { - parentReference = init(originalValue); + refId = init(originalValue); var lazyId = nextPartId++, - partJSON = serializeModel(parentReference, lazyId); + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -543,7 +555,7 @@ ) { pendingParts++; var _lazyId = nextPartId++; - parentReference = function () { + refId = function () { try { var _partJSON2 = serializeModel(value, _lazyId), _data = formData; @@ -554,7 +566,7 @@ reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + _lazyId.toString(16); } reject(x); @@ -563,11 +575,11 @@ pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -590,17 +602,17 @@ }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((parentReference = parentReference + ":" + key), - writtenObjects.set(value, parentReference), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((refId = refId + ":" + key), + writtenObjects.set(value, refId), void 0 !== temporaryReferences && - temporaryReferences.set(parentReference, value))); + temporaryReferences.set(refId, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); @@ -615,26 +627,26 @@ if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); @@ -666,33 +678,29 @@ formData.append(formFieldPrefix + key, value), "$B" + key.toString(16) ); - if ((parentReference = getIteratorFn(value))) + if ((refId = getIteratorFn(value))) return ( - (parentReference = parentReference.call(value)), - parentReference === value + (refId = refId.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && value instanceof ReadableStream ) return serializeReadableStream(value); - parentReference = value[ASYNC_ITERATOR]; - if ("function" === typeof parentReference) - return serializeAsyncIterable(value, parentReference.call(value)); - parentReference = getPrototypeOf(value); + refId = value[ASYNC_ITERATOR]; + if ("function" === typeof refId) + return serializeAsyncIterable(value, refId.call(value)); + refId = getPrototypeOf(value); if ( - parentReference !== ObjectPrototype$1 && - (null === parentReference || - null !== getPrototypeOf(parentReference)) + refId !== ObjectPrototype$1 && + (null === refId || null !== getPrototypeOf(refId)) ) { if (void 0 === temporaryReferences) throw Error( @@ -714,11 +722,11 @@ ) : isSimpleObject(value) ? Object.getOwnPropertySymbols && - ((parentReference = Object.getOwnPropertySymbols(value)), - 0 < parentReference.length && + ((refId = Object.getOwnPropertySymbols(value)), + 0 < refId.length && console.error( "Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s", - parentReference[0].description, + refId[0].description, describeObjectForErrorMessage(this, key) )) : console.error( @@ -737,30 +745,27 @@ if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -769,12 +774,9 @@ if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." + describeObjectForErrorMessage(this, key) @@ -2627,6 +2629,14 @@ ); return null; } + function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); + } function resolveLazy(value) { for ( ; @@ -2963,6 +2973,17 @@ key, loadServerReference ); + case "H": + return ( + (ref = value.slice(2)), + getOutlinedModel( + response, + ref, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -5304,8 +5325,45 @@ CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"), ObjectPrototype$1 = Object.prototype, knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(), boundCache = new WeakMap(), fakeServerFunctionIdx = 0, + serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice, v8FrameRegExp = diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.node.production.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.node.production.js index d6c452de207e..303252e13967 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.node.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-client.node.production.js @@ -145,7 +145,8 @@ var ASYNC_ITERATOR = Symbol.asyncIterator, isArrayImpl = Array.isArray, getPrototypeOf = Object.getPrototypeOf, ObjectPrototype$1 = Object.prototype, - knownServerReferences = new WeakMap(); + knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(); function serializeNumber(number) { return Number.isFinite(number) ? 0 === number && -Infinity === 1 / number @@ -292,30 +293,42 @@ function processReply( function resolveToJSON(key, value) { if (null === value) return null; if ("object" === typeof value) { + var objectReferenceId = knownServerObjectReferences.get(value); + if (void 0 !== objectReferenceId) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: objectReferenceId }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( "React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options." ); case REACT_LAZY_TYPE: - parentReference = value._payload; + objectReferenceId = value._payload; var init = value._init; null === formData && (formData = new FormData()); pendingParts++; try { - var resolvedModel = init(parentReference), - lazyId = nextPartId++, - partJSON = serializeModel(resolvedModel, lazyId); + refId = init(objectReferenceId); + var lazyId = nextPartId++, + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -326,7 +339,7 @@ function processReply( ) { pendingParts++; var lazyId$23 = nextPartId++; - parentReference = function () { + refId = function () { try { var partJSON$24 = serializeModel(value, lazyId$23), data$25 = formData; @@ -337,7 +350,7 @@ function processReply( reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + lazyId$23.toString(16); } reject(x); @@ -346,11 +359,11 @@ function processReply( pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -359,12 +372,12 @@ function processReply( value.then(function (partValue) { try { var previousReference = writtenObjects.get(partValue); - var partJSON$27 = + var partJSON$28 = void 0 !== previousReference ? JSON.stringify(previousReference) : serializeModel(partValue, promiseId); partValue = formData; - partValue.append(formFieldPrefix + promiseId, partJSON$27); + partValue.append(formFieldPrefix + promiseId, partJSON$28); pendingParts--; 0 === pendingParts && resolve(partValue); } catch (reason) { @@ -373,51 +386,51 @@ function processReply( }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((key = parentReference + ":" + key), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((key = refId + ":" + key), writtenObjects.set(value, key), void 0 !== temporaryReferences && temporaryReferences.set(key, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); - var data$31 = formData; + var data$32 = formData; key = nextPartId++; var prefix = formFieldPrefix + "_" + key + "_"; value.forEach(function (originalValue, originalKey) { - data$31.append(prefix + originalKey, originalValue); + data$32.append(prefix + originalKey, originalValue); }); return "$K" + key.toString(16); } if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); if (value instanceof Uint8Array) return serializeTypedArray("o", value); @@ -443,17 +456,14 @@ function processReply( ); if ((key = getIteratorFn(value))) return ( - (parentReference = key.call(value)), - parentReference === value + (refId = key.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && @@ -486,30 +496,27 @@ function processReply( if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -518,12 +525,9 @@ function processReply( if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." ); @@ -687,7 +691,43 @@ function registerBoundServerReference(reference, id, bound, encodeFormAction) { bind: { value: bind } })); } -var FunctionBind = Function.prototype.bind, +var serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, + FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice; function bind() { var referenceClosure = knownServerReferences.get(this); @@ -1149,19 +1189,19 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$45 = value._payload; - if (referencedChunk$45 === handler.chunk) value = handler.value; + var referencedChunk$47 = value._payload; + if (referencedChunk$47 === handler.chunk) value = handler.value; else { - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "resolved_model": - initializeModelChunk(referencedChunk$45); + initializeModelChunk(referencedChunk$47); break; case "resolved_module": - initializeModuleChunk(referencedChunk$45); + initializeModuleChunk(referencedChunk$47); } - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "fulfilled": - value = referencedChunk$45.value; + value = referencedChunk$47.value; continue; } break; @@ -1315,6 +1355,14 @@ function loadServerReference(response, metaData, parentObject, key) { ); return null; } +function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); +} var EMPTY_REFERENCE_PATH = []; function getOutlinedModel(response, reference, parentObject, key, map) { var id = parseInt(reference, 16); @@ -1542,6 +1590,17 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return ( + (value = value.slice(2)), + getOutlinedModel( + response, + value, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -1730,8 +1789,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$59 = new ReactPromise("pending", null, null); - chunk$59.then( + var chunk$62 = new ReactPromise("pending", null, null); + chunk$62.then( function (v) { return controller.enqueue(v); }, @@ -1739,10 +1798,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$59; + previousBlockedChunk = chunk$62; chunk.then(function () { - previousBlockedChunk === chunk$59 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$59, json); + previousBlockedChunk === chunk$62 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$62, json); }); } }, @@ -1903,8 +1962,8 @@ function mergeBuffer(buffer, lastChunk) { for (var l = buffer.length, byteLength = lastChunk.length, i = 0; i < l; i++) byteLength += buffer[i].byteLength; byteLength = new Uint8Array(byteLength); - for (var i$60 = (i = 0); i$60 < l; i$60++) { - var chunk = buffer[i$60]; + for (var i$63 = (i = 0); i$63 < l; i$63++) { + var chunk = buffer[i$63]; byteLength.set(chunk, i); i += chunk.byteLength; } diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.browser.development.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.browser.development.js index ccad5e42c2b7..2b468582c267 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.browser.development.js @@ -2077,6 +2077,7 @@ var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); var originalValue = parent[parentPropertyName]; @@ -2268,35 +2269,44 @@ return value.id; } function serializeServerReference(request, serverReference) { - var writtenServerReferences = request.writtenServerReferences, + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); - if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, - error = serverReference.$$location; - error && - ((error = parseStackTrace(error, 1)), - 0 < error.length && - ((location = error[0]), - (location = [location[0], location[1], location[2], location[3]]))); - existingId = - null !== location - ? { - id: id, - bound: existingId, - name: - "function" === typeof serverReference - ? serverReference.name - : "", - env: (0, request.environmentName)(), - location: location - } - : { id: id, bound: existingId }; + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, + error = serverReference.$$location; + error && + ((error = parseStackTrace(error, 1)), + 0 < error.length && + ((location = error[0]), + (location = [location[0], location[1], location[2], location[3]]))); + existingId = + null !== location + ? { + id: existingId, + bound: boundArgs, + name: + "function" === typeof serverReference + ? serverReference.name + : "", + env: (0, request.environmentName)(), + location: location + } + : { id: existingId, bound: boundArgs }; + } request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); - return "$h" + request.toString(16); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); } function serializeLargeTextString(request, text) { request.pendingChunks++; @@ -2615,6 +2625,8 @@ parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -3744,53 +3756,64 @@ ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array ? emitTypedArrayChunk( request, id, - "m", + "M", value, !1 ) - : value instanceof DataView + : value instanceof BigUint64Array ? emitTypedArrayChunk( request, id, - "V", + "m", value, !1 ) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - emitModelChunk(request, task.id, value)); + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); @@ -4407,94 +4430,123 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } + } + function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -4655,6 +4707,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -4663,6 +4716,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -4691,17 +4746,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -4724,6 +4771,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -4750,6 +4826,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -4758,6 +4835,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -4789,32 +4868,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -4835,20 +4896,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5131,6 +5204,18 @@ loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if ( void 0 === reference || @@ -5394,6 +5479,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -6160,6 +6248,23 @@ !1 ); }; + exports.registerServerObjectReference = function ( + reference, + id, + exportName + ) { + "function" === typeof reference && + console.error( + "registerServerObjectReference: The reference is a function. Use registerServerReference to register a function as a Server Reference." + ); + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); + }; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.browser.production.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.browser.production.js index 8fc86101c8c1..bfc64e886b4c 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.browser.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.browser.production.js @@ -1405,6 +1405,7 @@ function resolveModel(request, task, parent, parentPropertyName, value) { var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); serializedSize += parentPropertyName.length; @@ -1612,6 +1613,27 @@ function outlineModelWithFormatContext(request, value, formatContext) { retryTask(request, value); return value.id; } +function serializeServerReference(request, serverReference) { + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, + existingId = writtenServerReferences.get(serverReference); + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + existingId = { id: existingId, bound: boundArgs }; + } + request = outlineModelWithFormatContext(request, existingId, 0); + writtenServerReferences.set(serverReference, request); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); +} function serializeTypedArray(request, tag, typedArray) { request.pendingChunks++; var bufferId = request.nextChunkId++; @@ -1745,6 +1767,8 @@ function renderModelDestructive( parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -1929,22 +1953,7 @@ function renderModelDestructive( value ); if (value.$$typeof === SERVER_REFERENCE_TAG) - return ( - (parentPropertyName = request.writtenServerReferences), - (parent = parentPropertyName.get(value)), - void 0 !== parent - ? (value = "$h" + parent.toString(16)) - : ((parent = value.$$bound), - (parent = null === parent ? null : Promise.resolve(parent)), - (request = outlineModelWithFormatContext( - request, - { id: value.$$id, bound: parent }, - 0 - )), - parentPropertyName.set(value, request), - (value = "$h" + request.toString(16))), - value - ); + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((request = request.temporaryReferences.get(value)), void 0 !== request) @@ -2156,41 +2165,52 @@ function emitChunk(request, task, value) { ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array - ? emitTypedArrayChunk(request, id, "m", value, !1) - : value instanceof DataView - ? emitTypedArrayChunk(request, id, "V", value, !1) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - emitModelChunk(request, task.id, value)); + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array + ? emitTypedArrayChunk(request, id, "M", value, !1) + : value instanceof BigUint64Array + ? emitTypedArrayChunk(request, id, "m", value, !1) + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.status = 4; @@ -2480,9 +2500,9 @@ function abort(request, reason) { onAllReady(); flushCompletedChunks(request); } - } catch (error$35) { - logRecoverableError(request, error$35, null), - fatalError(request, error$35); + } catch (error$36) { + logRecoverableError(request, error$36, null), + fatalError(request, error$36); } } function resolveServerReference(bundlerConfig, id) { @@ -2709,85 +2729,113 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject(Error(formatProdErrorMessage(580, promiseValue.length, 1e3))); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error(formatProdErrorMessage(580, boundArgs.length, 1e3)); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } +} +function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error(formatProdErrorMessage(611)); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -2946,6 +2994,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -2954,6 +3003,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -2982,11 +3033,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -3008,6 +3057,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -3032,6 +3110,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3040,6 +3119,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3068,26 +3148,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error(formatProdErrorMessage(574)); @@ -3108,20 +3176,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(575)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(575)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(572)); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(576)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(576)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(573)); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(577)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(577)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(578)); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3237,12 +3317,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$40 = new ReactPromise("pending", null, null); - chunk$40.then(enqueue, flightController.error); - previousBlockedChunk = chunk$40; + var chunk$39 = new ReactPromise("pending", null, null); + chunk$39.then(enqueue, flightController.error); + previousBlockedChunk = chunk$39; chunk.then(function () { - previousBlockedChunk === chunk$40 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$40, json, -1); + previousBlockedChunk === chunk$39 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$39, json, -1); }); } }, @@ -3391,6 +3471,18 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error(formatProdErrorMessage(526)); @@ -3622,6 +3714,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -3773,6 +3868,15 @@ exports.registerClientReference = function ( !1 ); }; +exports.registerServerObjectReference = function (reference, id, exportName) { + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); +}; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.edge.development.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.edge.development.js index 97be0bd31af2..3083b1cebed7 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.edge.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.edge.development.js @@ -2137,6 +2137,7 @@ var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); var originalValue = parent[parentPropertyName]; @@ -2328,35 +2329,44 @@ return value.id; } function serializeServerReference(request, serverReference) { - var writtenServerReferences = request.writtenServerReferences, + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); - if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, - error = serverReference.$$location; - error && - ((error = parseStackTrace(error, 1)), - 0 < error.length && - ((location = error[0]), - (location = [location[0], location[1], location[2], location[3]]))); - existingId = - null !== location - ? { - id: id, - bound: existingId, - name: - "function" === typeof serverReference - ? serverReference.name - : "", - env: (0, request.environmentName)(), - location: location - } - : { id: id, bound: existingId }; + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, + error = serverReference.$$location; + error && + ((error = parseStackTrace(error, 1)), + 0 < error.length && + ((location = error[0]), + (location = [location[0], location[1], location[2], location[3]]))); + existingId = + null !== location + ? { + id: existingId, + bound: boundArgs, + name: + "function" === typeof serverReference + ? serverReference.name + : "", + env: (0, request.environmentName)(), + location: location + } + : { id: existingId, bound: boundArgs }; + } request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); - return "$h" + request.toString(16); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); } function serializeLargeTextString(request, text) { request.pendingChunks++; @@ -2675,6 +2685,8 @@ parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -3814,53 +3826,64 @@ ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array ? emitTypedArrayChunk( request, id, - "m", + "M", value, !1 ) - : value instanceof DataView + : value instanceof BigUint64Array ? emitTypedArrayChunk( request, id, - "V", + "m", value, !1 ) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - emitModelChunk(request, task.id, value)); + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); @@ -4489,94 +4512,123 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } + } + function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -4737,6 +4789,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -4745,6 +4798,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -4773,17 +4828,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -4806,6 +4853,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -4832,6 +4908,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -4840,6 +4917,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -4871,32 +4950,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -4917,20 +4978,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5213,6 +5286,18 @@ loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if ( void 0 === reference || @@ -5476,6 +5561,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -6283,6 +6371,23 @@ !1 ); }; + exports.registerServerObjectReference = function ( + reference, + id, + exportName + ) { + "function" === typeof reference && + console.error( + "registerServerObjectReference: The reference is a function. Use registerServerReference to register a function as a Server Reference." + ); + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); + }; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.edge.production.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.edge.production.js index 9fb417523d09..0e57919ee659 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.edge.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.edge.production.js @@ -1428,6 +1428,7 @@ function resolveModel(request, task, parent, parentPropertyName, value) { var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); serializedSize += parentPropertyName.length; @@ -1643,6 +1644,27 @@ function outlineModelWithFormatContext(request, value, formatContext) { retryTask(request, value); return value.id; } +function serializeServerReference(request, serverReference) { + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, + existingId = writtenServerReferences.get(serverReference); + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + existingId = { id: existingId, bound: boundArgs }; + } + request = outlineModelWithFormatContext(request, existingId, 0); + writtenServerReferences.set(serverReference, request); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); +} function serializeTypedArray(request, tag, typedArray) { request.pendingChunks++; var bufferId = request.nextChunkId++; @@ -1778,6 +1800,8 @@ function renderModelDestructive( parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -1960,22 +1984,7 @@ function renderModelDestructive( value ); if (value.$$typeof === SERVER_REFERENCE_TAG) - return ( - (parentPropertyName = request.writtenServerReferences), - (parent = parentPropertyName.get(value)), - void 0 !== parent - ? (value = "$h" + parent.toString(16)) - : ((parent = value.$$bound), - (parent = null === parent ? null : Promise.resolve(parent)), - (request = outlineModelWithFormatContext( - request, - { id: value.$$id, bound: parent }, - 0 - )), - parentPropertyName.set(value, request), - (value = "$h" + request.toString(16))), - value - ); + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((request = request.temporaryReferences.get(value)), void 0 !== request) @@ -2185,41 +2194,52 @@ function emitChunk(request, task, value) { ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array - ? emitTypedArrayChunk(request, id, "m", value, !1) - : value instanceof DataView - ? emitTypedArrayChunk(request, id, "V", value, !1) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - emitModelChunk(request, task.id, value)); + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array + ? emitTypedArrayChunk(request, id, "M", value, !1) + : value instanceof BigUint64Array + ? emitTypedArrayChunk(request, id, "m", value, !1) + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.status = 4; @@ -2520,9 +2540,9 @@ function abort(request, reason) { onAllReady(); flushCompletedChunks(request); } - } catch (error$35) { - logRecoverableError(request, error$35, null), - fatalError(request, error$35); + } catch (error$36) { + logRecoverableError(request, error$36, null), + fatalError(request, error$36); } } function resolveServerReference(bundlerConfig, id) { @@ -2759,91 +2779,119 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is 1000." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is 1000." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } +} +function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -3004,6 +3052,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -3012,6 +3061,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -3040,11 +3091,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -3066,6 +3115,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -3092,6 +3170,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3100,6 +3179,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3128,26 +3208,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -3168,20 +3236,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3303,12 +3383,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$40 = new ReactPromise("pending", null, null); - chunk$40.then(enqueue, flightController.error); - previousBlockedChunk = chunk$40; + var chunk$39 = new ReactPromise("pending", null, null); + chunk$39.then(enqueue, flightController.error); + previousBlockedChunk = chunk$39; chunk.then(function () { - previousBlockedChunk === chunk$40 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$40, json, -1); + previousBlockedChunk === chunk$39 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$39, json, -1); }); } }, @@ -3461,6 +3541,18 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error( @@ -3698,6 +3790,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -3896,6 +3991,15 @@ exports.registerClientReference = function ( !1 ); }; +exports.registerServerObjectReference = function (reference, id, exportName) { + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); +}; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.development.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.development.js index 6e072f7128d8..0f0c52e79b12 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.development.js @@ -2415,6 +2415,7 @@ var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); var originalValue = parent[parentPropertyName]; @@ -2605,35 +2606,44 @@ return value.id; } function serializeServerReference(request, serverReference) { - var writtenServerReferences = request.writtenServerReferences, + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); - if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, - error = serverReference.$$location; - error && - ((error = parseStackTrace(error, 1)), - 0 < error.length && - ((location = error[0]), - (location = [location[0], location[1], location[2], location[3]]))); - existingId = - null !== location - ? { - id: id, - bound: existingId, - name: - "function" === typeof serverReference - ? serverReference.name - : "", - env: (0, request.environmentName)(), - location: location - } - : { id: id, bound: existingId }; + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, + error = serverReference.$$location; + error && + ((error = parseStackTrace(error, 1)), + 0 < error.length && + ((location = error[0]), + (location = [location[0], location[1], location[2], location[3]]))); + existingId = + null !== location + ? { + id: existingId, + bound: boundArgs, + name: + "function" === typeof serverReference + ? serverReference.name + : "", + env: (0, request.environmentName)(), + location: location + } + : { id: existingId, bound: boundArgs }; + } request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); - return "$h" + request.toString(16); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); } function serializeLargeTextString(request, text) { request.pendingChunks++; @@ -2952,6 +2962,8 @@ parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -3409,6 +3421,10 @@ id = encodeReferenceChunk(request, id, "$S" + name); request.completedImportChunks.push(id); } + function emitModelChunk(request, id, json) { + id = id.toString(16) + ":" + json + "\n"; + request.completedRegularChunks.push(id); + } function emitDebugHaltChunk(request, id) { id = id.toString(16) + ":\n"; request.completedDebugChunks.push(id); @@ -4215,58 +4231,64 @@ ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array ? emitTypedArrayChunk( request, id, - "m", + "M", value, !1 ) - : value instanceof DataView + : value instanceof BigUint64Array ? emitTypedArrayChunk( request, id, - "V", + "m", value, !1 ) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - (task = - task.id.toString(16) + - ":" + - value + - "\n"), - request.completedRegularChunks.push(task)); + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); @@ -4307,9 +4329,8 @@ ), emitChunk(request, task, resolvedModel); else { - var json = stringify(resolvedModel), - processedChunk = task.id.toString(16) + ":" + json + "\n"; - request.completedRegularChunks.push(processedChunk); + var json = stringify(resolvedModel); + emitModelChunk(request, task.id, json); } task.status = COMPLETED; request.abortableTasks.delete(task); @@ -4965,94 +4986,123 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } + } + function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -5213,6 +5263,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -5221,6 +5272,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -5249,17 +5302,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -5282,6 +5327,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -5308,6 +5382,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -5316,6 +5391,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -5347,32 +5424,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -5393,20 +5452,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5689,6 +5760,18 @@ loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if ( void 0 === reference || @@ -5952,6 +6035,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -7128,6 +7214,23 @@ !1 ); }; + exports.registerServerObjectReference = function ( + reference, + id, + exportName + ) { + "function" === typeof reference && + console.error( + "registerServerObjectReference: The reference is a function. Use registerServerReference to register a function as a Server Reference." + ); + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); + }; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.production.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.production.js index caa84f58bbe6..714bec64f19a 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/cjs/react-server-dom-turbopack-server.node.production.js @@ -1450,6 +1450,7 @@ function resolveModel(request, task, parent, parentPropertyName, value) { var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); serializedSize += parentPropertyName.length; @@ -1663,6 +1664,27 @@ function outlineModelWithFormatContext(request, value, formatContext) { retryTask(request, value); return value.id; } +function serializeServerReference(request, serverReference) { + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, + existingId = writtenServerReferences.get(serverReference); + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + existingId = { id: existingId, bound: boundArgs }; + } + request = outlineModelWithFormatContext(request, existingId, 0); + writtenServerReferences.set(serverReference, request); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); +} function serializeTypedArray(request, tag, typedArray) { request.pendingChunks++; var bufferId = request.nextChunkId++; @@ -1796,6 +1818,8 @@ function renderModelDestructive( parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -1978,22 +2002,7 @@ function renderModelDestructive( value ); if (value.$$typeof === SERVER_REFERENCE_TAG) - return ( - (parentPropertyName = request.writtenServerReferences), - (parent = parentPropertyName.get(value)), - void 0 !== parent - ? (value = "$h" + parent.toString(16)) - : ((parent = value.$$bound), - (parent = null === parent ? null : Promise.resolve(parent)), - (request = outlineModelWithFormatContext( - request, - { id: value.$$id, bound: parent }, - 0 - )), - parentPropertyName.set(value, request), - (value = "$h" + request.toString(16))), - value - ); + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((request = request.temporaryReferences.get(value)), void 0 !== request) @@ -2147,6 +2156,10 @@ function transformImportMetadata(request, value, depth) { return NOT_PLAIN_IMPORT_METADATA; } } +function emitModelChunk(request, id, json) { + id = id.toString(16) + ":" + json + "\n"; + request.completedRegularChunks.push(id); +} function emitTypedArrayChunk(request, id, tag, typedArray, debug) { if (TaintRegistryByteLengths.has(typedArray.byteLength)) { var tainted = TaintRegistryValues.get( @@ -2191,43 +2204,52 @@ function emitChunk(request, task, value) { ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array - ? emitTypedArrayChunk(request, id, "m", value, !1) - : value instanceof DataView - ? emitTypedArrayChunk(request, id, "V", value, !1) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - (task = - task.id.toString(16) + ":" + value + "\n"), - request.completedRegularChunks.push(task)); + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array + ? emitTypedArrayChunk(request, id, "M", value, !1) + : value instanceof BigUint64Array + ? emitTypedArrayChunk(request, id, "m", value, !1) + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.status = 4; @@ -2257,9 +2279,8 @@ function retryTask(request, task) { request.writtenObjects.set(resolvedModel, serializeByValueID(task.id)), emitChunk(request, task, resolvedModel); else { - var json = stringify(resolvedModel), - processedChunk = task.id.toString(16) + ":" + json + "\n"; - request.completedRegularChunks.push(processedChunk); + var json = stringify(resolvedModel); + emitModelChunk(request, task.id, json); } task.status = 1; request.abortableTasks.delete(task); @@ -2542,9 +2563,9 @@ function abort(request, reason) { onAllReady(); flushCompletedChunks(request); } - } catch (error$35) { - logRecoverableError(request, error$35, null), - fatalError(request, error$35); + } catch (error$36) { + logRecoverableError(request, error$36, null), + fatalError(request, error$36); } } function resolveServerReference(bundlerConfig, id) { @@ -2781,91 +2802,119 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is 1000." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is 1000." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } +} +function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -3026,6 +3075,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -3034,6 +3084,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -3062,11 +3114,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -3088,6 +3138,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -3114,6 +3193,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3122,6 +3202,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3150,26 +3231,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -3190,20 +3259,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3325,12 +3406,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$40 = new ReactPromise("pending", null, null); - chunk$40.then(enqueue, flightController.error); - previousBlockedChunk = chunk$40; + var chunk$39 = new ReactPromise("pending", null, null); + chunk$39.then(enqueue, flightController.error); + previousBlockedChunk = chunk$39; chunk.then(function () { - previousBlockedChunk === chunk$40 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$40, json, -1); + previousBlockedChunk === chunk$39 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$39, json, -1); }); } }, @@ -3483,6 +3564,18 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error( @@ -3720,6 +3813,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -4101,6 +4197,15 @@ exports.registerClientReference = function ( !1 ); }; +exports.registerServerObjectReference = function (reference, id, exportName) { + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); +}; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/package.json b/packages/next/src/compiled/react-server-dom-turbopack-experimental/package.json index af01a82ae033..731baacb2256 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/package.json +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/package.json @@ -48,7 +48,7 @@ "neo-async": "^2.6.1" }, "peerDependencies": { - "react": "0.0.0-experimental-ff8f88fc-20260915", - "react-dom": "0.0.0-experimental-ff8f88fc-20260915" + "react": "0.0.0-experimental-59aff3e1-20260918", + "react-dom": "0.0.0-experimental-59aff3e1-20260918" } } \ No newline at end of file diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.browser.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.browser.js index ec8d6b013e0b..04867fd800bf 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.browser.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.browser.js @@ -12,6 +12,7 @@ exports.decodeReply = s.decodeReply; exports.decodeAction = s.decodeAction; exports.decodeFormState = s.decodeFormState; exports.registerServerReference = s.registerServerReference; +exports.registerServerObjectReference = s.registerServerObjectReference; exports.registerClientReference = s.registerClientReference; exports.createClientModuleProxy = s.createClientModuleProxy; exports.createTemporaryReferenceSet = s.createTemporaryReferenceSet; diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.edge.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.edge.js index c832080079dd..b25bb99d6382 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.edge.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.edge.js @@ -13,6 +13,7 @@ exports.decodeReplyFromAsyncIterable = s.decodeReplyFromAsyncIterable; exports.decodeAction = s.decodeAction; exports.decodeFormState = s.decodeFormState; exports.registerServerReference = s.registerServerReference; +exports.registerServerObjectReference = s.registerServerObjectReference; exports.registerClientReference = s.registerClientReference; exports.createClientModuleProxy = s.createClientModuleProxy; exports.createTemporaryReferenceSet = s.createTemporaryReferenceSet; diff --git a/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.node.js b/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.node.js index 950763954048..f5199197cbf6 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.node.js +++ b/packages/next/src/compiled/react-server-dom-turbopack-experimental/server.node.js @@ -15,6 +15,7 @@ exports.decodeReplyFromAsyncIterable = s.decodeReplyFromAsyncIterable; exports.decodeAction = s.decodeAction; exports.decodeFormState = s.decodeFormState; exports.registerServerReference = s.registerServerReference; +exports.registerServerObjectReference = s.registerServerObjectReference; exports.registerClientReference = s.registerClientReference; exports.createClientModuleProxy = s.createClientModuleProxy; exports.createTemporaryReferenceSet = s.createTemporaryReferenceSet; diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js index 4fb1b5a56292..7ef8e0fdbe5f 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.development.js @@ -2782,6 +2782,8 @@ key, loadServerReference ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -5313,10 +5315,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-ff8f88fc-20260915", + version: "19.3.0-canary-59aff3e1-20260918", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-ff8f88fc-20260915", + reconcilerVersion: "19.3.0-canary-59aff3e1-20260918", getCurrentComponentInfo: function () { return currentOwnerInDEV; } diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js index ba0e21380d4c..e5215b72b9cb 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.browser.production.js @@ -1333,6 +1333,8 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js index e9f24285759d..83aca9679235 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.development.js @@ -2941,6 +2941,8 @@ key, loadServerReference ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js index 7c01ccce96ec..c247370d0b08 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.edge.production.js @@ -1527,6 +1527,8 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js index bda6611ce68c..b8c0236701ca 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.development.js @@ -2944,6 +2944,8 @@ key, loadServerReference ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js index 559c91cad1e0..cb8e90e49dd9 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-client.node.production.js @@ -1528,6 +1528,8 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js index 259251cd0366..e3bbca5778eb 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js @@ -2199,10 +2199,10 @@ var writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, + existingId = serverReference.$$id; + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, error = serverReference.$$location; error && ((error = parseStackTrace(error, 1)), @@ -2212,8 +2212,8 @@ existingId = null !== location ? { - id: id, - bound: existingId, + id: existingId, + bound: boundArgs, name: "function" === typeof serverReference ? serverReference.name @@ -2221,7 +2221,7 @@ env: (0, request.environmentName)(), location: location } - : { id: id, bound: existingId }; + : { id: existingId, bound: boundArgs }; request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); return "$h" + request.toString(16); @@ -4300,94 +4300,93 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -4548,6 +4547,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -4556,6 +4556,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -4584,17 +4586,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -4617,6 +4611,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -4643,6 +4666,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -4651,6 +4675,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -4682,32 +4708,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -4728,20 +4736,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5024,6 +5044,8 @@ loadServerReference$1 ) ); + case "H": + return; case "T": if ( void 0 === reference || @@ -5287,6 +5309,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -6046,6 +6071,23 @@ !1 ); }; + exports.registerServerObjectReference = function ( + reference, + id, + exportName + ) { + "function" === typeof reference && + console.error( + "registerServerObjectReference: The reference is a function. Use registerServerReference to register a function as a Server Reference." + ); + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); + }; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js index 8822ac279309..16fdeaf996b4 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js @@ -1857,14 +1857,12 @@ function renderModelDestructive( (parentPropertyName = task.get(value)), void 0 !== parentPropertyName ? (request = "$h" + parentPropertyName.toString(16)) - : ((parentPropertyName = value.$$bound), - (parentPropertyName = - null === parentPropertyName - ? null - : Promise.resolve(parentPropertyName)), + : ((parentPropertyName = value.$$id), + (parent = value.$$bound), + (parent = null === parent ? null : Promise.resolve(parent)), (request = outlineModelWithFormatContext( request, - { id: value.$$id, bound: parentPropertyName }, + { id: parentPropertyName, bound: parent }, 0 )), task.set(value, request), @@ -2611,85 +2609,85 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject(Error(formatProdErrorMessage(580, promiseValue.length, 1e3))); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error(formatProdErrorMessage(580, boundArgs.length, 1e3)); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -2848,6 +2846,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -2856,6 +2855,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -2884,11 +2885,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -2910,6 +2909,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -2934,6 +2962,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -2942,6 +2971,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -2970,26 +3000,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error(formatProdErrorMessage(574)); @@ -3010,20 +3028,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(575)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(575)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(572)); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(576)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(576)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(573)); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(577)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(577)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(578)); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3139,12 +3169,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$37 = new ReactPromise("pending", null, null); - chunk$37.then(enqueue, flightController.error); - previousBlockedChunk = chunk$37; + var chunk$35 = new ReactPromise("pending", null, null); + chunk$35.then(enqueue, flightController.error); + previousBlockedChunk = chunk$35; chunk.then(function () { - previousBlockedChunk === chunk$37 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$37, json, -1); + previousBlockedChunk === chunk$35 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$35, json, -1); }); } }, @@ -3293,6 +3323,8 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return; case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error(formatProdErrorMessage(526)); @@ -3524,6 +3556,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -3675,6 +3710,15 @@ exports.registerClientReference = function ( !1 ); }; +exports.registerServerObjectReference = function (reference, id, exportName) { + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); +}; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js index 3ae2508b3e91..80aca79c1e39 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js @@ -2259,10 +2259,10 @@ var writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, + existingId = serverReference.$$id; + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, error = serverReference.$$location; error && ((error = parseStackTrace(error, 1)), @@ -2272,8 +2272,8 @@ existingId = null !== location ? { - id: id, - bound: existingId, + id: existingId, + bound: boundArgs, name: "function" === typeof serverReference ? serverReference.name @@ -2281,7 +2281,7 @@ env: (0, request.environmentName)(), location: location } - : { id: id, bound: existingId }; + : { id: existingId, bound: boundArgs }; request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); return "$h" + request.toString(16); @@ -4382,94 +4382,93 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -4630,6 +4629,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -4638,6 +4638,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -4666,17 +4668,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -4699,6 +4693,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -4725,6 +4748,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -4733,6 +4757,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -4764,32 +4790,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -4810,20 +4818,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5106,6 +5126,8 @@ loadServerReference$1 ) ); + case "H": + return; case "T": if ( void 0 === reference || @@ -5369,6 +5391,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -6169,6 +6194,23 @@ !1 ); }; + exports.registerServerObjectReference = function ( + reference, + id, + exportName + ) { + "function" === typeof reference && + console.error( + "registerServerObjectReference: The reference is a function. Use registerServerReference to register a function as a Server Reference." + ); + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); + }; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js index 433918788370..1e34bd515907 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js @@ -1888,14 +1888,12 @@ function renderModelDestructive( (parentPropertyName = task.get(value)), void 0 !== parentPropertyName ? (request = "$h" + parentPropertyName.toString(16)) - : ((parentPropertyName = value.$$bound), - (parentPropertyName = - null === parentPropertyName - ? null - : Promise.resolve(parentPropertyName)), + : ((parentPropertyName = value.$$id), + (parent = value.$$bound), + (parent = null === parent ? null : Promise.resolve(parent)), (request = outlineModelWithFormatContext( request, - { id: value.$$id, bound: parentPropertyName }, + { id: parentPropertyName, bound: parent }, 0 )), task.set(value, request), @@ -2661,91 +2659,89 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is 1000." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is 1000." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -2906,6 +2902,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -2914,6 +2911,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -2942,11 +2941,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -2968,6 +2965,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -2994,6 +3020,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3002,6 +3029,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3030,26 +3058,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -3070,20 +3086,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3205,12 +3233,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$37 = new ReactPromise("pending", null, null); - chunk$37.then(enqueue, flightController.error); - previousBlockedChunk = chunk$37; + var chunk$35 = new ReactPromise("pending", null, null); + chunk$35.then(enqueue, flightController.error); + previousBlockedChunk = chunk$35; chunk.then(function () { - previousBlockedChunk === chunk$37 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$37, json, -1); + previousBlockedChunk === chunk$35 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$35, json, -1); }); } }, @@ -3363,6 +3391,8 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return; case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error( @@ -3600,6 +3630,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -3798,6 +3831,15 @@ exports.registerClientReference = function ( !1 ); }; +exports.registerServerObjectReference = function (reference, id, exportName) { + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); +}; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js index e3434040af11..67c9e712cca4 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js @@ -2536,10 +2536,10 @@ var writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, + existingId = serverReference.$$id; + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, error = serverReference.$$location; error && ((error = parseStackTrace(error, 1)), @@ -2549,8 +2549,8 @@ existingId = null !== location ? { - id: id, - bound: existingId, + id: existingId, + bound: boundArgs, name: "function" === typeof serverReference ? serverReference.name @@ -2558,7 +2558,7 @@ env: (0, request.environmentName)(), location: location } - : { id: id, bound: existingId }; + : { id: existingId, bound: boundArgs }; request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); return "$h" + request.toString(16); @@ -4858,94 +4858,93 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -5106,6 +5105,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -5114,6 +5114,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -5142,17 +5144,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -5175,6 +5169,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -5201,6 +5224,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -5209,6 +5233,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -5240,32 +5266,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -5286,20 +5294,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5582,6 +5602,8 @@ loadServerReference$1 ) ); + case "H": + return; case "T": if ( void 0 === reference || @@ -5845,6 +5867,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -7014,6 +7039,23 @@ !1 ); }; + exports.registerServerObjectReference = function ( + reference, + id, + exportName + ) { + "function" === typeof reference && + console.error( + "registerServerObjectReference: The reference is a function. Use registerServerReference to register a function as a Server Reference." + ); + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); + }; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js index e4b25c9faf32..3924cf0853b8 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js @@ -1906,14 +1906,12 @@ function renderModelDestructive( (parentPropertyName = task.get(value)), void 0 !== parentPropertyName ? (request = "$h" + parentPropertyName.toString(16)) - : ((parentPropertyName = value.$$bound), - (parentPropertyName = - null === parentPropertyName - ? null - : Promise.resolve(parentPropertyName)), + : ((parentPropertyName = value.$$id), + (parent = value.$$bound), + (parent = null === parent ? null : Promise.resolve(parent)), (request = outlineModelWithFormatContext( request, - { id: value.$$id, bound: parentPropertyName }, + { id: parentPropertyName, bound: parent }, 0 )), task.set(value, request), @@ -2683,91 +2681,89 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is 1000." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is 1000." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -2928,6 +2924,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -2936,6 +2933,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -2964,11 +2963,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -2990,6 +2987,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -3016,6 +3042,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3024,6 +3051,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3052,26 +3080,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -3092,20 +3108,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3227,12 +3255,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$37 = new ReactPromise("pending", null, null); - chunk$37.then(enqueue, flightController.error); - previousBlockedChunk = chunk$37; + var chunk$35 = new ReactPromise("pending", null, null); + chunk$35.then(enqueue, flightController.error); + previousBlockedChunk = chunk$35; chunk.then(function () { - previousBlockedChunk === chunk$37 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$37, json, -1); + previousBlockedChunk === chunk$35 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$35, json, -1); }); } }, @@ -3385,6 +3413,8 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return; case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error( @@ -3622,6 +3652,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; @@ -4003,6 +4036,15 @@ exports.registerClientReference = function ( !1 ); }; +exports.registerServerObjectReference = function (reference, id, exportName) { + return Object.defineProperties(reference, { + $$typeof: { value: SERVER_REFERENCE_TAG }, + $$id: { + value: null === exportName ? id : id + "#" + exportName, + configurable: !0 + } + }); +}; exports.registerServerReference = function (reference, id, exportName) { return Object.defineProperties(reference, { $$typeof: { value: SERVER_REFERENCE_TAG }, diff --git a/packages/next/src/compiled/react-server-dom-turbopack/package.json b/packages/next/src/compiled/react-server-dom-turbopack/package.json index 5afca4da23f0..551a65059eee 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/package.json +++ b/packages/next/src/compiled/react-server-dom-turbopack/package.json @@ -48,7 +48,7 @@ "neo-async": "^2.6.1" }, "peerDependencies": { - "react": "19.3.0-canary-ff8f88fc-20260915", - "react-dom": "19.3.0-canary-ff8f88fc-20260915" + "react": "19.3.0-canary-59aff3e1-20260918", + "react-dom": "19.3.0-canary-59aff3e1-20260918" } } \ No newline at end of file diff --git a/packages/next/src/compiled/react-server-dom-turbopack/server.browser.js b/packages/next/src/compiled/react-server-dom-turbopack/server.browser.js index ec8d6b013e0b..04867fd800bf 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/server.browser.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/server.browser.js @@ -12,6 +12,7 @@ exports.decodeReply = s.decodeReply; exports.decodeAction = s.decodeAction; exports.decodeFormState = s.decodeFormState; exports.registerServerReference = s.registerServerReference; +exports.registerServerObjectReference = s.registerServerObjectReference; exports.registerClientReference = s.registerClientReference; exports.createClientModuleProxy = s.createClientModuleProxy; exports.createTemporaryReferenceSet = s.createTemporaryReferenceSet; diff --git a/packages/next/src/compiled/react-server-dom-turbopack/server.edge.js b/packages/next/src/compiled/react-server-dom-turbopack/server.edge.js index c832080079dd..b25bb99d6382 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/server.edge.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/server.edge.js @@ -13,6 +13,7 @@ exports.decodeReplyFromAsyncIterable = s.decodeReplyFromAsyncIterable; exports.decodeAction = s.decodeAction; exports.decodeFormState = s.decodeFormState; exports.registerServerReference = s.registerServerReference; +exports.registerServerObjectReference = s.registerServerObjectReference; exports.registerClientReference = s.registerClientReference; exports.createClientModuleProxy = s.createClientModuleProxy; exports.createTemporaryReferenceSet = s.createTemporaryReferenceSet; diff --git a/packages/next/src/compiled/react-server-dom-turbopack/server.node.js b/packages/next/src/compiled/react-server-dom-turbopack/server.node.js index 950763954048..f5199197cbf6 100644 --- a/packages/next/src/compiled/react-server-dom-turbopack/server.node.js +++ b/packages/next/src/compiled/react-server-dom-turbopack/server.node.js @@ -15,6 +15,7 @@ exports.decodeReplyFromAsyncIterable = s.decodeReplyFromAsyncIterable; exports.decodeAction = s.decodeAction; exports.decodeFormState = s.decodeFormState; exports.registerServerReference = s.registerServerReference; +exports.registerServerObjectReference = s.registerServerObjectReference; exports.registerClientReference = s.registerClientReference; exports.createClientModuleProxy = s.createClientModuleProxy; exports.createTemporaryReferenceSet = s.createTemporaryReferenceSet; diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.development.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.development.js index 4e8f764325eb..76087f06c764 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.development.js @@ -486,16 +486,28 @@ )); if (null === value) return null; if ("object" === typeof value) { + originalValue = knownServerObjectReferences.get(value); + if (void 0 !== originalValue) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: originalValue }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( @@ -508,9 +520,9 @@ null === formData && (formData = new FormData()); pendingParts++; try { - parentReference = init(originalValue); + refId = init(originalValue); var lazyId = nextPartId++, - partJSON = serializeModel(parentReference, lazyId); + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -521,7 +533,7 @@ ) { pendingParts++; var _lazyId = nextPartId++; - parentReference = function () { + refId = function () { try { var _partJSON2 = serializeModel(value, _lazyId), _data = formData; @@ -532,7 +544,7 @@ reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + _lazyId.toString(16); } reject(x); @@ -541,11 +553,11 @@ pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -568,17 +580,17 @@ }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((parentReference = parentReference + ":" + key), - writtenObjects.set(value, parentReference), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((refId = refId + ":" + key), + writtenObjects.set(value, refId), void 0 !== temporaryReferences && - temporaryReferences.set(parentReference, value))); + temporaryReferences.set(refId, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); @@ -593,26 +605,26 @@ if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); @@ -644,33 +656,29 @@ formData.append(formFieldPrefix + key, value), "$B" + key.toString(16) ); - if ((parentReference = getIteratorFn(value))) + if ((refId = getIteratorFn(value))) return ( - (parentReference = parentReference.call(value)), - parentReference === value + (refId = refId.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && value instanceof ReadableStream ) return serializeReadableStream(value); - parentReference = value[ASYNC_ITERATOR]; - if ("function" === typeof parentReference) - return serializeAsyncIterable(value, parentReference.call(value)); - parentReference = getPrototypeOf(value); + refId = value[ASYNC_ITERATOR]; + if ("function" === typeof refId) + return serializeAsyncIterable(value, refId.call(value)); + refId = getPrototypeOf(value); if ( - parentReference !== ObjectPrototype$1 && - (null === parentReference || - null !== getPrototypeOf(parentReference)) + refId !== ObjectPrototype$1 && + (null === refId || null !== getPrototypeOf(refId)) ) { if (void 0 === temporaryReferences) throw Error( @@ -692,11 +700,11 @@ ) : isSimpleObject(value) ? Object.getOwnPropertySymbols && - ((parentReference = Object.getOwnPropertySymbols(value)), - 0 < parentReference.length && + ((refId = Object.getOwnPropertySymbols(value)), + 0 < refId.length && console.error( "Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s", - parentReference[0].description, + refId[0].description, describeObjectForErrorMessage(this, key) )) : console.error( @@ -715,30 +723,27 @@ if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -747,12 +752,9 @@ if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." + describeObjectForErrorMessage(this, key) @@ -2470,6 +2472,14 @@ ); return null; } + function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); + } function resolveLazy(value) { for ( ; @@ -2806,6 +2816,17 @@ key, loadServerReference ); + case "H": + return ( + (ref = value.slice(2)), + getOutlinedModel( + response, + ref, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -5153,7 +5174,44 @@ CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"), ObjectPrototype$1 = Object.prototype, knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(), fakeServerFunctionIdx = 0, + serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, v8FrameRegExp = /^ {3} at (?:(.+) \((.+):(\d+):(\d+)\)|(?:async )?(.+):(\d+):(\d+))$/, jscSpiderMonkeyFrameRegExp = /(?:(.*)@)?(.*):(\d+):(\d+)/, @@ -5344,10 +5402,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-ff8f88fc-20260915", + version: "19.3.0-experimental-59aff3e1-20260918", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-ff8f88fc-20260915", + reconcilerVersion: "19.3.0-experimental-59aff3e1-20260918", getCurrentComponentInfo: function () { return currentOwnerInDEV; } diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.production.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.production.js index 63d025119656..e90d31682d60 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.browser.production.js @@ -136,7 +136,8 @@ var ASYNC_ITERATOR = Symbol.asyncIterator, isArrayImpl = Array.isArray, getPrototypeOf = Object.getPrototypeOf, ObjectPrototype$1 = Object.prototype, - knownServerReferences = new WeakMap(); + knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(); function serializeNumber(number) { return Number.isFinite(number) ? 0 === number && -Infinity === 1 / number @@ -283,28 +284,40 @@ function processReply( function resolveToJSON(key, value) { if (null === value) return null; if ("object" === typeof value) { + var objectReferenceId = knownServerObjectReferences.get(value); + if (void 0 !== objectReferenceId) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: objectReferenceId }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error(formatProdErrorMessage(510, "")); case REACT_LAZY_TYPE: - parentReference = value._payload; + objectReferenceId = value._payload; var init = value._init; null === formData && (formData = new FormData()); pendingParts++; try { - var resolvedModel = init(parentReference), - lazyId = nextPartId++, - partJSON = serializeModel(resolvedModel, lazyId); + refId = init(objectReferenceId); + var lazyId = nextPartId++, + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -315,7 +328,7 @@ function processReply( ) { pendingParts++; var lazyId$23 = nextPartId++; - parentReference = function () { + refId = function () { try { var partJSON$24 = serializeModel(value, lazyId$23), data$25 = formData; @@ -326,7 +339,7 @@ function processReply( reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + lazyId$23.toString(16); } reject(x); @@ -335,11 +348,11 @@ function processReply( pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -348,12 +361,12 @@ function processReply( value.then(function (partValue) { try { var previousReference = writtenObjects.get(partValue); - var partJSON$27 = + var partJSON$28 = void 0 !== previousReference ? JSON.stringify(previousReference) : serializeModel(partValue, promiseId); partValue = formData; - partValue.append(formFieldPrefix + promiseId, partJSON$27); + partValue.append(formFieldPrefix + promiseId, partJSON$28); pendingParts--; 0 === pendingParts && resolve(partValue); } catch (reason) { @@ -362,51 +375,51 @@ function processReply( }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((key = parentReference + ":" + key), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((key = refId + ":" + key), writtenObjects.set(value, key), void 0 !== temporaryReferences && temporaryReferences.set(key, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); - var data$31 = formData; + var data$32 = formData; key = nextPartId++; var prefix = formFieldPrefix + "_" + key + "_"; value.forEach(function (originalValue, originalKey) { - data$31.append(prefix + originalKey, originalValue); + data$32.append(prefix + originalKey, originalValue); }); return "$K" + key.toString(16); } if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); if (value instanceof Uint8Array) return serializeTypedArray("o", value); @@ -432,17 +445,14 @@ function processReply( ); if ((key = getIteratorFn(value))) return ( - (parentReference = key.call(value)), - parentReference === value + (refId = key.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && @@ -473,42 +483,36 @@ function processReply( if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error(formatProdErrorMessage(469)); } if ("symbol" === typeof value) { if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error(formatProdErrorMessage(517, "")); } if ("bigint" === typeof value) return "$n" + value.toString(10); @@ -551,6 +555,36 @@ function registerBoundServerReference(reference, id, bound) { bound: bound }); } +var serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error(formatProdErrorMessage(609, String(name))); + }, + set: function () { + throw Error(formatProdErrorMessage(610)); + } +}; function createBoundServerReference(metaData, callServer) { function action() { var args = Array.prototype.slice.call(arguments); @@ -979,19 +1013,19 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$45 = value._payload; - if (referencedChunk$45 === handler.chunk) value = handler.value; + var referencedChunk$47 = value._payload; + if (referencedChunk$47 === handler.chunk) value = handler.value; else { - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "resolved_model": - initializeModelChunk(referencedChunk$45); + initializeModelChunk(referencedChunk$47); break; case "resolved_module": - initializeModuleChunk(referencedChunk$45); + initializeModuleChunk(referencedChunk$47); } - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "fulfilled": - value = referencedChunk$45.value; + value = referencedChunk$47.value; continue; } break; @@ -1131,6 +1165,14 @@ function loadServerReference(response, metaData, parentObject, key) { ); return null; } +function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); +} var EMPTY_REFERENCE_PATH = []; function getOutlinedModel(response, reference, parentObject, key, map) { var id = parseInt(reference, 16); @@ -1358,6 +1400,17 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return ( + (value = value.slice(2)), + getOutlinedModel( + response, + value, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -1530,8 +1583,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$59 = new ReactPromise("pending", null, null); - chunk$59.then( + var chunk$62 = new ReactPromise("pending", null, null); + chunk$62.then( function (v) { return controller.enqueue(v); }, @@ -1539,10 +1592,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$59; + previousBlockedChunk = chunk$62; chunk.then(function () { - previousBlockedChunk === chunk$59 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$59, json); + previousBlockedChunk === chunk$62 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$62, json); }); } }, @@ -1698,8 +1751,8 @@ function mergeBuffer(buffer, lastChunk) { for (var l = buffer.length, byteLength = lastChunk.length, i = 0; i < l; i++) byteLength += buffer[i].byteLength; byteLength = new Uint8Array(byteLength); - for (var i$60 = (i = 0); i$60 < l; i$60++) { - var chunk = buffer[i$60]; + for (var i$63 = (i = 0); i$63 < l; i$63++) { + var chunk = buffer[i$63]; byteLength.set(chunk, i); i += chunk.byteLength; } diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.edge.development.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.edge.development.js index ac99e8eff0a3..0bdeaf71fba1 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.edge.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.edge.development.js @@ -512,16 +512,28 @@ )); if (null === value) return null; if ("object" === typeof value) { + originalValue = knownServerObjectReferences.get(value); + if (void 0 !== originalValue) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: originalValue }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( @@ -534,9 +546,9 @@ null === formData && (formData = new FormData()); pendingParts++; try { - parentReference = init(originalValue); + refId = init(originalValue); var lazyId = nextPartId++, - partJSON = serializeModel(parentReference, lazyId); + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -547,7 +559,7 @@ ) { pendingParts++; var _lazyId = nextPartId++; - parentReference = function () { + refId = function () { try { var _partJSON2 = serializeModel(value, _lazyId), _data = formData; @@ -558,7 +570,7 @@ reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + _lazyId.toString(16); } reject(x); @@ -567,11 +579,11 @@ pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -594,17 +606,17 @@ }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((parentReference = parentReference + ":" + key), - writtenObjects.set(value, parentReference), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((refId = refId + ":" + key), + writtenObjects.set(value, refId), void 0 !== temporaryReferences && - temporaryReferences.set(parentReference, value))); + temporaryReferences.set(refId, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); @@ -619,26 +631,26 @@ if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); @@ -670,33 +682,29 @@ formData.append(formFieldPrefix + key, value), "$B" + key.toString(16) ); - if ((parentReference = getIteratorFn(value))) + if ((refId = getIteratorFn(value))) return ( - (parentReference = parentReference.call(value)), - parentReference === value + (refId = refId.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && value instanceof ReadableStream ) return serializeReadableStream(value); - parentReference = value[ASYNC_ITERATOR]; - if ("function" === typeof parentReference) - return serializeAsyncIterable(value, parentReference.call(value)); - parentReference = getPrototypeOf(value); + refId = value[ASYNC_ITERATOR]; + if ("function" === typeof refId) + return serializeAsyncIterable(value, refId.call(value)); + refId = getPrototypeOf(value); if ( - parentReference !== ObjectPrototype$1 && - (null === parentReference || - null !== getPrototypeOf(parentReference)) + refId !== ObjectPrototype$1 && + (null === refId || null !== getPrototypeOf(refId)) ) { if (void 0 === temporaryReferences) throw Error( @@ -718,11 +726,11 @@ ) : isSimpleObject(value) ? Object.getOwnPropertySymbols && - ((parentReference = Object.getOwnPropertySymbols(value)), - 0 < parentReference.length && + ((refId = Object.getOwnPropertySymbols(value)), + 0 < refId.length && console.error( "Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s", - parentReference[0].description, + refId[0].description, describeObjectForErrorMessage(this, key) )) : console.error( @@ -741,30 +749,27 @@ if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -773,12 +778,9 @@ if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." + describeObjectForErrorMessage(this, key) @@ -2628,6 +2630,14 @@ ); return null; } + function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); + } function resolveLazy(value) { for ( ; @@ -2964,6 +2974,17 @@ key, loadServerReference ); + case "H": + return ( + (ref = value.slice(2)), + getOutlinedModel( + response, + ref, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -5187,8 +5208,45 @@ CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"), ObjectPrototype$1 = Object.prototype, knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(), boundCache = new WeakMap(), fakeServerFunctionIdx = 0, + serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice, v8FrameRegExp = diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.edge.production.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.edge.production.js index 695acf826c3a..cc2fdce447de 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.edge.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.edge.production.js @@ -148,7 +148,8 @@ var ASYNC_ITERATOR = Symbol.asyncIterator, isArrayImpl = Array.isArray, getPrototypeOf = Object.getPrototypeOf, ObjectPrototype$1 = Object.prototype, - knownServerReferences = new WeakMap(); + knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(); function serializeNumber(number) { return Number.isFinite(number) ? 0 === number && -Infinity === 1 / number @@ -295,30 +296,42 @@ function processReply( function resolveToJSON(key, value) { if (null === value) return null; if ("object" === typeof value) { + var objectReferenceId = knownServerObjectReferences.get(value); + if (void 0 !== objectReferenceId) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: objectReferenceId }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( "React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options." ); case REACT_LAZY_TYPE: - parentReference = value._payload; + objectReferenceId = value._payload; var init = value._init; null === formData && (formData = new FormData()); pendingParts++; try { - var resolvedModel = init(parentReference), - lazyId = nextPartId++, - partJSON = serializeModel(resolvedModel, lazyId); + refId = init(objectReferenceId); + var lazyId = nextPartId++, + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -329,7 +342,7 @@ function processReply( ) { pendingParts++; var lazyId$23 = nextPartId++; - parentReference = function () { + refId = function () { try { var partJSON$24 = serializeModel(value, lazyId$23), data$25 = formData; @@ -340,7 +353,7 @@ function processReply( reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + lazyId$23.toString(16); } reject(x); @@ -349,11 +362,11 @@ function processReply( pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -362,12 +375,12 @@ function processReply( value.then(function (partValue) { try { var previousReference = writtenObjects.get(partValue); - var partJSON$27 = + var partJSON$28 = void 0 !== previousReference ? JSON.stringify(previousReference) : serializeModel(partValue, promiseId); partValue = formData; - partValue.append(formFieldPrefix + promiseId, partJSON$27); + partValue.append(formFieldPrefix + promiseId, partJSON$28); pendingParts--; 0 === pendingParts && resolve(partValue); } catch (reason) { @@ -376,51 +389,51 @@ function processReply( }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((key = parentReference + ":" + key), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((key = refId + ":" + key), writtenObjects.set(value, key), void 0 !== temporaryReferences && temporaryReferences.set(key, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); - var data$31 = formData; + var data$32 = formData; key = nextPartId++; var prefix = formFieldPrefix + "_" + key + "_"; value.forEach(function (originalValue, originalKey) { - data$31.append(prefix + originalKey, originalValue); + data$32.append(prefix + originalKey, originalValue); }); return "$K" + key.toString(16); } if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); if (value instanceof Uint8Array) return serializeTypedArray("o", value); @@ -446,17 +459,14 @@ function processReply( ); if ((key = getIteratorFn(value))) return ( - (parentReference = key.call(value)), - parentReference === value + (refId = key.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && @@ -489,30 +499,27 @@ function processReply( if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -521,12 +528,9 @@ function processReply( if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." ); @@ -690,7 +694,43 @@ function registerBoundServerReference(reference, id, bound, encodeFormAction) { bind: { value: bind } })); } -var FunctionBind = Function.prototype.bind, +var serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, + FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice; function bind() { var referenceClosure = knownServerReferences.get(this); @@ -1152,19 +1192,19 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$45 = value._payload; - if (referencedChunk$45 === handler.chunk) value = handler.value; + var referencedChunk$47 = value._payload; + if (referencedChunk$47 === handler.chunk) value = handler.value; else { - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "resolved_model": - initializeModelChunk(referencedChunk$45); + initializeModelChunk(referencedChunk$47); break; case "resolved_module": - initializeModuleChunk(referencedChunk$45); + initializeModuleChunk(referencedChunk$47); } - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "fulfilled": - value = referencedChunk$45.value; + value = referencedChunk$47.value; continue; } break; @@ -1318,6 +1358,14 @@ function loadServerReference(response, metaData, parentObject, key) { ); return null; } +function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); +} var EMPTY_REFERENCE_PATH = []; function getOutlinedModel(response, reference, parentObject, key, map) { var id = parseInt(reference, 16); @@ -1545,6 +1593,17 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return ( + (value = value.slice(2)), + getOutlinedModel( + response, + value, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -1730,8 +1789,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$59 = new ReactPromise("pending", null, null); - chunk$59.then( + var chunk$62 = new ReactPromise("pending", null, null); + chunk$62.then( function (v) { return controller.enqueue(v); }, @@ -1739,10 +1798,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$59; + previousBlockedChunk = chunk$62; chunk.then(function () { - previousBlockedChunk === chunk$59 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$59, json); + previousBlockedChunk === chunk$62 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$62, json); }); } }, @@ -1903,8 +1962,8 @@ function mergeBuffer(buffer, lastChunk) { for (var l = buffer.length, byteLength = lastChunk.length, i = 0; i < l; i++) byteLength += buffer[i].byteLength; byteLength = new Uint8Array(byteLength); - for (var i$60 = (i = 0); i$60 < l; i$60++) { - var chunk = buffer[i$60]; + for (var i$63 = (i = 0); i$63 < l; i$63++) { + var chunk = buffer[i$63]; byteLength.set(chunk, i); i += chunk.byteLength; } diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.node.development.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.node.development.js index 5b790561097e..e4cd1e3c8c75 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.node.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.node.development.js @@ -512,16 +512,28 @@ )); if (null === value) return null; if ("object" === typeof value) { + originalValue = knownServerObjectReferences.get(value); + if (void 0 !== originalValue) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: originalValue }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( @@ -534,9 +546,9 @@ null === formData && (formData = new FormData()); pendingParts++; try { - parentReference = init(originalValue); + refId = init(originalValue); var lazyId = nextPartId++, - partJSON = serializeModel(parentReference, lazyId); + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -547,7 +559,7 @@ ) { pendingParts++; var _lazyId = nextPartId++; - parentReference = function () { + refId = function () { try { var _partJSON2 = serializeModel(value, _lazyId), _data = formData; @@ -558,7 +570,7 @@ reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + _lazyId.toString(16); } reject(x); @@ -567,11 +579,11 @@ pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -594,17 +606,17 @@ }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((parentReference = parentReference + ":" + key), - writtenObjects.set(value, parentReference), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((refId = refId + ":" + key), + writtenObjects.set(value, refId), void 0 !== temporaryReferences && - temporaryReferences.set(parentReference, value))); + temporaryReferences.set(refId, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); @@ -619,26 +631,26 @@ if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); @@ -670,33 +682,29 @@ formData.append(formFieldPrefix + key, value), "$B" + key.toString(16) ); - if ((parentReference = getIteratorFn(value))) + if ((refId = getIteratorFn(value))) return ( - (parentReference = parentReference.call(value)), - parentReference === value + (refId = refId.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && value instanceof ReadableStream ) return serializeReadableStream(value); - parentReference = value[ASYNC_ITERATOR]; - if ("function" === typeof parentReference) - return serializeAsyncIterable(value, parentReference.call(value)); - parentReference = getPrototypeOf(value); + refId = value[ASYNC_ITERATOR]; + if ("function" === typeof refId) + return serializeAsyncIterable(value, refId.call(value)); + refId = getPrototypeOf(value); if ( - parentReference !== ObjectPrototype$1 && - (null === parentReference || - null !== getPrototypeOf(parentReference)) + refId !== ObjectPrototype$1 && + (null === refId || null !== getPrototypeOf(refId)) ) { if (void 0 === temporaryReferences) throw Error( @@ -718,11 +726,11 @@ ) : isSimpleObject(value) ? Object.getOwnPropertySymbols && - ((parentReference = Object.getOwnPropertySymbols(value)), - 0 < parentReference.length && + ((refId = Object.getOwnPropertySymbols(value)), + 0 < refId.length && console.error( "Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s", - parentReference[0].description, + refId[0].description, describeObjectForErrorMessage(this, key) )) : console.error( @@ -741,30 +749,27 @@ if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -773,12 +778,9 @@ if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." + describeObjectForErrorMessage(this, key) @@ -2631,6 +2633,14 @@ ); return null; } + function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); + } function resolveLazy(value) { for ( ; @@ -2967,6 +2977,17 @@ key, loadServerReference ); + case "H": + return ( + (ref = value.slice(2)), + getOutlinedModel( + response, + ref, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -5307,8 +5328,45 @@ CLIENT_REFERENCE_TAG = Symbol.for("react.client.reference"), ObjectPrototype$1 = Object.prototype, knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(), boundCache = new WeakMap(), fakeServerFunctionIdx = 0, + serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice, v8FrameRegExp = diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.node.production.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.node.production.js index 6b2aa36b76c0..ab4bb690bce6 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.node.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-client.node.production.js @@ -149,7 +149,8 @@ var ASYNC_ITERATOR = Symbol.asyncIterator, isArrayImpl = Array.isArray, getPrototypeOf = Object.getPrototypeOf, ObjectPrototype$1 = Object.prototype, - knownServerReferences = new WeakMap(); + knownServerReferences = new WeakMap(), + knownServerObjectReferences = new WeakMap(); function serializeNumber(number) { return Number.isFinite(number) ? 0 === number && -Infinity === 1 / number @@ -296,30 +297,42 @@ function processReply( function resolveToJSON(key, value) { if (null === value) return null; if ("object" === typeof value) { + var objectReferenceId = knownServerObjectReferences.get(value); + if (void 0 !== objectReferenceId) { + key = writtenObjects.get(value); + if (void 0 !== key) + if (modelRoot === value) modelRoot = null; + else return key; + key = JSON.stringify({ id: objectReferenceId }, resolveToJSON); + null === formData && (formData = new FormData()); + var refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$H" + refId.toString(16); + writtenObjects.set(value, key); + return key; + } switch (value.$$typeof) { case REACT_ELEMENT_TYPE: - if (void 0 !== temporaryReferences && -1 === key.indexOf(":")) { - var parentReference = writtenObjects.get(this); - if (void 0 !== parentReference) - return ( - temporaryReferences.set(parentReference + ":" + key, value), - "$T" - ); - } + if ( + void 0 !== temporaryReferences && + -1 === key.indexOf(":") && + ((refId = writtenObjects.get(this)), void 0 !== refId) + ) + return temporaryReferences.set(refId + ":" + key, value), "$T"; if (void 0 !== temporaryReferences && modelRoot === value) return (modelRoot = null), "$T"; throw Error( "React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options." ); case REACT_LAZY_TYPE: - parentReference = value._payload; + objectReferenceId = value._payload; var init = value._init; null === formData && (formData = new FormData()); pendingParts++; try { - var resolvedModel = init(parentReference), - lazyId = nextPartId++, - partJSON = serializeModel(resolvedModel, lazyId); + refId = init(objectReferenceId); + var lazyId = nextPartId++, + partJSON = serializeModel(refId, lazyId); formData.append(formFieldPrefix + lazyId, partJSON); return "$" + lazyId.toString(16); } catch (x) { @@ -330,7 +343,7 @@ function processReply( ) { pendingParts++; var lazyId$23 = nextPartId++; - parentReference = function () { + refId = function () { try { var partJSON$24 = serializeModel(value, lazyId$23), data$25 = formData; @@ -341,7 +354,7 @@ function processReply( reject(reason); } }; - x.then(parentReference, parentReference); + x.then(refId, refId); return "$" + lazyId$23.toString(16); } reject(x); @@ -350,11 +363,11 @@ function processReply( pendingParts--; } } - parentReference = writtenObjects.get(value); + refId = writtenObjects.get(value); if ("function" === typeof value.then) { - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; null === formData && (formData = new FormData()); pendingParts++; var promiseId = nextPartId++; @@ -363,12 +376,12 @@ function processReply( value.then(function (partValue) { try { var previousReference = writtenObjects.get(partValue); - var partJSON$27 = + var partJSON$28 = void 0 !== previousReference ? JSON.stringify(previousReference) : serializeModel(partValue, promiseId); partValue = formData; - partValue.append(formFieldPrefix + promiseId, partJSON$27); + partValue.append(formFieldPrefix + promiseId, partJSON$28); pendingParts--; 0 === pendingParts && resolve(partValue); } catch (reason) { @@ -377,51 +390,51 @@ function processReply( }, reject); return key; } - if (void 0 !== parentReference) + if (void 0 !== refId) if (modelRoot === value) modelRoot = null; - else return parentReference; + else return refId; else -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference && - ((key = parentReference + ":" + key), + ((refId = writtenObjects.get(this)), + void 0 !== refId && + ((key = refId + ":" + key), writtenObjects.set(value, key), void 0 !== temporaryReferences && temporaryReferences.set(key, value))); if (isArrayImpl(value)) return value; if (value instanceof FormData) { null === formData && (formData = new FormData()); - var data$31 = formData; + var data$32 = formData; key = nextPartId++; var prefix = formFieldPrefix + "_" + key + "_"; value.forEach(function (originalValue, originalKey) { - data$31.append(prefix + originalKey, originalValue); + data$32.append(prefix + originalKey, originalValue); }); return "$K" + key.toString(16); } if (value instanceof Map) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$Q" + key.toString(16) ); if (value instanceof Set) return ( (key = nextPartId++), - (parentReference = serializeModel(Array.from(value), key)), + (refId = serializeModel(Array.from(value), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$W" + key.toString(16) ); if (value instanceof ArrayBuffer) return ( (key = new Blob([value])), - (parentReference = nextPartId++), + (refId = nextPartId++), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + parentReference, key), - "$A" + parentReference.toString(16) + formData.append(formFieldPrefix + refId, key), + "$A" + refId.toString(16) ); if (value instanceof Int8Array) return serializeTypedArray("O", value); if (value instanceof Uint8Array) return serializeTypedArray("o", value); @@ -447,17 +460,14 @@ function processReply( ); if ((key = getIteratorFn(value))) return ( - (parentReference = key.call(value)), - parentReference === value + (refId = key.call(value)), + refId === value ? ((key = nextPartId++), - (parentReference = serializeModel( - Array.from(parentReference), - key - )), + (refId = serializeModel(Array.from(refId), key)), null === formData && (formData = new FormData()), - formData.append(formFieldPrefix + key, parentReference), + formData.append(formFieldPrefix + key, refId), "$i" + key.toString(16)) - : Array.from(parentReference) + : Array.from(refId) ); if ( "function" === typeof ReadableStream && @@ -490,30 +500,27 @@ function processReply( if ("number" === typeof value) return serializeNumber(value); if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { - parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) { + refId = knownServerReferences.get(value); + if (void 0 !== refId) { key = writtenObjects.get(value); if (void 0 !== key) return key; key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, + { id: refId.id, bound: refId.bound }, resolveToJSON ); null === formData && (formData = new FormData()); - parentReference = nextPartId++; - formData.set(formFieldPrefix + parentReference, key); - key = "$h" + parentReference.toString(16); + refId = nextPartId++; + formData.set(formFieldPrefix + refId, key); + key = "$h" + refId.toString(16); writtenObjects.set(value, key); return key; } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again." ); @@ -522,12 +529,9 @@ function processReply( if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && - ((parentReference = writtenObjects.get(this)), - void 0 !== parentReference) + ((refId = writtenObjects.get(this)), void 0 !== refId) ) - return ( - temporaryReferences.set(parentReference + ":" + key, value), "$T" - ); + return temporaryReferences.set(refId + ":" + key, value), "$T"; throw Error( "Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options." ); @@ -691,7 +695,43 @@ function registerBoundServerReference(reference, id, bound, encodeFormAction) { bind: { value: bind } })); } -var FunctionBind = Function.prototype.bind, +var serverObjectReferenceProxyHandlers = { + get: function (target, name) { + switch (name) { + case "$$typeof": + return target.$$typeof; + case "name": + return; + case "displayName": + return; + case "defaultProps": + return; + case "_debugInfo": + return; + case ASYNC_ITERATOR: + return; + case "toJSON": + return; + case Symbol.toPrimitive: + return Object.prototype[Symbol.toPrimitive]; + case Symbol.toStringTag: + return Object.prototype[Symbol.toStringTag]; + case "then": + return; + } + throw Error( + "Cannot access " + + String(name) + + " on the client. You cannot read a Server Reference to an object on the client. You can only pass it back to the server." + ); + }, + set: function () { + throw Error( + "Cannot assign to a Server Reference to an object on the client." + ); + } + }, + FunctionBind = Function.prototype.bind, ArraySlice = Array.prototype.slice; function bind() { var referenceClosure = knownServerReferences.get(this); @@ -1153,19 +1193,19 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$45 = value._payload; - if (referencedChunk$45 === handler.chunk) value = handler.value; + var referencedChunk$47 = value._payload; + if (referencedChunk$47 === handler.chunk) value = handler.value; else { - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "resolved_model": - initializeModelChunk(referencedChunk$45); + initializeModelChunk(referencedChunk$47); break; case "resolved_module": - initializeModuleChunk(referencedChunk$45); + initializeModuleChunk(referencedChunk$47); } - switch (referencedChunk$45.status) { + switch (referencedChunk$47.status) { case "fulfilled": - value = referencedChunk$45.value; + value = referencedChunk$47.value; continue; } break; @@ -1319,6 +1359,14 @@ function loadServerReference(response, metaData, parentObject, key) { ); return null; } +function loadServerObjectReference(response, metaData) { + response = metaData.$$reference; + if (void 0 !== response) return response; + response = metaData.id; + var reference = new Proxy({}, serverObjectReferenceProxyHandlers); + knownServerObjectReferences.set(reference, response); + return (metaData.$$reference = reference); +} var EMPTY_REFERENCE_PATH = []; function getOutlinedModel(response, reference, parentObject, key, map) { var id = parseInt(reference, 16); @@ -1546,6 +1594,17 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return ( + (value = value.slice(2)), + getOutlinedModel( + response, + value, + parentObject, + key, + loadServerObjectReference + ) + ); case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -1734,8 +1793,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$59 = new ReactPromise("pending", null, null); - chunk$59.then( + var chunk$62 = new ReactPromise("pending", null, null); + chunk$62.then( function (v) { return controller.enqueue(v); }, @@ -1743,10 +1802,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$59; + previousBlockedChunk = chunk$62; chunk.then(function () { - previousBlockedChunk === chunk$59 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$59, json); + previousBlockedChunk === chunk$62 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$62, json); }); } }, @@ -1907,8 +1966,8 @@ function mergeBuffer(buffer, lastChunk) { for (var l = buffer.length, byteLength = lastChunk.length, i = 0; i < l; i++) byteLength += buffer[i].byteLength; byteLength = new Uint8Array(byteLength); - for (var i$60 = (i = 0); i$60 < l; i$60++) { - var chunk = buffer[i$60]; + for (var i$63 = (i = 0); i$63 < l; i$63++) { + var chunk = buffer[i$63]; byteLength.set(chunk, i); i += chunk.byteLength; } diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.browser.development.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.browser.development.js index c9b7738dce1c..b8e8c28f76de 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.browser.development.js @@ -2077,6 +2077,7 @@ var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); var originalValue = parent[parentPropertyName]; @@ -2268,35 +2269,44 @@ return value.id; } function serializeServerReference(request, serverReference) { - var writtenServerReferences = request.writtenServerReferences, + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); - if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, - error = serverReference.$$location; - error && - ((error = parseStackTrace(error, 1)), - 0 < error.length && - ((location = error[0]), - (location = [location[0], location[1], location[2], location[3]]))); - existingId = - null !== location - ? { - id: id, - bound: existingId, - name: - "function" === typeof serverReference - ? serverReference.name - : "", - env: (0, request.environmentName)(), - location: location - } - : { id: id, bound: existingId }; + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, + error = serverReference.$$location; + error && + ((error = parseStackTrace(error, 1)), + 0 < error.length && + ((location = error[0]), + (location = [location[0], location[1], location[2], location[3]]))); + existingId = + null !== location + ? { + id: existingId, + bound: boundArgs, + name: + "function" === typeof serverReference + ? serverReference.name + : "", + env: (0, request.environmentName)(), + location: location + } + : { id: existingId, bound: boundArgs }; + } request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); - return "$h" + request.toString(16); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); } function serializeLargeTextString(request, text) { request.pendingChunks++; @@ -2615,6 +2625,8 @@ parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -3744,53 +3756,64 @@ ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array ? emitTypedArrayChunk( request, id, - "m", + "M", value, !1 ) - : value instanceof DataView + : value instanceof BigUint64Array ? emitTypedArrayChunk( request, id, - "V", + "m", value, !1 ) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - emitModelChunk(request, task.id, value)); + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); @@ -4414,94 +4437,123 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } + } + function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -4662,6 +4714,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -4670,6 +4723,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -4698,17 +4753,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -4731,6 +4778,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -4757,6 +4833,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -4765,6 +4842,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -4796,32 +4875,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -4842,20 +4903,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5138,6 +5211,18 @@ loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if ( void 0 === reference || @@ -5401,6 +5486,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.browser.production.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.browser.production.js index 890a55949b92..e42a0818b37c 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.browser.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.browser.production.js @@ -1405,6 +1405,7 @@ function resolveModel(request, task, parent, parentPropertyName, value) { var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); serializedSize += parentPropertyName.length; @@ -1612,6 +1613,27 @@ function outlineModelWithFormatContext(request, value, formatContext) { retryTask(request, value); return value.id; } +function serializeServerReference(request, serverReference) { + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, + existingId = writtenServerReferences.get(serverReference); + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + existingId = { id: existingId, bound: boundArgs }; + } + request = outlineModelWithFormatContext(request, existingId, 0); + writtenServerReferences.set(serverReference, request); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); +} function serializeTypedArray(request, tag, typedArray) { request.pendingChunks++; var bufferId = request.nextChunkId++; @@ -1745,6 +1767,8 @@ function renderModelDestructive( parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -1929,22 +1953,7 @@ function renderModelDestructive( value ); if (value.$$typeof === SERVER_REFERENCE_TAG) - return ( - (parentPropertyName = request.writtenServerReferences), - (parent = parentPropertyName.get(value)), - void 0 !== parent - ? (value = "$h" + parent.toString(16)) - : ((parent = value.$$bound), - (parent = null === parent ? null : Promise.resolve(parent)), - (request = outlineModelWithFormatContext( - request, - { id: value.$$id, bound: parent }, - 0 - )), - parentPropertyName.set(value, request), - (value = "$h" + request.toString(16))), - value - ); + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((request = request.temporaryReferences.get(value)), void 0 !== request) @@ -2156,41 +2165,52 @@ function emitChunk(request, task, value) { ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array - ? emitTypedArrayChunk(request, id, "m", value, !1) - : value instanceof DataView - ? emitTypedArrayChunk(request, id, "V", value, !1) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - emitModelChunk(request, task.id, value)); + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array + ? emitTypedArrayChunk(request, id, "M", value, !1) + : value instanceof BigUint64Array + ? emitTypedArrayChunk(request, id, "m", value, !1) + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.status = 4; @@ -2480,9 +2500,9 @@ function abort(request, reason) { onAllReady(); flushCompletedChunks(request); } - } catch (error$35) { - logRecoverableError(request, error$35, null), - fatalError(request, error$35); + } catch (error$36) { + logRecoverableError(request, error$36, null), + fatalError(request, error$36); } } function resolveServerReference(bundlerConfig, id) { @@ -2720,85 +2740,113 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject(Error(formatProdErrorMessage(580, promiseValue.length, 1e3))); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error(formatProdErrorMessage(580, boundArgs.length, 1e3)); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } +} +function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error(formatProdErrorMessage(611)); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -2957,6 +3005,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -2965,6 +3014,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -2993,11 +3044,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -3019,6 +3068,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -3043,6 +3121,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3051,6 +3130,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3079,26 +3159,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error(formatProdErrorMessage(574)); @@ -3119,20 +3187,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(575)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(575)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(572)); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(576)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(576)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(573)); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(577)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(577)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(578)); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3248,12 +3328,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$40 = new ReactPromise("pending", null, null); - chunk$40.then(enqueue, flightController.error); - previousBlockedChunk = chunk$40; + var chunk$39 = new ReactPromise("pending", null, null); + chunk$39.then(enqueue, flightController.error); + previousBlockedChunk = chunk$39; chunk.then(function () { - previousBlockedChunk === chunk$40 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$40, json, -1); + previousBlockedChunk === chunk$39 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$39, json, -1); }); } }, @@ -3402,6 +3482,18 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error(formatProdErrorMessage(526)); @@ -3633,6 +3725,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.edge.development.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.edge.development.js index 7c2ffd0ea408..4be4f88a5791 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.edge.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.edge.development.js @@ -2137,6 +2137,7 @@ var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); var originalValue = parent[parentPropertyName]; @@ -2328,35 +2329,44 @@ return value.id; } function serializeServerReference(request, serverReference) { - var writtenServerReferences = request.writtenServerReferences, + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); - if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, - error = serverReference.$$location; - error && - ((error = parseStackTrace(error, 1)), - 0 < error.length && - ((location = error[0]), - (location = [location[0], location[1], location[2], location[3]]))); - existingId = - null !== location - ? { - id: id, - bound: existingId, - name: - "function" === typeof serverReference - ? serverReference.name - : "", - env: (0, request.environmentName)(), - location: location - } - : { id: id, bound: existingId }; + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, + error = serverReference.$$location; + error && + ((error = parseStackTrace(error, 1)), + 0 < error.length && + ((location = error[0]), + (location = [location[0], location[1], location[2], location[3]]))); + existingId = + null !== location + ? { + id: existingId, + bound: boundArgs, + name: + "function" === typeof serverReference + ? serverReference.name + : "", + env: (0, request.environmentName)(), + location: location + } + : { id: existingId, bound: boundArgs }; + } request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); - return "$h" + request.toString(16); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); } function serializeLargeTextString(request, text) { request.pendingChunks++; @@ -2675,6 +2685,8 @@ parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -3814,53 +3826,64 @@ ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array ? emitTypedArrayChunk( request, id, - "m", + "M", value, !1 ) - : value instanceof DataView + : value instanceof BigUint64Array ? emitTypedArrayChunk( request, id, - "V", + "m", value, !1 ) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - emitModelChunk(request, task.id, value)); + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); @@ -4492,94 +4515,123 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } + } + function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -4740,6 +4792,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -4748,6 +4801,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -4776,17 +4831,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -4809,6 +4856,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -4835,6 +4911,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -4843,6 +4920,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -4874,32 +4953,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -4920,20 +4981,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5216,6 +5289,18 @@ loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if ( void 0 === reference || @@ -5479,6 +5564,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.edge.production.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.edge.production.js index 4bf2c4e7005e..40f9ed1a7b58 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.edge.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.edge.production.js @@ -1428,6 +1428,7 @@ function resolveModel(request, task, parent, parentPropertyName, value) { var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); serializedSize += parentPropertyName.length; @@ -1643,6 +1644,27 @@ function outlineModelWithFormatContext(request, value, formatContext) { retryTask(request, value); return value.id; } +function serializeServerReference(request, serverReference) { + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, + existingId = writtenServerReferences.get(serverReference); + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + existingId = { id: existingId, bound: boundArgs }; + } + request = outlineModelWithFormatContext(request, existingId, 0); + writtenServerReferences.set(serverReference, request); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); +} function serializeTypedArray(request, tag, typedArray) { request.pendingChunks++; var bufferId = request.nextChunkId++; @@ -1778,6 +1800,8 @@ function renderModelDestructive( parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -1960,22 +1984,7 @@ function renderModelDestructive( value ); if (value.$$typeof === SERVER_REFERENCE_TAG) - return ( - (parentPropertyName = request.writtenServerReferences), - (parent = parentPropertyName.get(value)), - void 0 !== parent - ? (value = "$h" + parent.toString(16)) - : ((parent = value.$$bound), - (parent = null === parent ? null : Promise.resolve(parent)), - (request = outlineModelWithFormatContext( - request, - { id: value.$$id, bound: parent }, - 0 - )), - parentPropertyName.set(value, request), - (value = "$h" + request.toString(16))), - value - ); + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((request = request.temporaryReferences.get(value)), void 0 !== request) @@ -2185,41 +2194,52 @@ function emitChunk(request, task, value) { ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array - ? emitTypedArrayChunk(request, id, "m", value, !1) - : value instanceof DataView - ? emitTypedArrayChunk(request, id, "V", value, !1) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - emitModelChunk(request, task.id, value)); + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array + ? emitTypedArrayChunk(request, id, "M", value, !1) + : value instanceof BigUint64Array + ? emitTypedArrayChunk(request, id, "m", value, !1) + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.status = 4; @@ -2520,9 +2540,9 @@ function abort(request, reason) { onAllReady(); flushCompletedChunks(request); } - } catch (error$35) { - logRecoverableError(request, error$35, null), - fatalError(request, error$35); + } catch (error$36) { + logRecoverableError(request, error$36, null), + fatalError(request, error$36); } } function resolveServerReference(bundlerConfig, id) { @@ -2761,91 +2781,119 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is 1000." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is 1000." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } +} +function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -3006,6 +3054,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -3014,6 +3063,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -3042,11 +3093,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -3068,6 +3117,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -3094,6 +3172,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3102,6 +3181,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3130,26 +3210,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -3170,20 +3238,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3305,12 +3385,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$40 = new ReactPromise("pending", null, null); - chunk$40.then(enqueue, flightController.error); - previousBlockedChunk = chunk$40; + var chunk$39 = new ReactPromise("pending", null, null); + chunk$39.then(enqueue, flightController.error); + previousBlockedChunk = chunk$39; chunk.then(function () { - previousBlockedChunk === chunk$40 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$40, json, -1); + previousBlockedChunk === chunk$39 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$39, json, -1); }); } }, @@ -3463,6 +3543,18 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error( @@ -3700,6 +3792,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.development.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.development.js index 94f13c8f9b42..0a30463a61d4 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.development.js @@ -2415,6 +2415,7 @@ var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); var originalValue = parent[parentPropertyName]; @@ -2605,35 +2606,44 @@ return value.id; } function serializeServerReference(request, serverReference) { - var writtenServerReferences = request.writtenServerReferences, + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); - if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, - error = serverReference.$$location; - error && - ((error = parseStackTrace(error, 1)), - 0 < error.length && - ((location = error[0]), - (location = [location[0], location[1], location[2], location[3]]))); - existingId = - null !== location - ? { - id: id, - bound: existingId, - name: - "function" === typeof serverReference - ? serverReference.name - : "", - env: (0, request.environmentName)(), - location: location - } - : { id: id, bound: existingId }; + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, + error = serverReference.$$location; + error && + ((error = parseStackTrace(error, 1)), + 0 < error.length && + ((location = error[0]), + (location = [location[0], location[1], location[2], location[3]]))); + existingId = + null !== location + ? { + id: existingId, + bound: boundArgs, + name: + "function" === typeof serverReference + ? serverReference.name + : "", + env: (0, request.environmentName)(), + location: location + } + : { id: existingId, bound: boundArgs }; + } request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); - return "$h" + request.toString(16); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); } function serializeLargeTextString(request, text) { request.pendingChunks++; @@ -2952,6 +2962,8 @@ parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -3409,6 +3421,10 @@ id = encodeReferenceChunk(request, id, "$S" + name); request.completedImportChunks.push(id); } + function emitModelChunk(request, id, json) { + id = id.toString(16) + ":" + json + "\n"; + request.completedRegularChunks.push(id); + } function emitDebugHaltChunk(request, id) { id = id.toString(16) + ":\n"; request.completedDebugChunks.push(id); @@ -4215,58 +4231,64 @@ ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array ? emitTypedArrayChunk( request, id, - "m", + "M", value, !1 ) - : value instanceof DataView + : value instanceof BigUint64Array ? emitTypedArrayChunk( request, id, - "V", + "m", value, !1 ) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - (task = - task.id.toString(16) + - ":" + - value + - "\n"), - request.completedRegularChunks.push(task)); + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.timed && markOperationEndTime(request, task, performance.now()); @@ -4307,9 +4329,8 @@ ), emitChunk(request, task, resolvedModel); else { - var json = stringify(resolvedModel), - processedChunk = task.id.toString(16) + ":" + json + "\n"; - request.completedRegularChunks.push(processedChunk); + var json = stringify(resolvedModel); + emitModelChunk(request, task.id, json); } task.status = COMPLETED; request.abortableTasks.delete(task); @@ -4968,94 +4989,123 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } + } + function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -5216,6 +5266,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -5224,6 +5275,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -5252,17 +5305,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -5285,6 +5330,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -5311,6 +5385,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -5319,6 +5394,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -5350,32 +5427,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -5396,20 +5455,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5692,6 +5763,18 @@ loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if ( void 0 === reference || @@ -5955,6 +6038,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.production.js b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.production.js index 746ad2985cfc..50563fdcd17c 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/cjs/react-server-dom-webpack-server.node.production.js @@ -1450,6 +1450,7 @@ function resolveModel(request, task, parent, parentPropertyName, value) { var jsonValue = value; null !== value && "object" === typeof value && + value.$$typeof !== SERVER_REFERENCE_TAG && "function" === typeof value.toJSON && (jsonValue = value.toJSON(parentPropertyName)); serializedSize += parentPropertyName.length; @@ -1663,6 +1664,27 @@ function outlineModelWithFormatContext(request, value, formatContext) { retryTask(request, value); return value.id; } +function serializeServerReference(request, serverReference) { + var isObjectReference = "object" === typeof serverReference, + writtenServerReferences = request.writtenServerReferences, + existingId = writtenServerReferences.get(serverReference); + if (void 0 !== existingId) + return isObjectReference + ? "$H" + existingId.toString(16) + : "$h" + existingId.toString(16); + existingId = serverReference.$$id; + if (isObjectReference) existingId = { id: existingId }; + else { + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + existingId = { id: existingId, bound: boundArgs }; + } + request = outlineModelWithFormatContext(request, existingId, 0); + writtenServerReferences.set(serverReference, request); + return isObjectReference + ? "$H" + request.toString(16) + : "$h" + request.toString(16); +} function serializeTypedArray(request, tag, typedArray) { request.pendingChunks++; var bufferId = request.nextChunkId++; @@ -1796,6 +1818,8 @@ function renderModelDestructive( parentPropertyName, value ); + if (value.$$typeof === SERVER_REFERENCE_TAG) + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((elementReference = request.temporaryReferences.get(value)), @@ -1978,22 +2002,7 @@ function renderModelDestructive( value ); if (value.$$typeof === SERVER_REFERENCE_TAG) - return ( - (parentPropertyName = request.writtenServerReferences), - (parent = parentPropertyName.get(value)), - void 0 !== parent - ? (value = "$h" + parent.toString(16)) - : ((parent = value.$$bound), - (parent = null === parent ? null : Promise.resolve(parent)), - (request = outlineModelWithFormatContext( - request, - { id: value.$$id, bound: parent }, - 0 - )), - parentPropertyName.set(value, request), - (value = "$h" + request.toString(16))), - value - ); + return serializeServerReference(request, value); if ( void 0 !== request.temporaryReferences && ((request = request.temporaryReferences.get(value)), void 0 !== request) @@ -2147,6 +2156,10 @@ function transformImportMetadata(request, value, depth) { return NOT_PLAIN_IMPORT_METADATA; } } +function emitModelChunk(request, id, json) { + id = id.toString(16) + ":" + json + "\n"; + request.completedRegularChunks.push(id); +} function emitTypedArrayChunk(request, id, tag, typedArray, debug) { if (TaintRegistryByteLengths.has(typedArray.byteLength)) { var tainted = TaintRegistryValues.get( @@ -2191,43 +2204,52 @@ function emitChunk(request, task, value) { ? ((task = TaintRegistryValues.get(value)), void 0 !== task && throwTaintViolation(task.message), emitTextChunk(request, id, value, !1)) - : value instanceof ArrayBuffer - ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) - : value instanceof Int8Array - ? emitTypedArrayChunk(request, id, "O", value, !1) - : value instanceof Uint8Array - ? emitTypedArrayChunk(request, id, "o", value, !1) - : value instanceof Uint8ClampedArray - ? emitTypedArrayChunk(request, id, "U", value, !1) - : value instanceof Int16Array - ? emitTypedArrayChunk(request, id, "S", value, !1) - : value instanceof Uint16Array - ? emitTypedArrayChunk(request, id, "s", value, !1) - : value instanceof Int32Array - ? emitTypedArrayChunk(request, id, "L", value, !1) - : value instanceof Uint32Array - ? emitTypedArrayChunk(request, id, "l", value, !1) - : value instanceof Float32Array - ? emitTypedArrayChunk(request, id, "G", value, !1) - : value instanceof Float64Array - ? emitTypedArrayChunk(request, id, "g", value, !1) - : value instanceof BigInt64Array - ? emitTypedArrayChunk(request, id, "M", value, !1) - : value instanceof BigUint64Array - ? emitTypedArrayChunk(request, id, "m", value, !1) - : value instanceof DataView - ? emitTypedArrayChunk(request, id, "V", value, !1) - : ((value = resolveModel( - request, - task, - { "": value }, - "", - value - )), - (value = stringify(value)), - (task = - task.id.toString(16) + ":" + value + "\n"), - request.completedRegularChunks.push(task)); + : "object" === typeof value && + null !== value && + value.$$typeof === SERVER_REFERENCE_TAG + ? ((task = stringify(serializeServerReference(request, value))), + emitModelChunk(request, id, task)) + : value instanceof ArrayBuffer + ? emitTypedArrayChunk(request, id, "A", new Uint8Array(value), !1) + : value instanceof Int8Array + ? emitTypedArrayChunk(request, id, "O", value, !1) + : value instanceof Uint8Array + ? emitTypedArrayChunk(request, id, "o", value, !1) + : value instanceof Uint8ClampedArray + ? emitTypedArrayChunk(request, id, "U", value, !1) + : value instanceof Int16Array + ? emitTypedArrayChunk(request, id, "S", value, !1) + : value instanceof Uint16Array + ? emitTypedArrayChunk(request, id, "s", value, !1) + : value instanceof Int32Array + ? emitTypedArrayChunk(request, id, "L", value, !1) + : value instanceof Uint32Array + ? emitTypedArrayChunk(request, id, "l", value, !1) + : value instanceof Float32Array + ? emitTypedArrayChunk(request, id, "G", value, !1) + : value instanceof Float64Array + ? emitTypedArrayChunk(request, id, "g", value, !1) + : value instanceof BigInt64Array + ? emitTypedArrayChunk(request, id, "M", value, !1) + : value instanceof BigUint64Array + ? emitTypedArrayChunk(request, id, "m", value, !1) + : value instanceof DataView + ? emitTypedArrayChunk( + request, + id, + "V", + value, + !1 + ) + : ((id = resolveModel( + request, + task, + { "": value }, + "", + value + )), + (id = stringify(id)), + emitModelChunk(request, task.id, id)); } function erroredTask(request, task, error) { task.status = 4; @@ -2257,9 +2279,8 @@ function retryTask(request, task) { request.writtenObjects.set(resolvedModel, serializeByValueID(task.id)), emitChunk(request, task, resolvedModel); else { - var json = stringify(resolvedModel), - processedChunk = task.id.toString(16) + ":" + json + "\n"; - request.completedRegularChunks.push(processedChunk); + var json = stringify(resolvedModel); + emitModelChunk(request, task.id, json); } task.status = 1; request.abortableTasks.delete(task); @@ -2542,9 +2563,9 @@ function abort(request, reason) { onAllReady(); flushCompletedChunks(request); } - } catch (error$35) { - logRecoverableError(request, error$35, null), - fatalError(request, error$35); + } catch (error$36) { + logRecoverableError(request, error$36, null), + fatalError(request, error$36); } } function resolveServerReference(bundlerConfig, id) { @@ -2783,91 +2804,119 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is 1000." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is 1000." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } +} +function loadServerObjectReference(response, metaData, parentObject, key) { + function fulfill() { + try { + var value = requireServerReference(response, serverReference); + if ("object" !== typeof value || null === value) + throw Error( + "Expected a Server Reference to an object to resolve to an object." + ); + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); + return; + } + resolveServerReferenceChunk(response, blockedPromise, value); + } + var id = metaData.id; + if ("string" !== typeof id) return null; + var cachedPromise = response._serverObjectReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); + var blockedPromise = new ReactPromise("blocked", null, null); + response._serverObjectReferenceCache.set(metaData, blockedPromise); + var serverReference = resolveServerReference(response._bundlerConfig, id); + metaData = preloadModule(serverReference); + null === metaData + ? fulfill() + : metaData.then(fulfill, function (error) { + triggerErrorOnChunk(response, blockedPromise, error); + }); + return readServerReference(response, blockedPromise, parentObject, key); } function reviveModel( response, @@ -3028,6 +3077,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -3036,6 +3086,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -3064,11 +3116,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -3090,6 +3140,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -3116,6 +3195,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3124,6 +3204,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3152,26 +3233,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -3192,20 +3261,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3327,12 +3408,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$40 = new ReactPromise("pending", null, null); - chunk$40.then(enqueue, flightController.error); - previousBlockedChunk = chunk$40; + var chunk$39 = new ReactPromise("pending", null, null); + chunk$39.then(enqueue, flightController.error); + previousBlockedChunk = chunk$39; chunk.then(function () { - previousBlockedChunk === chunk$40 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$40, json, -1); + previousBlockedChunk === chunk$39 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$39, json, -1); }); } }, @@ -3485,6 +3566,18 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return ( + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerObjectReference + ) + ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error( @@ -3722,6 +3815,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack-experimental/package.json b/packages/next/src/compiled/react-server-dom-webpack-experimental/package.json index 8c1c2f62b5e8..7f596f7ef37d 100644 --- a/packages/next/src/compiled/react-server-dom-webpack-experimental/package.json +++ b/packages/next/src/compiled/react-server-dom-webpack-experimental/package.json @@ -52,8 +52,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "0.0.0-experimental-ff8f88fc-20260915", - "react-dom": "0.0.0-experimental-ff8f88fc-20260915", + "react": "0.0.0-experimental-59aff3e1-20260918", + "react-dom": "0.0.0-experimental-59aff3e1-20260918", "webpack": "^5.59.0" } } \ No newline at end of file diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js index 01d10e2870bf..9ec4a40e09a8 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js @@ -2787,6 +2787,8 @@ key, loadServerReference ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; @@ -5325,10 +5327,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-ff8f88fc-20260915", + version: "19.3.0-canary-59aff3e1-20260918", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-ff8f88fc-20260915", + reconcilerVersion: "19.3.0-canary-59aff3e1-20260918", getCurrentComponentInfo: function () { return currentOwnerInDEV; } diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js index cac457fa630a..53769dd16f9b 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.production.js @@ -1344,6 +1344,8 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js index a9c44b106d3a..83e4e7d67818 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.development.js @@ -2945,6 +2945,8 @@ key, loadServerReference ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js index b897cf7ba197..29f87b8a3d41 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.edge.production.js @@ -1531,6 +1531,8 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js index 0e68c20d5f8e..14a4f9783ba2 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.development.js @@ -2948,6 +2948,8 @@ key, loadServerReference ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js index af5ba8e82e90..8d807ec1de16 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.node.production.js @@ -1532,6 +1532,8 @@ function parseModelString(response, parentObject, key, value) { loadServerReference ) ); + case "H": + return; case "T": parentObject = "$" + value.slice(2); response = response._tempRefs; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js index 05ef4ee69cbf..ccd1315b70ea 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js @@ -2199,10 +2199,10 @@ var writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, + existingId = serverReference.$$id; + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, error = serverReference.$$location; error && ((error = parseStackTrace(error, 1)), @@ -2212,8 +2212,8 @@ existingId = null !== location ? { - id: id, - bound: existingId, + id: existingId, + bound: boundArgs, name: "function" === typeof serverReference ? serverReference.name @@ -2221,7 +2221,7 @@ env: (0, request.environmentName)(), location: location } - : { id: id, bound: existingId }; + : { id: existingId, bound: boundArgs }; request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); return "$h" + request.toString(16); @@ -4307,94 +4307,93 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -4555,6 +4554,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -4563,6 +4563,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -4591,17 +4593,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -4624,6 +4618,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -4650,6 +4673,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -4658,6 +4682,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -4689,32 +4715,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -4735,20 +4743,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5031,6 +5051,8 @@ loadServerReference$1 ) ); + case "H": + return; case "T": if ( void 0 === reference || @@ -5294,6 +5316,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js index d3c61b5403f1..d8255933c999 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js @@ -1857,14 +1857,12 @@ function renderModelDestructive( (parentPropertyName = task.get(value)), void 0 !== parentPropertyName ? (request = "$h" + parentPropertyName.toString(16)) - : ((parentPropertyName = value.$$bound), - (parentPropertyName = - null === parentPropertyName - ? null - : Promise.resolve(parentPropertyName)), + : ((parentPropertyName = value.$$id), + (parent = value.$$bound), + (parent = null === parent ? null : Promise.resolve(parent)), (request = outlineModelWithFormatContext( request, - { id: value.$$id, bound: parentPropertyName }, + { id: parentPropertyName, bound: parent }, 0 )), task.set(value, request), @@ -2622,85 +2620,85 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject(Error(formatProdErrorMessage(580, promiseValue.length, 1e3))); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error(formatProdErrorMessage(580, boundArgs.length, 1e3)); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -2859,6 +2857,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -2867,6 +2866,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -2895,11 +2896,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -2921,6 +2920,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -2945,6 +2973,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -2953,6 +2982,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -2981,26 +3011,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error(formatProdErrorMessage(574)); @@ -3021,20 +3039,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(575)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(575)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(572)); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(576)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(576)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(573)); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error(formatProdErrorMessage(577)); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error(formatProdErrorMessage(577)); if (!0 === model.$$consumed) throw Error(formatProdErrorMessage(578)); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3150,12 +3180,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$37 = new ReactPromise("pending", null, null); - chunk$37.then(enqueue, flightController.error); - previousBlockedChunk = chunk$37; + var chunk$35 = new ReactPromise("pending", null, null); + chunk$35.then(enqueue, flightController.error); + previousBlockedChunk = chunk$35; chunk.then(function () { - previousBlockedChunk === chunk$37 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$37, json, -1); + previousBlockedChunk === chunk$35 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$35, json, -1); }); } }, @@ -3304,6 +3334,8 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return; case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error(formatProdErrorMessage(526)); @@ -3535,6 +3567,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js index e315ce45f895..642771eabf7b 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js @@ -2259,10 +2259,10 @@ var writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, + existingId = serverReference.$$id; + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, error = serverReference.$$location; error && ((error = parseStackTrace(error, 1)), @@ -2272,8 +2272,8 @@ existingId = null !== location ? { - id: id, - bound: existingId, + id: existingId, + bound: boundArgs, name: "function" === typeof serverReference ? serverReference.name @@ -2281,7 +2281,7 @@ env: (0, request.environmentName)(), location: location } - : { id: id, bound: existingId }; + : { id: existingId, bound: boundArgs }; request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); return "$h" + request.toString(16); @@ -4385,94 +4385,93 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -4633,6 +4632,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -4641,6 +4641,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -4669,17 +4671,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -4702,6 +4696,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -4728,6 +4751,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -4736,6 +4760,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -4767,32 +4793,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -4813,20 +4821,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5109,6 +5129,8 @@ loadServerReference$1 ) ); + case "H": + return; case "T": if ( void 0 === reference || @@ -5372,6 +5394,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js index 95e1a9001808..54aa3185f597 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js @@ -1888,14 +1888,12 @@ function renderModelDestructive( (parentPropertyName = task.get(value)), void 0 !== parentPropertyName ? (request = "$h" + parentPropertyName.toString(16)) - : ((parentPropertyName = value.$$bound), - (parentPropertyName = - null === parentPropertyName - ? null - : Promise.resolve(parentPropertyName)), + : ((parentPropertyName = value.$$id), + (parent = value.$$bound), + (parent = null === parent ? null : Promise.resolve(parent)), (request = outlineModelWithFormatContext( request, - { id: value.$$id, bound: parentPropertyName }, + { id: parentPropertyName, bound: parent }, 0 )), task.set(value, request), @@ -2663,91 +2661,89 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is 1000." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is 1000." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -2908,6 +2904,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -2916,6 +2913,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -2944,11 +2943,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -2970,6 +2967,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -2996,6 +3022,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3004,6 +3031,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3032,26 +3060,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -3072,20 +3088,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3207,12 +3235,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$37 = new ReactPromise("pending", null, null); - chunk$37.then(enqueue, flightController.error); - previousBlockedChunk = chunk$37; + var chunk$35 = new ReactPromise("pending", null, null); + chunk$35.then(enqueue, flightController.error); + previousBlockedChunk = chunk$35; chunk.then(function () { - previousBlockedChunk === chunk$37 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$37, json, -1); + previousBlockedChunk === chunk$35 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$35, json, -1); }); } }, @@ -3365,6 +3393,8 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return; case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error( @@ -3602,6 +3632,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js index 75451d92423f..7a8352b7e402 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js @@ -2536,10 +2536,10 @@ var writtenServerReferences = request.writtenServerReferences, existingId = writtenServerReferences.get(serverReference); if (void 0 !== existingId) return "$h" + existingId.toString(16); - existingId = serverReference.$$bound; - existingId = null === existingId ? null : Promise.resolve(existingId); - var id = serverReference.$$id, - location = null, + existingId = serverReference.$$id; + var boundArgs = serverReference.$$bound; + boundArgs = null === boundArgs ? null : Promise.resolve(boundArgs); + var location = null, error = serverReference.$$location; error && ((error = parseStackTrace(error, 1)), @@ -2549,8 +2549,8 @@ existingId = null !== location ? { - id: id, - bound: existingId, + id: existingId, + bound: boundArgs, name: "function" === typeof serverReference ? serverReference.name @@ -2558,7 +2558,7 @@ env: (0, request.environmentName)(), location: location } - : { id: id, bound: existingId }; + : { id: existingId, bound: boundArgs }; request = outlineModel(request, existingId); writtenServerReferences.set(serverReference, request); return "$h" + request.toString(16); @@ -4861,94 +4861,93 @@ ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && - rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (promiseValue.length > MAX_BOUND_ARGS) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is " + - MAX_BOUND_ARGS + - "." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) + ? promiseValue.slice(0) + : []; + if (boundArgs.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); + } + function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; + } + function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); + } + function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -5109,6 +5108,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -5117,6 +5117,8 @@ if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -5145,17 +5147,9 @@ rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); - } - function resolveReference( - response, - handler, - parentObject, - key, - resolvedValue - ) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -5178,6 +5172,35 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } + function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path + ) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; + } function getOutlinedModel( response, reference, @@ -5204,6 +5227,7 @@ for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -5212,6 +5236,8 @@ if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && + serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -5243,32 +5269,14 @@ bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -5289,20 +5297,32 @@ ); } } + function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); + } function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -5585,6 +5605,8 @@ loadServerReference$1 ) ); + case "H": + return; case "T": if ( void 0 === reference || @@ -5848,6 +5870,9 @@ _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js index 08d39bde29e1..a1fdc25d7ced 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js +++ b/packages/next/src/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js @@ -1906,14 +1906,12 @@ function renderModelDestructive( (parentPropertyName = task.get(value)), void 0 !== parentPropertyName ? (request = "$h" + parentPropertyName.toString(16)) - : ((parentPropertyName = value.$$bound), - (parentPropertyName = - null === parentPropertyName - ? null - : Promise.resolve(parentPropertyName)), + : ((parentPropertyName = value.$$id), + (parent = value.$$bound), + (parent = null === parent ? null : Promise.resolve(parent)), (request = outlineModelWithFormatContext( request, - { id: value.$$id, bound: parentPropertyName }, + { id: parentPropertyName, bound: parent }, 0 )), task.set(value, request), @@ -2685,91 +2683,89 @@ function resolveIteratorResultChunk(response, chunk, value, done) { ); } function loadServerReference$1(response, metaData, parentObject, key) { - function reject(error) { - var rejectListeners = blockedPromise.reason, - erroredPromise = blockedPromise; - erroredPromise.status = "rejected"; - erroredPromise.value = null; - erroredPromise.reason = error; - null !== rejectListeners && rejectChunk(response, rejectListeners, error); - rejectReference(response, handler, error); - } var id = metaData.id; if ("string" !== typeof id || "then" === key) return null; - var cachedPromise = metaData.$$promise; - if (void 0 !== cachedPromise) { - if ("fulfilled" === cachedPromise.status) - return ( - (cachedPromise = cachedPromise.value), - "__proto__" === key ? null : (parentObject[key] = cachedPromise) - ); - initializingHandler - ? ((id = initializingHandler), id.deps++) - : (id = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); - cachedPromise.then( - resolveReference.bind(null, response, id, parentObject, key), - rejectReference.bind(null, response, id) - ); - return null; - } + var cachedPromise = response._serverReferenceCache.get(metaData); + if (void 0 !== cachedPromise) + return readServerReference(response, cachedPromise, parentObject, key); var blockedPromise = new ReactPromise("blocked", null, null); - metaData.$$promise = blockedPromise; + response._serverReferenceCache.set(metaData, blockedPromise); var serverReference = resolveServerReference(response._bundlerConfig, id); - cachedPromise = metaData.bound; - if ((id = preloadModule(serverReference))) - cachedPromise instanceof ReactPromise && - (id = Promise.all([id, cachedPromise])); - else if (cachedPromise instanceof ReactPromise) - id = Promise.resolve(cachedPromise); + id = metaData.bound; + if ((cachedPromise = preloadModule(serverReference))) + id instanceof ReactPromise && + (cachedPromise = Promise.all([cachedPromise, id])); + else if (id instanceof ReactPromise) cachedPromise = Promise.resolve(id); else return ( - (cachedPromise = requireModule(serverReference)), - (id = blockedPromise), - (id.status = "fulfilled"), - (id.value = cachedPromise), - (id.reason = null), - cachedPromise + (id = requireServerReference(response, serverReference)), + resolveServerReferenceChunk(response, blockedPromise, id), + readServerReference(response, blockedPromise, parentObject, key) ); - if (initializingHandler) { - var handler = initializingHandler; - handler.deps++; - } else - handler = initializingHandler = { - chunk: null, - value: null, - reason: null, - deps: 1, - errored: !1 - }; - id.then(function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; - if (1e3 < promiseValue.length) { - reject( - Error( - "Server Function has too many bound arguments. Received " + - promiseValue.length + - " but the limit is 1000." - ) - ); + cachedPromise.then( + function () { + try { + var value = requireServerReference(response, serverReference); + if (metaData.bound) { + var promiseValue = metaData.bound.value, + boundArgs = isArrayImpl(promiseValue) ? promiseValue.slice(0) : []; + if (1e3 < boundArgs.length) + throw Error( + "Server Function has too many bound arguments. Received " + + boundArgs.length + + " but the limit is 1000." + ); + boundArgs.unshift(null); + value = value.bind.apply(value, boundArgs); + } + } catch (error) { + triggerErrorOnChunk(response, blockedPromise, error); return; } - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); + resolveServerReferenceChunk(response, blockedPromise, value); + }, + function (error) { + triggerErrorOnChunk(response, blockedPromise, error); } - promiseValue = blockedPromise.value; - var initializedPromise = blockedPromise; - initializedPromise.status = "fulfilled"; - initializedPromise.value = resolvedValue; - initializedPromise.reason = null; - null !== promiseValue && - wakeChunk(response, promiseValue, resolvedValue, initializedPromise); - resolveReference(response, handler, parentObject, key, resolvedValue); - }, reject); - return null; + ); + return readServerReference(response, blockedPromise, parentObject, key); +} +function requireServerReference(response, reference) { + reference = requireModule(reference); + if ("object" === typeof reference && null !== reference) { + var serverReferenceObjects = response._serverReferenceObjects; + null === serverReferenceObjects && + (serverReferenceObjects = response._serverReferenceObjects = + new WeakSet()); + serverReferenceObjects.add(reference); + } + return reference; +} +function resolveServerReferenceChunk(response, chunk, value) { + var resolveListeners = chunk.value; + chunk.status = "fulfilled"; + chunk.value = value; + chunk.reason = null; + null !== resolveListeners && + wakeChunk(response, resolveListeners, value, chunk); +} +function readServerReference(response, chunk, parentObject, key) { + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "blocked": + return waitForReference( + response, + chunk, + parentObject, + key, + null, + createModel, + [] + ); + default: + throw chunk.reason; + } } function reviveModel( response, @@ -2930,6 +2926,7 @@ function fulfillReference(response, reference, value, arrayRoot) { for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < path.length; i++ @@ -2938,6 +2935,8 @@ function fulfillReference(response, reference, value, arrayRoot) { if ( "object" !== typeof value || null === value || + (null !== serverReferenceObjects && + serverReferenceObjects.has(value)) || (getPrototypeOf(value) !== ObjectPrototype && getPrototypeOf(value) !== ArrayPrototype) || !hasOwnProperty.call(value, name) @@ -2966,11 +2965,9 @@ function fulfillReference(response, reference, value, arrayRoot) { rejectReference(response, handler, error); return; } - resolveReference(response, handler, parentObject, key, resolvedValue); -} -function resolveReference(response, handler, parentObject, key, resolvedValue) { - "__proto__" !== key && (parentObject[key] = resolvedValue); - "" === key && null === handler.value && (handler.value = resolvedValue); + reference = resolvedValue; + "__proto__" !== key && (parentObject[key] = reference); + "" === key && null === handler.value && (handler.value = reference); handler.deps--; 0 === handler.deps && ((parentObject = handler.chunk), @@ -2992,6 +2989,35 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } +function waitForReference( + response, + referencedChunk, + parentObject, + key, + arrayRoot, + map, + path +) { + initializingHandler + ? ((response = initializingHandler), response.deps++) + : (response = initializingHandler = + { chunk: null, value: null, reason: null, deps: 1, errored: !1 }); + parentObject = { + handler: response, + parentObject: parentObject, + key: key, + map: map, + path: path, + arrayRoot: arrayRoot + }; + null === referencedChunk.value + ? (referencedChunk.value = [parentObject]) + : referencedChunk.value.push(parentObject); + null === referencedChunk.reason + ? (referencedChunk.reason = [parentObject]) + : referencedChunk.reason.push(parentObject); + return null; +} function getOutlinedModel( response, reference, @@ -3018,6 +3044,7 @@ function getOutlinedModel( for ( var localLength = 0, rootArrayContexts = response._rootArrayContexts, + serverReferenceObjects = response._serverReferenceObjects, i = 1; i < reference.length; i++ @@ -3026,6 +3053,7 @@ function getOutlinedModel( if ( "object" !== typeof id || null === id || + (null !== serverReferenceObjects && serverReferenceObjects.has(id)) || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || !hasOwnProperty.call(id, localLength) @@ -3054,26 +3082,14 @@ function getOutlinedModel( bumpArrayCount(referenceArrayRoot, localLength, response)); return parentObject; case "blocked": - return ( - initializingHandler - ? ((response = initializingHandler), response.deps++) - : (response = initializingHandler = - { chunk: null, value: null, reason: null, deps: 1, errored: !1 }), - (referenceArrayRoot = { - handler: response, - parentObject: parentObject, - key: key, - map: map, - path: reference, - arrayRoot: referenceArrayRoot - }), - null === chunk.value - ? (chunk.value = [referenceArrayRoot]) - : chunk.value.push(referenceArrayRoot), - null === chunk.reason - ? (chunk.reason = [referenceArrayRoot]) - : chunk.reason.push(referenceArrayRoot), - null + return waitForReference( + response, + chunk, + parentObject, + key, + referenceArrayRoot, + map, + reference ); case "pending": throw Error("Invalid forward reference."); @@ -3094,20 +3110,32 @@ function getOutlinedModel( ); } } +function isServerReferenceObject(response, value) { + response = response._serverReferenceObjects; + return ( + null !== response && + "object" === typeof value && + null !== value && + response.has(value) + ); +} function createMap(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Map initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Map."); model.$$consumed = !0; return new Map(model); } function createSet(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Set initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Set."); model.$$consumed = !0; return new Set(model); } function extractIterator(response, model) { - if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!isArrayImpl(model) || isServerReferenceObject(response, model)) + throw Error("Invalid Iterator initializer."); if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); model.$$consumed = !0; return model[Symbol.iterator](); @@ -3229,12 +3257,12 @@ function parseReadableStream(response, reference, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$37 = new ReactPromise("pending", null, null); - chunk$37.then(enqueue, flightController.error); - previousBlockedChunk = chunk$37; + var chunk$35 = new ReactPromise("pending", null, null); + chunk$35.then(enqueue, flightController.error); + previousBlockedChunk = chunk$35; chunk.then(function () { - previousBlockedChunk === chunk$37 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$37, json, -1); + previousBlockedChunk === chunk$35 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$35, json, -1); }); } }, @@ -3387,6 +3415,8 @@ function parseModelString(response, obj, key, value, reference, arrayRoot) { loadServerReference$1 ) ); + case "H": + return; case "T": if (void 0 === reference || void 0 === response._temporaryReferences) throw Error( @@ -3624,6 +3654,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _closed: !1, _closedReason: null, _temporaryReferences: temporaryReferences, + _serverReferenceObjects: null, + _serverReferenceCache: new WeakMap(), + _serverObjectReferenceCache: new WeakMap(), _rootArrayContexts: new WeakMap(), _arraySizeLimit: arraySizeLimit }; diff --git a/packages/next/src/compiled/react-server-dom-webpack/package.json b/packages/next/src/compiled/react-server-dom-webpack/package.json index 3f46aafa6c6c..34e1e7095f82 100644 --- a/packages/next/src/compiled/react-server-dom-webpack/package.json +++ b/packages/next/src/compiled/react-server-dom-webpack/package.json @@ -52,8 +52,8 @@ "webpack-sources": "^3.2.0" }, "peerDependencies": { - "react": "19.3.0-canary-ff8f88fc-20260915", - "react-dom": "19.3.0-canary-ff8f88fc-20260915", + "react": "19.3.0-canary-59aff3e1-20260918", + "react-dom": "19.3.0-canary-59aff3e1-20260918", "webpack": "^5.59.0" } } \ No newline at end of file diff --git a/packages/next/src/compiled/react/cjs/react.development.js b/packages/next/src/compiled/react/cjs/react.development.js index 0a0a4169da1a..9bc2369d7174 100644 --- a/packages/next/src/compiled/react/cjs/react.development.js +++ b/packages/next/src/compiled/react/cjs/react.development.js @@ -1322,7 +1322,7 @@ exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/packages/next/src/compiled/react/cjs/react.production.js b/packages/next/src/compiled/react/cjs/react.production.js index a1f211ed6627..84e4f6aa65d6 100644 --- a/packages/next/src/compiled/react/cjs/react.production.js +++ b/packages/next/src/compiled/react/cjs/react.production.js @@ -562,4 +562,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/react/cjs/react.react-server.development.js b/packages/next/src/compiled/react/cjs/react.react-server.development.js index e0a634c39c1e..00df63003e74 100644 --- a/packages/next/src/compiled/react/cjs/react.react-server.development.js +++ b/packages/next/src/compiled/react/cjs/react.react-server.development.js @@ -874,5 +874,5 @@ exports.useMemo = function (create, deps) { return resolveDispatcher().useMemo(create, deps); }; - exports.version = "19.3.0-canary-ff8f88fc-20260915"; + exports.version = "19.3.0-canary-59aff3e1-20260918"; })(); diff --git a/packages/next/src/compiled/react/cjs/react.react-server.production.js b/packages/next/src/compiled/react/cjs/react.react-server.production.js index a4039087d447..8b9b163f2cca 100644 --- a/packages/next/src/compiled/react/cjs/react.react-server.production.js +++ b/packages/next/src/compiled/react/cjs/react.react-server.production.js @@ -433,4 +433,4 @@ exports.useId = function () { exports.useMemo = function (create, deps) { return ReactSharedInternals.H.useMemo(create, deps); }; -exports.version = "19.3.0-canary-ff8f88fc-20260915"; +exports.version = "19.3.0-canary-59aff3e1-20260918"; diff --git a/packages/next/src/compiled/unistore/unistore.js b/packages/next/src/compiled/unistore/unistore.js index 957bd6894db4..26db4d9b6ec5 100644 --- a/packages/next/src/compiled/unistore/unistore.js +++ b/packages/next/src/compiled/unistore/unistore.js @@ -1 +1 @@ -(()=>{var t={311:t=>{function n(t,i){for(var _ in i)t[_]=i[_];return t}t.exports=function(t){var i=[];function u(t){for(var _=[],a=0;a{var t={427:t=>{function n(t,i){for(var _ in i)t[_]=i[_];return t}t.exports=function(t){var i=[];function u(t){for(var _=[],a=0;a=0.15.0' - version: 2.2.1(react@19.3.0-canary-ff8f88fc-20260915) + version: 2.2.1(react@19.3.0-canary-59aff3e1-20260918) source-map: specifier: ^0.7.0 version: 0.7.3 @@ -1973,8 +1973,8 @@ importers: packages/third-parties: dependencies: react: - specifier: npm:react@19.3.0-canary-ff8f88fc-20260915 - version: 19.3.0-canary-ff8f88fc-20260915 + specifier: npm:react@19.3.0-canary-59aff3e1-20260918 + version: 19.3.0-canary-59aff3e1-20260918 third-party-capital: specifier: 1.0.20 version: 1.0.20 @@ -2037,14 +2037,14 @@ importers: specifier: 29.5.0 version: 29.5.0 react: - specifier: npm:react@19.3.0-canary-ff8f88fc-20260915 - version: 19.3.0-canary-ff8f88fc-20260915 + specifier: npm:react@19.3.0-canary-59aff3e1-20260918 + version: 19.3.0-canary-59aff3e1-20260918 react-test-renderer: specifier: 18.2.0 - version: 18.2.0(react@19.3.0-canary-ff8f88fc-20260915) + version: 18.2.0(react@19.3.0-canary-59aff3e1-20260918) styled-jsx: specifier: ^5.1.2 - version: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-ff8f88fc-20260915) + version: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-59aff3e1-20260918) packages: @@ -16016,18 +16016,18 @@ packages: resolution: {integrity: sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==} engines: {node: '>=16.14.0'} - react-dom@0.0.0-experimental-ff8f88fc-20260915: - resolution: {integrity: sha512-yomvWEPd8h5/ov6Y02J97bPSu9A05ihSUqRKoi+uRWEWXokBAvc2pk+Av0cYG17E+HPOtPCpfw76E4mJ/AZnJQ==} + react-dom@0.0.0-experimental-59aff3e1-20260918: + resolution: {integrity: sha512-pS/EavbBafpY1S2TsY5GNlFSvLWgWpHlMZeieXJirUgrBSOyRRHT+OAm+/Fptoll37aVVXKehJNZu36xs95p+g==} peerDependencies: - react: 0.0.0-experimental-ff8f88fc-20260915 + react: 0.0.0-experimental-59aff3e1-20260918 - react-dom@19.3.0-canary-ff8f88fc-20260915: - resolution: {integrity: sha512-VI2q2ZckvJPBeOJ0qd8G5Pv9TmRm2hO+eVZdiFLJIqN+Ad4tAfY+eETlzCQgWy+MrA2EYyJpbHQBmnzgl3qdpg==} + react-dom@19.3.0-canary-59aff3e1-20260918: + resolution: {integrity: sha512-GOzeGt2Fo3vxR85jzQsjnnVFWNgBjjIUkOJJEZDGwTvkv+FhNphmjN/JPkbB3nfvmRTUbla04glJvwpCkMv1bA==} peerDependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 - react-is@19.3.0-canary-ff8f88fc-20260915: - resolution: {integrity: sha512-ntHnebn3cZfEz7DWSXv6/G61Pyj2/uEE6EjjaQWygd39uTiLnjs5sJa3JkBcviwuuaTYcWVZ/jN0IoFbNU5yFw==} + react-is@19.3.0-canary-59aff3e1-20260918: + resolution: {integrity: sha512-/hpbyGifNI/kYCLHCQD5ZB1ct4S/IjS8ruTd+nkJ1wlADlXE2tyixBzie2yQVLGv36ZMyuknS0VPfFajQ+Qd3Q==} react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} @@ -16082,34 +16082,34 @@ packages: '@types/react': optional: true - react-server-dom-turbopack@0.0.0-experimental-ff8f88fc-20260915: - resolution: {integrity: sha512-0EuNxJbFhzpKJpf0dT49sPthmVzPRvA9Nz1uWMNCDgDYeSVm6H0oUejiYhOmd1G/iy9pFWlifMKLp+CL5V6MZg==} + react-server-dom-turbopack@0.0.0-experimental-59aff3e1-20260918: + resolution: {integrity: sha512-nmOwUU05iQ03TtNgb3MIev6LRpK1Ou05U6qKC3/cWbnDJ0+AigHp/1fyEm6WomNVgCORuNV8kGHff8rx2m0XAQ==} engines: {node: '>=0.10.0'} peerDependencies: - react: 0.0.0-experimental-ff8f88fc-20260915 - react-dom: 0.0.0-experimental-ff8f88fc-20260915 + react: 0.0.0-experimental-59aff3e1-20260918 + react-dom: 0.0.0-experimental-59aff3e1-20260918 - react-server-dom-turbopack@19.3.0-canary-ff8f88fc-20260915: - resolution: {integrity: sha512-eWq7v/eYI02nLI81snBg7k1XF0zyboljb6K+Ay1EZTQMbiDPYWfyh1aWjsmuz/RT/rFnyVVszPU3l4CJeJ5SNA==} + react-server-dom-turbopack@19.3.0-canary-59aff3e1-20260918: + resolution: {integrity: sha512-UHVw9AJgJmRQEZkJgxW0KLNqOLeBWRhyn3j59z42Tp+U8t3STxxqFVl9aqi+HWb3cJsUdDhB865VTv+4O3dm+Q==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918 - react-server-dom-webpack@0.0.0-experimental-ff8f88fc-20260915: - resolution: {integrity: sha512-L2Re6rH+XrlOS64P/stuGxEZWNXL9FDB8naN3D1WU7JXiiyS7hgPVTq9wJnsjqDaKbsivCIy1KMQbAZhlzQleQ==} + react-server-dom-webpack@0.0.0-experimental-59aff3e1-20260918: + resolution: {integrity: sha512-O18+1+7odEe6qZWBSeXzvIZkcuaFdbiWOFZbxHnhrz/MUA42z2vVRo2tsfuxRrE/SJcFplpAzUAQFtn2OprmKg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 0.0.0-experimental-ff8f88fc-20260915 - react-dom: 0.0.0-experimental-ff8f88fc-20260915 + react: 0.0.0-experimental-59aff3e1-20260918 + react-dom: 0.0.0-experimental-59aff3e1-20260918 webpack: 5.98.0 - react-server-dom-webpack@19.3.0-canary-ff8f88fc-20260915: - resolution: {integrity: sha512-feLyDZFSGNQNIjlS+uwSFUlDr3HMli30LRC28qJxK12Llx5sfYw3SH27ADauIxn6aSW1HmSkuRVIQqcHmUywmw==} + react-server-dom-webpack@19.3.0-canary-59aff3e1-20260918: + resolution: {integrity: sha512-/m+hN1U9awNXpGT9IyfZSV2eppRzW1d/1HGqR0KmJ1je5pNK5SU3I1E5Av7wzH9pPLKZSYCdsvL+mb9/df8zfg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918 webpack: 5.98.0 react-shallow-renderer@16.15.0: @@ -16160,12 +16160,12 @@ packages: react: ^15.3.0 || ^16.0.0-alpha react-dom: ^15.3.0 || ^16.0.0-alpha - react@0.0.0-experimental-ff8f88fc-20260915: - resolution: {integrity: sha512-R81scYyermJkqNBoMg6jD1usyOObT4Yp63JWqpseC0SiHgRcFeLDWCeQaxYx/e7mP//yXt5a9bD59bDwwE9EaA==} + react@0.0.0-experimental-59aff3e1-20260918: + resolution: {integrity: sha512-B+EGnQw6Qk96ZBSKLFjkn5usCpfncJ9cTV5j9g7V5bwXf1L8PobrbSnrSTIoMysbPFJaahLZDj6BnNTaUHlhbw==} engines: {node: '>=0.10.0'} - react@19.3.0-canary-ff8f88fc-20260915: - resolution: {integrity: sha512-OS1w6Lz8fpigUGYSAh7/+lcvDjpeWDiU6vFcDiOFLzsbuNpm9GoxJruFOcrgYXoTu6QtWgfkH+HSX4QdpRZ7MA==} + react@19.3.0-canary-59aff3e1-20260918: + resolution: {integrity: sha512-0aJqUn3iemtEkHP9YiXGi7DgH65zkSHygvW/k6mvRIZWI7UtInbh1Wtn52g1t1fVw6OkvuiKUOCw3DdypKsAUg==} engines: {node: '>=0.10.0'} read-all-stream@3.1.0: @@ -16697,11 +16697,11 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.0.0-experimental-ff8f88fc-20260915: - resolution: {integrity: sha512-lZaZemrtLrUcJe5PP2Bs8Tc9Vgi/vxcJhQpUVUjeBkduPlJIOK722UJgzgsp7kh+DArx5+x88Ry5lJE5savOBQ==} + scheduler@0.0.0-experimental-59aff3e1-20260918: + resolution: {integrity: sha512-K8LLV0QJ805HSgk+z4grxBOLMSsFIT7RWwj/6OUhuS89YtX6PVYHC5D0OkYaPY+CO+gxmlrJ57KutkQ+9yzSfw==} - scheduler@0.28.0-canary-ff8f88fc-20260915: - resolution: {integrity: sha512-2DAAwOAp3LR1jLx0Jtb4e+pMfbqsWRl5T0jvA0a7wnj/jOXJXXoUFr8+imvjQdoYiV2TOvdXA66p8dbyaWXUCw==} + scheduler@0.28.0-canary-59aff3e1-20260918: + resolution: {integrity: sha512-JFJcddYMFpIkafb2+Aa6KMjeT334ggmocP1LekKZZMPJddE7/piO+kIgduvcIll0F6VKGVVrWPkV2Z6vw2bZDw==} schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -20015,28 +20015,28 @@ snapshots: '@balena/dockerignore@1.0.2': {} - '@base-ui-components/react@1.0.0-beta.2(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@base-ui-components/react@1.0.0-beta.2(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@babel/runtime': 7.27.6 - '@base-ui-components/utils': 0.1.0(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) + '@base-ui-components/utils': 0.1.0(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) '@floating-ui/utils': 0.2.10 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) reselect: 5.1.1 tabbable: 6.2.0 - use-sync-external-store: 1.5.0(react@19.3.0-canary-ff8f88fc-20260915) + use-sync-external-store: 1.5.0(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 - '@base-ui-components/utils@0.1.0(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@base-ui-components/utils@0.1.0(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@babel/runtime': 7.27.6 '@floating-ui/utils': 0.2.10 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) reselect: 5.1.1 - use-sync-external-store: 1.5.0(react@19.3.0-canary-ff8f88fc-20260915) + use-sync-external-store: 1.5.0(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 @@ -20234,17 +20234,17 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@emotion/react@11.11.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@babel/runtime': 7.27.0 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.3.0-canary-ff8f88fc-20260915) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.3.0-canary-59aff3e1-20260918) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 transitivePeerDependencies: @@ -20262,9 +20262,9 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.3.0-canary-ff8f88fc-20260915)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 '@emotion/utils@1.2.1': {} @@ -20686,24 +20686,24 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@floating-ui/react-dom@2.1.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@floating-ui/dom': 1.7.3 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) - '@floating-ui/react-dom@2.1.5(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@floating-ui/react-dom@2.1.5(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@floating-ui/dom': 1.7.3 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) - '@floating-ui/react@0.26.16(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@floating-ui/react@0.26.16(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@floating-ui/react-dom': 2.1.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) + '@floating-ui/react-dom': 2.1.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) '@floating-ui/utils': 0.2.2 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) tabbable: 6.2.0 '@floating-ui/utils@0.2.10': {} @@ -21714,23 +21714,23 @@ snapshots: dependencies: call-bind: 1.0.8 - '@mantine/core@7.10.1(@mantine/hooks@7.10.1(react@19.3.0-canary-ff8f88fc-20260915))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@mantine/core@7.10.1(@mantine/hooks@7.10.1(react@19.3.0-canary-59aff3e1-20260918))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@floating-ui/react': 0.26.16(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@mantine/hooks': 7.10.1(react@19.3.0-canary-ff8f88fc-20260915) + '@floating-ui/react': 0.26.16(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@mantine/hooks': 7.10.1(react@19.3.0-canary-59aff3e1-20260918) clsx: 2.1.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) - react-number-format: 5.4.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - react-remove-scroll: 2.5.10(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react-textarea-autosize: 8.5.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) + react-number-format: 5.4.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + react-remove-scroll: 2.5.10(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react-textarea-autosize: 8.5.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) type-fest: 4.18.3 transitivePeerDependencies: - '@types/react' - '@mantine/hooks@7.10.1(react@19.3.0-canary-ff8f88fc-20260915)': + '@mantine/hooks@7.10.1(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 '@mapbox/node-pre-gyp@2.0.3(encoding@0.1.13)': dependencies: @@ -21775,17 +21775,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@2.2.1(react@19.3.0-canary-ff8f88fc-20260915)': + '@mdx-js/react@2.2.1(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.18 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 - '@mdx-js/react@3.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@mdx-js/react@3.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.18 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 '@modelcontextprotocol/sdk@1.18.1(patch_hash=680fe4edb7abd1de29d08cdf217a22506e815a8cc1c2282201d5d47aa3e5da12)': dependencies: @@ -22850,589 +22850,589 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-collection@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-context@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-context@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-context@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-context@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-context@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) aria-hidden: 1.2.6 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) - react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) + react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-direction@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-direction@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-direction@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-id@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-id@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-id@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-popover@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-popover@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) aria-hidden: 1.2.6 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) - react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) + react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) '@radix-ui/rect': 1.1.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-portal@1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-portal@1.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-slot': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-direction': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-direction': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) aria-hidden: 1.2.6 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) - react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) + react-remove-scroll: 2.7.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-slot@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-slot@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-slot@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-slot@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-slot@1.2.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-direction': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-direction': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-slot': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-size@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 '@types/react-dom': 19.2.4(@types/react@19.2.18) @@ -23739,12 +23739,12 @@ snapshots: '@storybook/addon-docs@8.6.0(@types/react@19.2.18)(storybook@8.6.0(prettier@3.6.2))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@storybook/blocks': 8.6.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2)) + '@mdx-js/react': 3.1.0(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@storybook/blocks': 8.6.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2)) '@storybook/csf-plugin': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2)) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2)) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) storybook: 8.6.0(prettier@3.6.2) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -23809,14 +23809,14 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.6.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2))': + '@storybook/blocks@8.6.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2))': dependencies: - '@storybook/icons': 1.3.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) + '@storybook/icons': 1.3.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) storybook: 8.6.0(prettier@3.6.2) ts-dedent: 2.2.0 optionalDependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) '@storybook/builder-webpack5@8.6.0(@rspack/core@1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/helpers@0.5.23))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': dependencies: @@ -23895,10 +23895,10 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@storybook/icons@1.3.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) '@storybook/instrumenter@8.6.0(storybook@8.6.0(prettier@3.6.2))': dependencies: @@ -23910,17 +23910,17 @@ snapshots: dependencies: storybook: 8.6.0(prettier@3.6.2) - '@storybook/preset-react-webpack@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': + '@storybook/preset-react-webpack@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': dependencies: '@storybook/core-webpack': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) + '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@6.0.2)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)) '@types/semver': 7.5.6 find-up: 5.0.0 magic-string: 0.30.19 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 react-docgen: 7.1.0 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) resolve: 1.22.10 semver: 7.6.3 storybook: 8.6.0(prettier@3.6.2) @@ -23954,19 +23954,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.6.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2))': + '@storybook/react-dom-shim@8.6.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2))': dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) storybook: 8.6.0(prettier@3.6.2) - '@storybook/react-webpack5@8.6.0(@rspack/core@1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/helpers@0.5.23))(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': + '@storybook/react-webpack5@8.6.0(@rspack/core@1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/helpers@0.5.23))(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': dependencies: '@storybook/builder-webpack5': 8.6.0(@rspack/core@1.6.7(patch_hash=4cf28ea116b0e27c7c80b09035905f9d16a7b18d1f2b7d312fc80d42cd57068d)(@swc/helpers@0.5.23))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) - '@storybook/preset-react-webpack': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) - '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + '@storybook/preset-react-webpack': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) + '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) storybook: 8.6.0(prettier@3.6.2) optionalDependencies: typescript: 6.0.2 @@ -23979,16 +23979,16 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': + '@storybook/react@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2))(typescript@6.0.2)': dependencies: '@storybook/components': 8.6.0(storybook@8.6.0(prettier@3.6.2)) '@storybook/global': 5.0.0 '@storybook/manager-api': 8.6.0(storybook@8.6.0(prettier@3.6.2)) '@storybook/preview-api': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(storybook@8.6.0(prettier@3.6.2)) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(storybook@8.6.0(prettier@3.6.2)) '@storybook/theming': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) storybook: 8.6.0(prettier@3.6.2) optionalDependencies: '@storybook/test': 8.6.0(storybook@8.6.0(prettier@3.6.2)) @@ -24270,13 +24270,13 @@ snapshots: lodash: 4.18.1 redent: 3.0.0 - '@testing-library/react@15.0.7(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)': + '@testing-library/react@15.0.7(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)': dependencies: '@babel/runtime': 7.27.0 '@testing-library/dom': 10.1.0 '@types/react-dom': 19.2.4(@types/react@19.2.18) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 @@ -26562,14 +26562,14 @@ snapshots: cmd-shim@7.0.0: {} - cmdk@1.0.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915): + cmdk@1.0.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918): dependencies: - '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915) - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) - use-sync-external-store: 1.5.0(react@19.3.0-canary-ff8f88fc-20260915) + '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.4(@types/react@19.2.18))(@types/react@19.2.18)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) + use-sync-external-store: 1.5.0(react@19.3.0-canary-59aff3e1-20260918) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -30002,7 +30002,7 @@ snapshots: hoist-non-react-statics@3.3.2: dependencies: - react-is: 19.3.0-canary-ff8f88fc-20260915 + react-is: 19.3.0-canary-59aff3e1-20260918 homedir-polyfill@1.0.3: dependencies: @@ -32220,13 +32220,13 @@ snapshots: lru-cache@7.18.3: {} - lucide-react@0.383.0(react@19.3.0-canary-ff8f88fc-20260915): + lucide-react@0.383.0(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 - lucide-react@0.554.0(react@19.3.0-canary-ff8f88fc-20260915): + lucide-react@0.554.0(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 lz-string@1.5.0: {} @@ -33434,23 +33434,23 @@ snapshots: dependencies: inherits: 2.0.4 - next-themes@0.4.6(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915): + next-themes@0.4.6(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) next-tick@1.0.0: {} - next@16.2.3(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-1371fcb-20260227)(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(sass@1.77.8): + next@16.2.3(@babel/core@7.26.10)(@opentelemetry/api@1.9.0)(@playwright/test@1.61.0)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-1371fcb-20260227)(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(sass@1.77.8): dependencies: '@next/env': 16.2.3 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.9.19 caniuse-lite: 1.0.30001746 postcss: 8.5.23 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) - styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) + styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@next/swc-darwin-arm64': 16.2.3 '@next/swc-darwin-x64': 16.2.3 @@ -35153,31 +35153,31 @@ snapshots: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-ff8f88fc-20260915 + react-is: 19.3.0-canary-59aff3e1-20260918 pretty-format@29.5.0: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-ff8f88fc-20260915 + react-is: 19.3.0-canary-59aff3e1-20260918 pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-ff8f88fc-20260915 + react-is: 19.3.0-canary-59aff3e1-20260918 pretty-format@30.0.0-alpha.6: dependencies: '@jest/schemas': 30.0.0-alpha.6 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-ff8f88fc-20260915 + react-is: 19.3.0-canary-59aff3e1-20260918 pretty-format@30.2.0: dependencies: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-ff8f88fc-20260915 + react-is: 19.3.0-canary-59aff3e1-20260918 pretty-ms@7.0.0: dependencies: @@ -35239,7 +35239,7 @@ snapshots: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 19.3.0-canary-ff8f88fc-20260915 + react-is: 19.3.0-canary-59aff3e1-20260918 property-information@5.6.0: dependencies: @@ -35462,157 +35462,157 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@0.0.0-experimental-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915): + react-dom@0.0.0-experimental-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - scheduler: 0.28.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 + scheduler: 0.28.0-canary-59aff3e1-20260918 - react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915): + react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - scheduler: 0.28.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 + scheduler: 0.28.0-canary-59aff3e1-20260918 - react-is@19.3.0-canary-ff8f88fc-20260915: {} + react-is@19.3.0-canary-59aff3e1-20260918: {} react-lifecycles-compat@3.0.4: {} - react-number-format@5.4.0(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915): + react-number-format@5.4.0(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918): dependencies: prop-types: 15.8.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) react-refresh@0.12.0: {} - react-remove-scroll-bar@2.3.6(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + react-remove-scroll-bar@2.3.6(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - react-remove-scroll-bar@2.3.8(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + react-remove-scroll-bar@2.3.8(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - react-remove-scroll@2.5.10(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + react-remove-scroll@2.5.10(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-remove-scroll-bar: 2.3.6(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react-style-singleton: 2.2.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-remove-scroll-bar: 2.3.6(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react-style-singleton: 2.2.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) tslib: 2.8.1 - use-callback-ref: 1.3.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - use-sidecar: 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + use-callback-ref: 1.3.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + use-sidecar: 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 - react-remove-scroll@2.7.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + react-remove-scroll@2.7.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + react-style-singleton: 2.2.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) - use-sidecar: 1.1.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + use-callback-ref: 1.3.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) + use-sidecar: 1.1.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 - react-server-dom-turbopack@0.0.0-experimental-ff8f88fc-20260915(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915): + react-server-dom-turbopack@0.0.0-experimental-59aff3e1-20260918(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) - react-server-dom-turbopack@19.3.0-canary-ff8f88fc-20260915(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915): + react-server-dom-turbopack@19.3.0-canary-59aff3e1-20260918(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) - react-server-dom-webpack@0.0.0-experimental-ff8f88fc-20260915(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))): + react-server-dom-webpack@0.0.0-experimental-59aff3e1-20260918(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23)) webpack-sources: 3.2.3(patch_hash=26afc15966a3fc37a3d1d366312a95ce66723513f6a3a720e4166a37147da8bd) - react-server-dom-webpack@19.3.0-canary-ff8f88fc-20260915(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))): + react-server-dom-webpack@19.3.0-canary-59aff3e1-20260918(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23)) webpack-sources: 3.2.3(patch_hash=26afc15966a3fc37a3d1d366312a95ce66723513f6a3a720e4166a37147da8bd) - react-shallow-renderer@16.15.0(react@19.3.0-canary-ff8f88fc-20260915): + react-shallow-renderer@16.15.0(react@19.3.0-canary-59aff3e1-20260918): dependencies: object-assign: 4.1.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-is: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 + react-is: 19.3.0-canary-59aff3e1-20260918 - react-ssr-prepass@1.0.8(react-is@19.3.0-canary-ff8f88fc-20260915)(react@19.3.0-canary-ff8f88fc-20260915): + react-ssr-prepass@1.0.8(react-is@19.3.0-canary-59aff3e1-20260918)(react@19.3.0-canary-59aff3e1-20260918): dependencies: object-is: 1.0.2 - react: 19.3.0-canary-ff8f88fc-20260915 - react-is: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 + react-is: 19.3.0-canary-59aff3e1-20260918 - react-style-singleton@2.2.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + react-style-singleton@2.2.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - react-style-singleton@2.2.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + react-style-singleton@2.2.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: get-nonce: 1.0.1 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - react-test-renderer@18.2.0(react@19.3.0-canary-ff8f88fc-20260915): + react-test-renderer@18.2.0(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - react-is: 19.3.0-canary-ff8f88fc-20260915 - react-shallow-renderer: 16.15.0(react@19.3.0-canary-ff8f88fc-20260915) - scheduler: 0.28.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 + react-is: 19.3.0-canary-59aff3e1-20260918 + react-shallow-renderer: 16.15.0(react@19.3.0-canary-59aff3e1-20260918) + scheduler: 0.28.0-canary-59aff3e1-20260918 - react-textarea-autosize@8.5.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + react-textarea-autosize@8.5.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: '@babel/runtime': 7.27.0 - react: 19.3.0-canary-ff8f88fc-20260915 - use-composed-ref: 1.3.0(react@19.3.0-canary-ff8f88fc-20260915) - use-latest: 1.2.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + use-composed-ref: 1.3.0(react@19.3.0-canary-59aff3e1-20260918) + use-latest: 1.2.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) transitivePeerDependencies: - '@types/react' - react-virtualized@9.22.3(react-dom@19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915))(react@19.3.0-canary-ff8f88fc-20260915): + react-virtualized@9.22.3(react-dom@19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918))(react@19.3.0-canary-59aff3e1-20260918): dependencies: '@babel/runtime': 7.27.0 clsx: 1.1.1 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.3.0-canary-ff8f88fc-20260915 - react-dom: 19.3.0-canary-ff8f88fc-20260915(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + react-dom: 19.3.0-canary-59aff3e1-20260918(react@19.3.0-canary-59aff3e1-20260918) react-lifecycles-compat: 3.0.4 - react@0.0.0-experimental-ff8f88fc-20260915: {} + react@0.0.0-experimental-59aff3e1-20260918: {} - react@19.3.0-canary-ff8f88fc-20260915: {} + react@19.3.0-canary-59aff3e1-20260918: {} read-all-stream@3.1.0: dependencies: @@ -36303,9 +36303,9 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.0.0-experimental-ff8f88fc-20260915: {} + scheduler@0.0.0-experimental-59aff3e1-20260918: {} - scheduler@0.28.0-canary-ff8f88fc-20260915: {} + scheduler@0.28.0-canary-59aff3e1-20260918: {} schema-utils@2.7.1: dependencies: @@ -37185,10 +37185,10 @@ snapshots: postcss: 8.5.23 postcss-load-plugins: 2.3.0 - styled-jsx@5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-ff8f88fc-20260915): + styled-jsx@5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-59aff3e1-20260918): dependencies: client-only: 0.0.1 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@babel/core': 7.26.10 babel-plugin-macros: 3.1.0 @@ -37288,11 +37288,11 @@ snapshots: '@swc/counter': 0.1.3 webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.23))(esbuild@0.25.9) - swr@2.2.4(react@19.3.0-canary-ff8f88fc-20260915): + swr@2.2.4(react@19.3.0-canary-59aff3e1-20260918): dependencies: client-only: 0.0.1 - react: 19.3.0-canary-ff8f88fc-20260915 - use-sync-external-store: 1.5.0(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + use-sync-external-store: 1.5.0(react@19.3.0-canary-59aff3e1-20260918) symbol-tree@3.2.4: {} @@ -38118,9 +38118,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unistore@3.4.1(react@19.3.0-canary-ff8f88fc-20260915): + unistore@3.4.1(react@19.3.0-canary-59aff3e1-20260918): optionalDependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 universal-github-app-jwt@1.1.1: dependencies: @@ -38237,56 +38237,56 @@ snapshots: punycode: 1.4.1 qs: 6.14.0 - use-callback-ref@1.3.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + use-callback-ref@1.3.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + use-callback-ref@1.3.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - use-composed-ref@1.3.0(react@19.3.0-canary-ff8f88fc-20260915): + use-composed-ref@1.3.0(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 - use-isomorphic-layout-effect@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + use-isomorphic-layout-effect@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 optionalDependencies: '@types/react': 19.2.18 - use-latest@1.2.1(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + use-latest@1.2.1(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 - use-isomorphic-layout-effect: 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915) + react: 19.3.0-canary-59aff3e1-20260918 + use-isomorphic-layout-effect: 1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918) optionalDependencies: '@types/react': 19.2.18 - use-sidecar@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + use-sidecar@1.1.2(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: detect-node-es: 1.1.0 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - use-sidecar@1.1.3(@types/react@19.2.18)(react@19.3.0-canary-ff8f88fc-20260915): + use-sidecar@1.1.3(@types/react@19.2.18)(react@19.3.0-canary-59aff3e1-20260918): dependencies: detect-node-es: 1.1.0 - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.18 - use-sync-external-store@1.5.0(react@19.3.0-canary-ff8f88fc-20260915): + use-sync-external-store@1.5.0(react@19.3.0-canary-59aff3e1-20260918): dependencies: - react: 19.3.0-canary-ff8f88fc-20260915 + react: 19.3.0-canary-59aff3e1-20260918 util-deprecate@1.0.2: {} From c20c1d4125b5a3548207a17619837ae590fc187b Mon Sep 17 00:00:00 2001 From: Josh Story Date: Sun, 20 Sep 2026 23:28:03 -0700 Subject: [PATCH 3/3] Use structural React keys during server rendering (#98944) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Use structural React keys during server rendering so an HTML prerender can resume without rewriting React's postponed state when route params become known. Browser keys and router-cache identity are unchanged. For example, `/products/[slug]` previously prerendered layout boundaries with a key containing an opaque slug placeholder. Resuming `/products/shoe` produced a different key, so Next.js substituted `shoe` into the serialized React state before handing it back to React. Both server passes now use `slug|d`. The browser still uses `slug|shoe|d`, preserving template remounts and back/forward state behavior. The server only renders the active entry at each layout-router position, so it does not need parameter values to distinguish cached browser entries. React keys are not embedded in the HTML; hydration derives its concrete keys from the request's route state. - Use segment name/type for server layout keys and structural route paths for the server head key. Server keys always omit search params. The existing browser-module variant mechanism selects the concrete key implementation for browser bundles in both Webpack and Turbopack. - Remove placeholder substitution and the request-params argument from postponed-state parsing. Persist only fallback param names for render staging; React's postponed state no longer needs to be searched or rewritten. - Simplify the remaining opaque fallback map to param name → placeholder. Its dynamic-param type slot is unused after removing interpolation. Parameter wrappers still control suspension; this does not make unknown params available to application code. - Test server and browser keys directly, including catch-all/intercepted segments and search params. Update the action-only resume fixture's single assertion on the resume-metadata format so its three cases reach their behavioral checks for action execution, revalidation, and `notFound()` with names-only metadata. This refactor is independently landable against `canary` and is now the base of the parameter-matching stack: #98944 → #98891 → #98892 → #98893 → #97393. It supersedes #98890. It retains internal opaque placeholders but removes their role in matching React's postponed state. No new integration fixtures are needed. ## Verification Latest cleanup: - 126 focused unit tests and 4 snapshots pass in both default and Cache Components/Webpack configurations. - 34 production Webpack tests pass across `fallback-shells`, `partial-fallback-shell-upgrade`, `action-only-fallback-resume-data-cache`, and `resuming-head-runtime-search-param`; 4 existing tests remain skipped. The three action-only resume cases now reach and pass their behavioral assertions. Earlier commits also passed existing production and dev Webpack coverage for back/forward state, template remounts, base-path params, nested/parallel/intercepted routes, form-state hydration, and standalone/edge output. A reviewer verified this head under Turbopack using a native binary built from the same commit: a broader unit selection passed (144 tests, the focused set above plus the remaining router-reducer suites), the `packages/next` type check was clean, and 33 production e2e tests passed across `fallback-shells`, `partial-fallback-shell-upgrade`, and `action-only-fallback-resume-data-cache`. --- .../next-core/src/browser_variant_modules.rs | 1 + .../next/src/build/browser-variant-modules.ts | 1 + .../next/src/client/components/app-router.tsx | 12 +- .../src/client/components/layout-router.tsx | 17 +- .../create-segment-key.browser.ts | 3 + .../router-reducer/create-segment-key.test.ts | 85 +++++++++ .../router-reducer/create-segment-key.ts | 19 ++ .../reducers/find-head-in-cache.ts | 21 ++- .../next/src/server/app-render/app-render.tsx | 15 +- .../server/app-render/postponed-state.test.ts | 165 +++++++++++------- .../src/server/app-render/postponed-state.ts | 89 ++++------ .../work-unit-async-storage.external.ts | 2 +- .../src/server/async-storage/request-store.ts | 5 +- packages/next/src/server/lib/params-utils.ts | 6 +- .../server/request/fallback-params.test.ts | 23 ++- .../src/server/request/fallback-params.ts | 51 +----- packages/next/src/server/request/params.ts | 3 +- .../router/utils/get-dynamic-param.test.ts | 12 +- .../lib/router/utils/get-dynamic-param.ts | 4 +- ...on-only-fallback-resume-data-cache.test.ts | 3 +- 20 files changed, 307 insertions(+), 230 deletions(-) create mode 100644 packages/next/src/client/components/router-reducer/create-segment-key.browser.ts create mode 100644 packages/next/src/client/components/router-reducer/create-segment-key.test.ts create mode 100644 packages/next/src/client/components/router-reducer/create-segment-key.ts diff --git a/crates/next-core/src/browser_variant_modules.rs b/crates/next-core/src/browser_variant_modules.rs index 133ef25ace48..5d308c4ac4c0 100644 --- a/crates/next-core/src/browser_variant_modules.rs +++ b/crates/next-core/src/browser_variant_modules.rs @@ -14,6 +14,7 @@ pub static BROWSER_VARIANT_MODULES: &[&str] = &[ "client/components/instant-samples", "client/components/instant-validation/impl", "client/components/navigation-dynamic-rendering", + "client/components/router-reducer/create-segment-key", "client/components/server-async-storage", "client/components/unstable-rethrow", ]; diff --git a/packages/next/src/build/browser-variant-modules.ts b/packages/next/src/build/browser-variant-modules.ts index 45563cf7153f..ac550ccc9b3b 100644 --- a/packages/next/src/build/browser-variant-modules.ts +++ b/packages/next/src/build/browser-variant-modules.ts @@ -10,6 +10,7 @@ export const browserVariantModules = [ 'client/components/instant-samples', 'client/components/instant-validation/impl', 'client/components/navigation-dynamic-rendering', + 'client/components/router-reducer/create-segment-key', 'client/components/server-async-storage', 'client/components/unstable-rethrow', ] as const diff --git a/packages/next/src/client/components/app-router.tsx b/packages/next/src/client/components/app-router.tsx index 38d0de60071f..00d29f3e6b7c 100644 --- a/packages/next/src/client/components/app-router.tsx +++ b/packages/next/src/client/components/app-router.tsx @@ -498,17 +498,9 @@ function Router({ // // The `key` is used to remount the component whenever the head moves to // a different segment. - const [headCacheNode, headKey, headKeyWithoutSearchParams] = matchingHead + const [headCacheNode, headKey] = matchingHead - head = ( - - ) + head = } else { head = null } diff --git a/packages/next/src/client/components/layout-router.tsx b/packages/next/src/client/components/layout-router.tsx index eb8f269c23ea..829d00ea265a 100644 --- a/packages/next/src/client/components/layout-router.tsx +++ b/packages/next/src/client/components/layout-router.tsx @@ -36,7 +36,7 @@ import { InstantValidationBoundaryContext, RenderValidationBoundaryAtThisLevel, } from './instant-validation/boundary' -import { createRouterCacheKey } from './router-reducer/create-router-cache-key' +import { createSegmentKey } from './router-reducer/create-segment-key' import { useRouterBFCache, type RouterBFCacheEntry, @@ -564,11 +564,13 @@ export default function OuterLayoutRouter({ [parallelRouterKey] : parentSegmentPath.concat([parentTreeSegment, parallelRouterKey]) - // The "state" key of a segment is the one passed to React — it represents the - // identity of the UI tree. Whenever the state key changes, the tree is - // recreated and the state is reset. In the App Router model, search params do - // not cause state to be lost, so two segments with the same segment path but - // different search params should have the same state key. + // The "state" key of a segment is the one passed to React. In the browser it + // represents the identity of the UI tree. Whenever the state key changes, + // the tree is recreated and the state is reset. In the App Router model, + // search params do not cause state to be lost, so two segments with the same + // segment path but different search params should have the same state key. + // On the server, the key describes the segment's structure instead, so it + // stays the same when unknown params become known during HTML resume. // // The "cache" key of a segment, however, *does* include the search params, if // it's possible that the segment accessed the search params on the server. @@ -591,7 +593,7 @@ export default function OuterLayoutRouter({ const activeSegment = activeTree[0] const activeCacheNode = maybeParentSlots![parallelRouterKey] ?? null - const activeStateKey = createRouterCacheKey(activeSegment, true) // no search params + const activeStateKey = createSegmentKey(activeSegment, true) // no search params // At each level of the route tree, not only do we render the currently // active segment — we also render the last N segments that were active at @@ -610,7 +612,6 @@ export default function OuterLayoutRouter({ const cacheNode = bfcacheEntry.cacheNode const stateKey = bfcacheEntry.stateKey const segment = tree[0] - /* - Error boundary - Only renders error boundary if error component is provided. diff --git a/packages/next/src/client/components/router-reducer/create-segment-key.browser.ts b/packages/next/src/client/components/router-reducer/create-segment-key.browser.ts new file mode 100644 index 000000000000..d8fb04c7c25f --- /dev/null +++ b/packages/next/src/client/components/router-reducer/create-segment-key.browser.ts @@ -0,0 +1,3 @@ +// In the browser, React keys include concrete params so navigation preserves +// or resets component state according to the segment's actual identity. +export { createRouterCacheKey as createSegmentKey } from './create-router-cache-key' diff --git a/packages/next/src/client/components/router-reducer/create-segment-key.test.ts b/packages/next/src/client/components/router-reducer/create-segment-key.test.ts new file mode 100644 index 000000000000..21258e220fc7 --- /dev/null +++ b/packages/next/src/client/components/router-reducer/create-segment-key.test.ts @@ -0,0 +1,85 @@ +import { createRouterCacheKey } from './create-router-cache-key' +import { createSegmentKey } from './create-segment-key' +import { createSegmentKey as createBrowserSegmentKey } from './create-segment-key.browser' + +describe('createSegmentKey on the server', () => { + it.each(['d', 'c', 'oc', 'di(.)', 'ci(.)'] as const)( + 'keeps %s keys stable between prerendering and resuming', + (paramType) => { + const fallbackKey = createSegmentKey([ + 'slug', + '%%drp:slug:abc123%%', + paramType, + null, + ]) + + expect(fallbackKey).toBe(`slug|${paramType}`) + expect(createSegmentKey(['slug', 'first', paramType, null])).toBe( + fallbackKey + ) + expect(createSegmentKey(['slug', 'second/third', paramType, null])).toBe( + fallbackKey + ) + } + ) + + it('distinguishes param names and segment types', () => { + const keys = [ + createSegmentKey(['slug', 'value', 'd', null]), + createSegmentKey(['other', 'value', 'd', null]), + createSegmentKey(['slug', 'value', 'c', null]), + createSegmentKey(['slug', 'value', 'oc', null]), + createSegmentKey(['slug', 'value', 'di(.)', null]), + createSegmentKey(['slug', 'value', 'ci(.)', null]), + ] + + expect(new Set(keys).size).toBe(keys.length) + }) + + it.each(['', 'catalog', '__DEFAULT__', '__PAGE__'])( + 'preserves the static segment %j', + (segment) => { + expect(createSegmentKey(segment)).toBe(segment) + } + ) + + it.each([undefined, false, true])( + 'always omits search params, even with withoutSearchParameters=%s', + (withoutSearchParameters) => { + expect( + createSegmentKey('__PAGE__?{"q":"first"}', withoutSearchParameters) + ).toBe('__PAGE__') + expect( + createSegmentKey('__PAGE__?{"q":"second"}', withoutSearchParameters) + ).toBe('__PAGE__') + } + ) +}) + +describe('createSegmentKey in the browser', () => { + it('re-exports the router cache key implementation', () => { + expect(createBrowserSegmentKey).toBe(createRouterCacheKey) + }) + + it.each(['d', 'c', 'oc', 'di(.)', 'ci(.)'] as const)( + 'includes concrete param values in %s keys', + (paramType) => { + expect(createBrowserSegmentKey(['slug', 'first', paramType, null])).toBe( + `slug|first|${paramType}` + ) + expect( + createBrowserSegmentKey(['slug', 'second/third', paramType, null]) + ).toBe(`slug|second/third|${paramType}`) + } + ) + + it.each([undefined, false, true])( + 'respects withoutSearchParameters=%s', + (withoutSearchParameters) => { + const segment = '__PAGE__?{"q":"first"}' + expect(createBrowserSegmentKey(segment, withoutSearchParameters)).toBe( + withoutSearchParameters ? '__PAGE__' : segment + ) + } + ) +}) diff --git a/packages/next/src/client/components/router-reducer/create-segment-key.ts b/packages/next/src/client/components/router-reducer/create-segment-key.ts new file mode 100644 index 000000000000..540f1ea7a11a --- /dev/null +++ b/packages/next/src/client/components/router-reducer/create-segment-key.ts @@ -0,0 +1,19 @@ +import type { Segment } from '../../../shared/lib/app-router-types' +import { createRouterCacheKey } from './create-router-cache-key' + +// React uses these keys to find suspended subtrees when resuming HTML. They +// must be the same before and after route params and search params are known. +// The browser uses the concrete keys instead, so navigation still resets or +// preserves state as appropriate. Its bundle uses create-segment-key.browser.ts. +// React keys are not embedded in the HTML. +export function createSegmentKey( + segment: Segment, + // Server keys always omit search params, regardless of this browser option. + _withoutSearchParameters?: boolean +): string { + if (Array.isArray(segment)) { + return `${segment[0]}|${segment[2]}` + } + + return createRouterCacheKey(segment, true) +} diff --git a/packages/next/src/client/components/router-reducer/reducers/find-head-in-cache.ts b/packages/next/src/client/components/router-reducer/reducers/find-head-in-cache.ts index 296aea9fbb5a..f6e8f0a7bea8 100644 --- a/packages/next/src/client/components/router-reducer/reducers/find-head-in-cache.ts +++ b/packages/next/src/client/components/router-reducer/reducers/find-head-in-cache.ts @@ -3,25 +3,24 @@ import type { CacheNode, } from '../../../../shared/lib/app-router-types' import { DEFAULT_SEGMENT_KEY } from '../../../../shared/lib/segment' -import { createRouterCacheKey } from '../create-router-cache-key' +import { createSegmentKey } from '../create-segment-key' export function findHeadInCache( cache: CacheNode, parallelRoutes: FlightRouterState[1] -): [CacheNode, string, string] | null { - return findHeadInCacheImpl(cache, parallelRoutes, '', '') +): [CacheNode, string] | null { + return findHeadInCacheImpl(cache, parallelRoutes, '') } function findHeadInCacheImpl( cache: CacheNode, parallelRoutes: FlightRouterState[1], - keyPrefix: string, - keyPrefixWithoutSearchParams: string -): [CacheNode, string, string] | null { + keyPrefix: string +): [CacheNode, string] | null { const isLastItem = Object.keys(parallelRoutes).length === 0 if (isLastItem) { // Returns the entire Cache Node of the segment whose head we will render. - return [cache, keyPrefix, keyPrefixWithoutSearchParams] + return [cache, keyPrefix] } // First try the 'children' parallel route if it exists @@ -50,14 +49,14 @@ function findHeadInCacheImpl( continue } - const cacheKey = createRouterCacheKey(segment) - const cacheKeyWithoutSearchParams = createRouterCacheKey(segment, true) + // This key identifies the Head component, not a cache entry. On the + // server it must match even when resuming with previously unknown params. + const segmentKey = createSegmentKey(segment) const item = findHeadInCacheImpl( childCacheNode, childParallelRoutes, - keyPrefix + '/' + cacheKey, - keyPrefix + '/' + cacheKeyWithoutSearchParams + keyPrefix + '/' + segmentKey ) if (item) { diff --git a/packages/next/src/server/app-render/app-render.tsx b/packages/next/src/server/app-render/app-render.tsx index 4f2310da3c19..aa6d73100024 100644 --- a/packages/next/src/server/app-render/app-render.tsx +++ b/packages/next/src/server/app-render/app-render.tsx @@ -3007,10 +3007,16 @@ async function renderAppPage( null const rootParams = getRootParams(loaderTree, ctx.getDynamicParamFromSegment) + // Keep the placeholder map for dev's separate prerender validation. The + // request store only needs names to defer params during a staged render. const stagedFallbackParams = + getRequestMeta(req, 'stagedFallbackParams') ?? null + const stagedFallbackParamNames = postponedState?.stagedFallbackParams !== undefined ? postponedState.stagedFallbackParams - : (getRequestMeta(req, 'stagedFallbackParams') ?? null) + : stagedFallbackParams + ? new Set(stagedFallbackParams.keys()) + : null const hmrRefreshHash = getRequestMeta(req, 'hmrRefreshHash') const createRequestStore = createRequestStoreForRender.bind( @@ -3025,7 +3031,7 @@ async function renderAppPage( isHmrRefresh, serverComponentsHmrCache, renderResumeDataCache, - stagedFallbackParams, + stagedFallbackParamNames, hmrRefreshHash ) const requestStore = createRequestStore() @@ -3354,7 +3360,6 @@ function prepareAppPage( } else { postponedState = parsePostponedState( renderOpts.postponed, - interpolatedParams, renderOpts.experimental.maxPostponedStateSizeBytes, renderOpts.experimental.disableResumeDataCacheCompression ) @@ -6768,7 +6773,9 @@ export async function runValidationInDevFromSnapshot( isHmrRefresh: message.request.isHmrRefresh, hmrRefreshHash: message.request.hmrRefreshHash, serverComponentsHmrCache: undefined, - stagedFallbackParams: fallbackRouteParams, + stagedFallbackParams: fallbackRouteParams + ? new Set(fallbackRouteParams.keys()) + : null, }) const staticInputs = toDevValidationInputs(message.staticInputs, requestStore) diff --git a/packages/next/src/server/app-render/postponed-state.test.ts b/packages/next/src/server/app-render/postponed-state.test.ts index d1288763736c..502674bc1183 100644 --- a/packages/next/src/server/app-render/postponed-state.test.ts +++ b/packages/next/src/server/app-render/postponed-state.test.ts @@ -14,15 +14,13 @@ import { parseResumeDataCacheFromPostponedState, parsePostponedState, DynamicHTMLPreludeState, + isEmptyHTMLPrelude, } from './postponed-state' -import type { - OpaqueFallbackRouteParams, - OpaqueFallbackRouteParamValue, -} from '../request/fallback-params' +import type { OpaqueFallbackRouteParams } from '../request/fallback-params' import { CachedRouteKind } from '../response-cache/types' export function createMockOpaqueFallbackRouteParams( - params: Record + params: Record ): OpaqueFallbackRouteParams { return new Map(Object.entries(params)) } @@ -33,7 +31,7 @@ describe('getDynamicHTMLPostponedState', () => { it('serializes a HTML postponed state with fallback params', async () => { const key = '%%drp:slug:e9615126684e5%%' const fallbackRouteParams = createMockOpaqueFallbackRouteParams({ - slug: [key, 'd'], + slug: key, }) const prerenderResumeDataCache = createPrerenderResumeDataCache() @@ -56,23 +54,24 @@ describe('getDynamicHTMLPostponedState', () => { ) const state = await getDynamicHTMLPostponedState( - { [key]: key, nested: { [key]: key } } as any, + { key: 'slug|d', nested: { key: 'slug|d' } } as any, DynamicHTMLPreludeState.Full, fallbackRouteParams, prerenderResumeDataCache, isCacheComponentsEnabled ) - const parsed = parsePostponedState(state, { slug: '123' }, undefined) + const parsed = parsePostponedState(state, undefined) + expect(state).not.toContain(key) expect(parsed).toMatchInlineSnapshot(` { "data": [ 1, { - "123": "123", + "key": "slug|d", "nested": { - "123": "123", + "key": "slug|d", }, }, ], @@ -86,11 +85,8 @@ describe('getDynamicHTMLPostponedState', () => { "imageResponses": Map {}, "mutable": false, }, - "stagedFallbackParams": Map { - "slug" => [ - "%%drp:slug:e9615126684e5%%", - "d", - ], + "stagedFallbackParams": Set { + "slug", }, "type": 2, } @@ -114,39 +110,46 @@ describe('getDynamicHTMLPostponedState', () => { expect(state).toMatchInlineSnapshot(`"19:[1,{"key":"value"}]null"`) }) - it('can serialize and deserialize a HTML postponed state with fallback params', async () => { - const key = '%%drp:slug:e9615126684e5%%' - const fallbackRouteParams = createMockOpaqueFallbackRouteParams({ - slug: [key, 'd'], - }) - const state = await getDynamicHTMLPostponedState( - { [key]: key } as any, - DynamicHTMLPreludeState.Full, - fallbackRouteParams, - createPrerenderResumeDataCache(), - isCacheComponentsEnabled - ) - - const value = 'hello' - const params = { slug: value } - const parsed = parsePostponedState(state, params, undefined) - expect(parsed).toEqual({ - type: DynamicState.HTML, - stagedFallbackParams: fallbackRouteParams, - data: [1, { [value]: value }], - renderResumeDataCache: { - cache: new Map(), - fetch: new Map(), - encryptedBoundArgs: new Map(), - decryptedBoundArgs: new Map(), - imageResponses: new Map(), - mutable: false, - }, - }) + it.each(['d', 'c', 'oc'] as const)( + 'only persists param names when resuming an HTML state with %s params', + async (paramType) => { + const key = '%%drp:slug:e9615126684e5%%' + const fallbackRouteParams = createMockOpaqueFallbackRouteParams({ + slug: key, + }) + const postponed = { + replayNodes: [['Context.Provider', `slug|${paramType}`, [], null]], + } + const state = await getDynamicHTMLPostponedState( + postponed as any, + DynamicHTMLPreludeState.Full, + fallbackRouteParams, + createPrerenderResumeDataCache(), + isCacheComponentsEnabled + ) - // The replacements have been replaced. - expect(JSON.stringify(parsed)).not.toMatch(key) - }) + const dataString = JSON.stringify([ + DynamicHTMLPreludeState.Full, + postponed, + ]) + const postponedString = `8["slug"]${dataString}` + expect(state).toBe(`${postponedString.length}:${postponedString}null`) + const parsed = parsePostponedState(state, undefined) + expect(parsed).toEqual({ + type: DynamicState.HTML, + stagedFallbackParams: new Set(['slug']), + data: [1, postponed], + renderResumeDataCache: { + cache: new Map(), + fetch: new Map(), + encryptedBoundArgs: new Map(), + decryptedBoundArgs: new Map(), + imageResponses: new Map(), + mutable: false, + }, + }) + } + ) }) describe('getDynamicDataPostponedState', () => { @@ -163,8 +166,9 @@ describe('getDynamicDataPostponedState', () => { expect(state).toBe( fallbackRouteParams === undefined ? '4:nullnull' : '7:2[]nullnull' ) - const parsed = parsePostponedState(state, {}, undefined) + const parsed = parsePostponedState(state, undefined) expect(parsed.type).toBe(DynamicState.DATA) + expect(isEmptyHTMLPrelude(state)).toBe(false) expect(parsed.stagedFallbackParams).toBe( fallbackRouteParams === undefined ? undefined : null ) @@ -175,7 +179,7 @@ describe('getDynamicDataPostponedState', () => { 'serializes and parses fallback params and a cache (disableResumeDataCacheCompression: %s)', async (disableResumeDataCacheCompression) => { const fallbackRouteParams = createMockOpaqueFallbackRouteParams({ - slug: ['%%drp:slug:e9615126684e5%%', 'd'], + slug: '%%drp:slug:e9615126684e5%%', }) const resumeDataCache = createPrerenderResumeDataCache() resumeDataCache.fetch.set('cache-key', { @@ -201,7 +205,7 @@ describe('getDynamicDataPostponedState', () => { ) expect(state).toBe( - `51:45[["slug",["%%drp:slug:e9615126684e5%%","d"]]]null${ + `13:8["slug"]null${ disableResumeDataCacheCompression ? serializedResumeDataCache : deflateResumeDataCache(serializedResumeDataCache) @@ -210,12 +214,12 @@ describe('getDynamicDataPostponedState', () => { const parsed = parsePostponedState( state, - { slug: '123' }, undefined, disableResumeDataCacheCompression ) expect(parsed.type).toBe(DynamicState.DATA) - expect(parsed.stagedFallbackParams).toEqual(fallbackRouteParams) + expect(isEmptyHTMLPrelude(state)).toBe(false) + expect(parsed.stagedFallbackParams).toEqual(new Set(['slug'])) expect(parsed.renderResumeDataCache.fetch.get('cache-key')).toEqual( resumeDataCache.fetch.get('cache-key') ) @@ -272,11 +276,44 @@ describe('getDynamicDataPostponedState', () => { }) }) +describe('isEmptyHTMLPrelude', () => { + it.each([DynamicHTMLPreludeState.Empty, DynamicHTMLPreludeState.Full])( + 'reads prelude state %s independently of the fallback names', + async (preludeState) => { + for (const fallbackRouteParams of [ + null, + new Map(), + createMockOpaqueFallbackRouteParams({ + category: '%%drp:category:1%%', + parts: '%%drp:parts:1%%', + }), + ]) { + const state = await getDynamicHTMLPostponedState( + { key: 'category|d' } as any, + preludeState, + fallbackRouteParams, + createPrerenderResumeDataCache(), + isCacheComponentsEnabled + ) + + expect(isEmptyHTMLPrelude(state)).toBe( + preludeState === DynamicHTMLPreludeState.Empty + ) + expect( + parsePostponedState(state, undefined).stagedFallbackParams + ).toEqual( + fallbackRouteParams?.size ? new Set(['category', 'parts']) : null + ) + } + } + ) +}) + describe('parseResumeDataCacheFromPostponedState', () => { it('extracts the resume data cache without parsing the React state', async () => { const key = '%%drp:slug:e9615126684e5%%' const fallbackRouteParams = createMockOpaqueFallbackRouteParams({ - slug: [key, 'd'], + slug: key, }) const prerenderResumeDataCache = createPrerenderResumeDataCache() @@ -321,17 +358,17 @@ describe('parseResumeDataCacheFromPostponedState', () => { describe('parsePostponedState', () => { it('parses a HTML postponed state with fallback params', () => { - const state = `2593:39[["slug","%%drp:slug:e9615126684e5%%"]][1,{"t":2,"d":{"nextSegmentId":2,"rootFormatContext":{"insertionMode":0,"selectedValue":null,"tagScope":0},"progressiveChunkSize":12800,"resumableState":{"idPrefix":"","nextFormID":0,"streamingFormat":0,"instructions":0,"hasBody":true,"hasHtml":true,"unknownResources":{},"dnsResources":{},"connectResources":{"default":{},"anonymous":{},"credentials":{}},"imageResources":{},"styleResources":{},"scriptResources":{"/_next/static/chunks/webpack-6b2534a6458c6fe5.js":null,"/_next/static/chunks/f5e865f6-5e04edf75402c5e9.js":null,"/_next/static/chunks/9440-26a4cfbb73347735.js":null,"/_next/static/chunks/main-app-315ef55d588dbeeb.js":null,"/_next/static/chunks/8630-8e01a4bea783c651.js":null,"/_next/static/chunks/app/layout-1b900e1a3caf3737.js":null},"moduleUnknownResources":{},"moduleScriptResources":{"/_next/static/chunks/webpack-6b2534a6458c6fe5.js":null}},"replayNodes":[["oR",0,[["Context.Provider",0,[["ServerInsertedHTMLProvider",0,[["Context.Provider",0,[["n7",0,[["nU",0,[["nF",0,[["n9",0,[["Fragment",0,[["Context.Provider",2,[["Context.Provider",0,[["Context.Provider",0,[["Context.Provider",0,[["Context.Provider",0,[["Context.Provider",0,[["nY",0,[["nX",0,[["Fragment","c",[["Fragment",0,[["html",1,[["body",0,[["main",3,[["j",0,[["Fragment",0,[["Context.Provider","validation",[["i",2,[["Fragment",0,[["E",0,[["R",0,[["h",0,[["Fragment",0,[["O",0,[["Fragment",0,[["s",0,[["c",0,[["s",0,[["c",0,[["v",0,[["Context.Provider",0,[["Fragment","c",[["j",1,[["Fragment",0,[["Context.Provider","slug|%%drp:slug:e9615126684e5%%|d",[["i",2,[["Fragment",0,[["E",0,[["R",0,[["h",0,[["Fragment",0,[["O",0,[["Fragment",0,[["s",0,[["Fragment",0,[["s",0,[["c",0,[["v",0,[["Context.Provider",0,[["Fragment","c",[["j",1,[["Fragment",0,[["Context.Provider","__PAGE__",[["i",2,[["Fragment",0,[["E",0,[["R",0,[["h",0,[["Fragment",0,[["O",0,[["Suspense",0,[["s",0,[["Fragment",0,[["s",0,[["c",0,[["v",0,[["Context.Provider",0,[["Fragment","c",[["Fragment",0,[],{"1":1}]],null]],null]],null]],null]],null]],null]],null]],null,["Suspense Fallback",0,[],null],0]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],null]],"replaySlots":null}}]null` - const params = { - slug: Math.random().toString(16).slice(3), - } - const parsed = parsePostponedState(state, params, undefined) + const state = `68:8["slug"][1,{"replayNodes":[["Context.Provider","slug|d",[],null]]}]null` + const parsed = parsePostponedState(state, undefined) // Ensure that it parsed it correctly. expect(parsed).toEqual({ type: DynamicState.HTML, - stagedFallbackParams: new Map([['slug', '%%drp:slug:e9615126684e5%%']]), - data: expect.any(Object), + stagedFallbackParams: new Set(['slug']), + data: [ + DynamicHTMLPreludeState.Full, + { replayNodes: [['Context.Provider', 'slug|d', [], null]] }, + ], renderResumeDataCache: { cache: new Map(), fetch: new Map(), @@ -341,15 +378,11 @@ describe('parsePostponedState', () => { mutable: false, }, }) - - // Ensure that the replacement worked and removed all the placeholders. - expect(JSON.stringify(parsed)).not.toMatch(/%%drp:slug:e9615126684e5%%/) }) it('parses a HTML postponed state without fallback params', () => { const state = `2:{}null` - const params = {} - const parsed = parsePostponedState(state, params, undefined) + const parsed = parsePostponedState(state, undefined) // Ensure that it parsed it correctly. expect(parsed).toEqual({ @@ -369,7 +402,7 @@ describe('parsePostponedState', () => { it('parses a legacy data postponed state', () => { const state = '4:nullnull' - const parsed = parsePostponedState(state, {}, undefined) + const parsed = parsePostponedState(state, undefined) // Ensure that it parsed it correctly. expect(parsed).toEqual({ diff --git a/packages/next/src/server/app-render/postponed-state.ts b/packages/next/src/server/app-render/postponed-state.ts index 92bd81eb6910..9e2d12e4c51f 100644 --- a/packages/next/src/server/app-render/postponed-state.ts +++ b/packages/next/src/server/app-render/postponed-state.ts @@ -1,9 +1,4 @@ -import type { - OpaqueFallbackRouteParamEntries, - OpaqueFallbackRouteParams, -} from '../../server/request/fallback-params' -import { getDynamicParam } from '../../shared/lib/router/utils/get-dynamic-param' -import type { Params } from '../request/params' +import type { OpaqueFallbackRouteParams } from '../request/fallback-params' import { createPrerenderResumeDataCache, createRenderResumeDataCache, @@ -39,7 +34,7 @@ export type DynamicDataPostponedState = { * metadata when this field is absent. `null` explicitly means no fallback * params. */ - readonly stagedFallbackParams?: OpaqueFallbackRouteParams | null + readonly stagedFallbackParams?: ReadonlySet | null /** * The immutable resume data cache. @@ -61,7 +56,7 @@ export type DynamicHTMLPostponedState = { * this set, and `null` means the prerender had no fallback params. Unlike the * data state, it never falls back to request metadata. */ - readonly stagedFallbackParams: OpaqueFallbackRouteParams | null + readonly stagedFallbackParams: ReadonlySet | null /** * The postponed data used by React. @@ -148,13 +143,15 @@ export async function getDynamicHTMLPostponedState( ) } - const replacements: OpaqueFallbackRouteParamEntries = Array.from( - fallbackRouteParams.entries() + const fallbackParamsString = JSON.stringify( + Array.from(fallbackRouteParams.keys()) ) - const replacementsString = JSON.stringify(replacements) - // Serialized as `` - const postponedString = `${replacementsString.length}${replacementsString}${dataString}` + // Render staging only needs to know which params were unknown. Their opaque + // placeholders and types aren't needed to resume, since React's server keys + // don't depend on param values. + // Serialized as `` + const postponedString = `${fallbackParamsString.length}${fallbackParamsString}${dataString}` // Serialized as `:` return serializePostponedState( @@ -175,14 +172,13 @@ export async function getDynamicDataPostponedState( ): Promise { let postponedString = 'null' if (fallbackRouteParams !== undefined) { - const replacements: OpaqueFallbackRouteParamEntries = fallbackRouteParams - ? Array.from(fallbackRouteParams.entries()) - : [] - const replacementsString = JSON.stringify(replacements) - - // An empty replacements table records that this shell has no fallback - // params. - postponedString = `${replacementsString.length}${replacementsString}null` + const fallbackParamsString = JSON.stringify( + fallbackRouteParams ? Array.from(fallbackRouteParams.keys()) : [] + ) + + // Record the unknown param names even when React has no HTML to resume. + // An empty array explicitly records that this shell has no fallback params. + postponedString = `${fallbackParamsString.length}${fallbackParamsString}null` } return serializePostponedState( @@ -248,7 +244,6 @@ export function parseResumeDataCacheFromPostponedState( export function parsePostponedState( state: string, - interpolatedParams: Params, maxPostponedStateSizeBytes: number | undefined, disableResumeDataCacheCompression = false ): PostponedState { @@ -275,19 +270,19 @@ export function parsePostponedState( ) } - // This is the length of the replacements entries. + // This is the length of the serialized fallback params. const length = parseInt(match) - const replacements = JSON.parse( + const fallbackParamNames = JSON.parse( postponedString.slice( match.length, // We then go to the end of the string. match.length + length ) - ) as OpaqueFallbackRouteParamEntries + ) as string[] const stagedFallbackParams = - replacements.length > 0 ? new Map(replacements) : null + fallbackParamNames.length > 0 ? new Set(fallbackParamNames) : null - let postponed = postponedString.slice(match.length + length) + const postponed = postponedString.slice(match.length + length) if (postponed === 'null') { return { type: DynamicState.DATA, @@ -296,29 +291,6 @@ export function parsePostponedState( } } - for (const [ - segmentKey, - [searchValue, dynamicParamType], - ] of replacements) { - const { - treeSegment: [ - , - // This is the same value that'll be used in the postponed state - // as it's part of the tree data. That's why we use it as the - // replacement value. - value, - ], - } = getDynamicParam( - interpolatedParams, - segmentKey, - dynamicParamType, - null, - null // staticSiblings not needed for postponed state - ) - - postponed = postponed.replaceAll(searchValue, value) - } - return { type: DynamicState.HTML, stagedFallbackParams, @@ -412,9 +384,8 @@ export function getPostponedFromState(state: DynamicHTMLPostponedState) { * dynamic hole (a blocking dynamic API at the root with no Suspense boundary * above it). Returns false for dynamic-data states or unparseable input. * - * Unlike `parsePostponedState`, this does not interpolate fallback route params - * or build a resume data cache: it only reads the prelude marker, which is - * independent of param values. The Instant Navigation Testing API uses this to + * Unlike `parsePostponedState`, this does not build a resume data cache: it only + * reads the prelude marker. The Instant Navigation Testing API uses this to * detect the blank-document case in both dev (fresh render) and production * (prebuilt shell), where the marker is persisted in the postponed state. */ @@ -436,16 +407,16 @@ export function isEmptyHTMLPrelude(state: string): boolean { return false } - // An optional `` prefix carries fallback route param - // replacements; skip it to reach the `[preludeState, postponed]` data. + // An optional `` prefix records the unknown params; + // skip it to reach the `[preludeState, postponed]` data. if (/^[0-9]/.test(postponedString)) { - const replacementsLengthMatch = postponedString.match(/^([0-9]*)/)?.[1] - if (!replacementsLengthMatch) { + const fallbackParamsLengthMatch = postponedString.match(/^([0-9]*)/)?.[1] + if (!fallbackParamsLengthMatch) { return false } - const replacementsLength = parseInt(replacementsLengthMatch) + const fallbackParamsLength = parseInt(fallbackParamsLengthMatch) postponedString = postponedString.slice( - replacementsLengthMatch.length + replacementsLength + fallbackParamsLengthMatch.length + fallbackParamsLength ) } diff --git a/packages/next/src/server/app-render/work-unit-async-storage.external.ts b/packages/next/src/server/app-render/work-unit-async-storage.external.ts index a9a76996be42..c06f5fd7f9fe 100644 --- a/packages/next/src/server/app-render/work-unit-async-storage.external.ts +++ b/packages/next/src/server/app-render/work-unit-async-storage.external.ts @@ -102,7 +102,7 @@ export interface RequestStore extends CommonWorkUnitStore { * These params resolve after the static stage without replacing their * concrete values. */ - stagedFallbackParams?: OpaqueFallbackRouteParams | null + stagedFallbackParams?: ReadonlySet | null varyParamsAccumulator?: ResponseVaryParamsAccumulator | null // Only in build-time instant-validation or when rendering diff --git a/packages/next/src/server/async-storage/request-store.ts b/packages/next/src/server/async-storage/request-store.ts index af3d759c2f71..e3b7e72300b8 100644 --- a/packages/next/src/server/async-storage/request-store.ts +++ b/packages/next/src/server/async-storage/request-store.ts @@ -28,7 +28,6 @@ import type { ServerComponentsHmrCache } from '../response-cache' import type { ResumeDataCache } from '../resume-data-cache/resume-data-cache' import type { Params } from '../request/params' import type { ImplicitTags } from '../lib/implicit-tags' -import type { OpaqueFallbackRouteParams } from '../request/fallback-params' /** * Internal request headers that userland `headers()` must not expose. They stay @@ -146,7 +145,7 @@ export type RequestStoreInputs = { * edit, for every client, regardless of whether it runs the HMR client. */ hmrRefreshHash: string | undefined - stagedFallbackParams: OpaqueFallbackRouteParams | null | undefined + stagedFallbackParams: ReadonlySet | null | undefined } /** @@ -193,7 +192,7 @@ export function createRequestStoreForRender( isHmrRefresh: RequestContext['isHmrRefresh'], serverComponentsHmrCache: RequestContext['serverComponentsHmrCache'], resumeDataCache: ResumeDataCache | null, - stagedFallbackParams: OpaqueFallbackRouteParams | null, + stagedFallbackParams: ReadonlySet | null, hmrRefreshHash: string | undefined ): RequestStore { return createRequestStore({ diff --git a/packages/next/src/server/lib/params-utils.ts b/packages/next/src/server/lib/params-utils.ts index 5b785fc87e06..ac257ddf87ec 100644 --- a/packages/next/src/server/lib/params-utils.ts +++ b/packages/next/src/server/lib/params-utils.ts @@ -22,7 +22,11 @@ export function isEmptyParams(params: Params): boolean { export function hasFallbackRouteParams( underlyingParams: Params, - fallbackParams: OpaqueFallbackRouteParams | null | undefined + fallbackParams: + | OpaqueFallbackRouteParams + | ReadonlySet + | null + | undefined ): boolean { if (fallbackParams) { for (let key in underlyingParams) { diff --git a/packages/next/src/server/request/fallback-params.test.ts b/packages/next/src/server/request/fallback-params.test.ts index 5b81f2be6173..baa00e0af490 100644 --- a/packages/next/src/server/request/fallback-params.test.ts +++ b/packages/next/src/server/request/fallback-params.test.ts @@ -55,8 +55,8 @@ describe('createOpaqueFallbackRouteParams', () => { it('get method works correctly', () => { const result = createOpaqueFallbackRouteParams(fallbackParams)! - expect(result.get('slug')?.[0]).toMatch(/^%%drp:slug:[a-f0-9]+%%$/) - expect(result.get('modal')?.[0]).toMatch(/^%%drp:modal:[a-f0-9]+%%$/) + expect(result.get('slug')).toMatch(/^%%drp:slug:[a-f0-9]+%%$/) + expect(result.get('modal')).toMatch(/^%%drp:modal:[a-f0-9]+%%$/) expect(result.get('nonexistent')).toBeUndefined() expect(result.get('')).toBeUndefined() }) @@ -67,7 +67,7 @@ describe('createOpaqueFallbackRouteParams', () => { const entries = Array.from(result.entries()) expect(entries).toHaveLength(2) - const [name, [value]] = entries[0] + const [name, value] = entries[0] expect(name).toBe('slug') expect(value).toMatch(/^%%drp:slug:[a-f0-9]+%%$/) }) @@ -132,7 +132,7 @@ describe('getFallbackRouteParams', () => { expect(result).not.toBeNull() expect(result!.has('slug')).toBe(true) - expect(result!.get('slug')?.[1]).toBe('d') // 'd' = dynamic (short type) + expect(result!.get('slug')).toMatch(/^%%drp:slug:[a-f0-9]+%%$/) }) it('should extract multiple nested dynamic segments', () => { @@ -149,8 +149,8 @@ describe('getFallbackRouteParams', () => { expect(result!.size).toBe(2) expect(result!.has('category')).toBe(true) expect(result!.has('slug')).toBe(true) - expect(result!.get('category')?.[1]).toBe('d') - expect(result!.get('slug')?.[1]).toBe('d') + expect(result!.get('category')).toMatch(/^%%drp:category:[a-f0-9]+%%$/) + expect(result!.get('slug')).toMatch(/^%%drp:slug:[a-f0-9]+%%$/) }) it('should extract catchall segment', () => { @@ -162,7 +162,7 @@ describe('getFallbackRouteParams', () => { expect(result).not.toBeNull() expect(result!.size).toBe(1) expect(result!.has('slug')).toBe(true) - expect(result!.get('slug')?.[1]).toBe('c') // 'c' = catchall + expect(result!.get('slug')).toMatch(/^%%drp:slug:[a-f0-9]+%%$/) }) it('should extract optional catchall segment', () => { @@ -178,7 +178,7 @@ describe('getFallbackRouteParams', () => { expect(result).not.toBeNull() expect(result!.size).toBe(1) expect(result!.has('slug')).toBe(true) - expect(result!.get('slug')?.[1]).toBe('oc') // 'oc' = optional-catchall + expect(result!.get('slug')).toMatch(/^%%drp:slug:[a-f0-9]+%%$/) }) it('should extract mixed static and dynamic segments', () => { @@ -407,8 +407,7 @@ describe('getFallbackRouteParams', () => { expect(result).not.toBeNull() expect(result!.size).toBe(1) expect(result!.has('photoId')).toBe(true) - // Should have intercepted type - expect(result!.get('photoId')?.[1]).toBe('di(.)') // 'di(.)' = dynamic-intercepted-(.)' + expect(result!.get('photoId')).toMatch(/^%%drp:photoId:[a-f0-9]+%%$/) }) }) @@ -640,7 +639,7 @@ describe('getFallbackRouteParams', () => { expect(result).not.toBeNull() expect(result!.size).toBe(1) expect(result!.has('slug')).toBe(true) - expect(result!.get('slug')?.[1]).toBe('c') // catchall + expect(result!.get('slug')).toMatch(/^%%drp:slug:[a-f0-9]+%%$/) }) it('should handle optional catchall in parallel route', () => { @@ -654,7 +653,7 @@ describe('getFallbackRouteParams', () => { expect(result).not.toBeNull() expect(result!.size).toBe(1) expect(result!.has('optional')).toBe(true) - expect(result!.get('optional')?.[1]).toBe('oc') // optional-catchall + expect(result!.get('optional')).toMatch(/^%%drp:optional:[a-f0-9]+%%$/) result = getFallbackRouteParams('/sidebar/is/real', routeModule) expect(result).toBeNull() diff --git a/packages/next/src/server/request/fallback-params.ts b/packages/next/src/server/request/fallback-params.ts index 1823f229b1d7..96c95ae51446 100644 --- a/packages/next/src/server/request/fallback-params.ts +++ b/packages/next/src/server/request/fallback-params.ts @@ -1,49 +1,16 @@ import { resolveRouteParamsFromTree } from '../../build/static-paths/utils' import type { FallbackRouteParam } from '../../build/static-paths/types' -import type { DynamicParamTypesShort } from '../../shared/lib/app-router-types' -import { dynamicParamTypes } from '../app-render/get-short-dynamic-param-type' import type AppPageRouteModule from '../route-modules/app-page/module' import { parseNormalizedAppRoute } from '../../shared/lib/router/routes/app' import { extractPathnameRouteParamSegmentsFromLoaderTree } from '../../build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree' import { getParamProperties } from '../../shared/lib/router/utils/get-segment-param' import { InvariantError } from '../../shared/lib/invariant-error' -export type OpaqueFallbackRouteParamValue = [ - /** - * The search value of the fallback route param. This is the opaque key - * that will be used to replace the dynamic param in the postponed state. - */ - searchValue: string, - - /** - * The dynamic param type of the fallback route param. This is the type of - * the dynamic param that will be used to replace the dynamic param in the - * postponed state. - */ - dynamicParamType: DynamicParamTypesShort, -] - /** - * An opaque fallback route params object. This is used to store the fallback - * route params in a way that is not easily accessible to the client. - */ -export type OpaqueFallbackRouteParams = ReadonlyMap< - string, - OpaqueFallbackRouteParamValue -> - -/** - * The entries of the opaque fallback route params object. - * - * @param key the key of the fallback route param - * @param value the value of the fallback route param + * Maps unknown param names to internal placeholders. The parameter wrappers + * control when reads suspend; these placeholders must not become rendered UI. */ -export type OpaqueFallbackRouteParamEntries = - ReturnType extends MapIterator< - [infer K, infer V] - > - ? ReadonlyArray<[K, V]> - : never +export type OpaqueFallbackRouteParams = ReadonlyMap /** * Creates an opaque fallback route params object from the fallback route params. @@ -62,15 +29,12 @@ export function createOpaqueFallbackRouteParams( // be also be unique. const uniqueID = Math.random().toString(16).slice(2) - const keys = new Map() + const keys = new Map() // Generate a unique key for the fallback route param, if this key is found // in the static output, it represents a bug in cache components. - for (const { paramName, paramType } of fallbackRouteParams) { - keys.set(paramName, [ - `%%drp:${paramName}:${uniqueID}%%`, - dynamicParamTypes[paramType], - ]) + for (const { paramName } of fallbackRouteParams) { + keys.set(paramName, `%%drp:${paramName}:${uniqueID}%%`) } return keys @@ -196,7 +160,6 @@ export function getFallbackRouteParams( fallbackRouteParams // Will be mutated to add route params ) - // Convert the fallback route params to an opaque format that can be safely - // used in the postponed state without exposing implementation details. + // Track the unknown params using the same opaque placeholders as prerenders. return createOpaqueFallbackRouteParams(fallbackRouteParams) } diff --git a/packages/next/src/server/request/params.ts b/packages/next/src/server/request/params.ts index 8cd4564d4597..c38cea5d543c 100644 --- a/packages/next/src/server/request/params.ts +++ b/packages/next/src/server/request/params.ts @@ -2,7 +2,6 @@ import { workAsyncStorage, type WorkStore, } from '../app-render/work-async-storage.external' -import type { OpaqueFallbackRouteParams } from './fallback-params' import type { VaryParamsAccumulator } from '../app-render/vary-params' import { createVaryingParams, @@ -663,7 +662,7 @@ function createRenderParamsInProd(userspaceParams: Params): Promise { function createRenderParamsInDev( underlyingParams: Params, userpaceParams: Params, - stagedFallbackParams: OpaqueFallbackRouteParams | null | undefined, + stagedFallbackParams: ReadonlySet | null | undefined, workStore: WorkStore, requestStore: RequestStore ): Promise { diff --git a/packages/next/src/shared/lib/router/utils/get-dynamic-param.test.ts b/packages/next/src/shared/lib/router/utils/get-dynamic-param.test.ts index f6fe278a3b42..9c1000fa4cf8 100644 --- a/packages/next/src/shared/lib/router/utils/get-dynamic-param.test.ts +++ b/packages/next/src/shared/lib/router/utils/get-dynamic-param.test.ts @@ -130,7 +130,7 @@ describe('getDynamicParam', () => { it('should handle parallel routes with fallback params for catchall', () => { const params: Params = { category: 'electronics' } const fallbackParams = createMockOpaqueFallbackRouteParams({ - slug: ['%%drp:slug:parallel123%%', 'd'], + slug: '%%drp:slug:parallel123%%', }) const result = getDynamicParam(params, 'slug', 'd', fallbackParams, null) @@ -197,7 +197,7 @@ describe('getDynamicParam', () => { it('should use fallback param value when available', () => { const params: Params = { slug: 'original-value' } const fallbackParams = createMockOpaqueFallbackRouteParams({ - slug: ['%%drp:slug:abc123%%', 'd'], + slug: '%%drp:slug:abc123%%', }) const result = getDynamicParam(params, 'slug', 'd', fallbackParams, null) @@ -213,7 +213,7 @@ describe('getDynamicParam', () => { it('should not encode fallback param values', () => { const params: Params = { slug: 'hello world' } const fallbackParams = createMockOpaqueFallbackRouteParams({ - slug: ['%%drp:slug:xyz789%%', 'd'], + slug: '%%drp:slug:xyz789%%', }) const result = getDynamicParam(params, 'slug', 'd', fallbackParams, null) @@ -224,7 +224,7 @@ describe('getDynamicParam', () => { it('should use fallback params with catchall routes', () => { const params: Params = { slug: ['docs', 'api'] } const fallbackParams = createMockOpaqueFallbackRouteParams({ - slug: ['%%drp:slug:def456%%', 'c'], + slug: '%%drp:slug:def456%%', }) const result = getDynamicParam(params, 'slug', 'c', fallbackParams, null) @@ -240,7 +240,7 @@ describe('getDynamicParam', () => { it('should use fallback params with optional catchall routes', () => { const params: Params = {} const fallbackParams = createMockOpaqueFallbackRouteParams({ - slug: ['%%drp:slug:ghi789%%', 'oc'], + slug: '%%drp:slug:ghi789%%', }) const result = getDynamicParam(params, 'slug', 'oc', fallbackParams, null) @@ -256,7 +256,7 @@ describe('getDynamicParam', () => { it('should fall back to regular encoding when param not in fallback', () => { const params: Params = { slug: 'hello world' } const fallbackParams = createMockOpaqueFallbackRouteParams({ - other: ['%%drp:other:abc123%%', 'd'], + other: '%%drp:other:abc123%%', }) const result = getDynamicParam(params, 'slug', 'd', fallbackParams, null) diff --git a/packages/next/src/shared/lib/router/utils/get-dynamic-param.ts b/packages/next/src/shared/lib/router/utils/get-dynamic-param.ts index 094d158acfc2..26350f79b75c 100644 --- a/packages/next/src/shared/lib/router/utils/get-dynamic-param.ts +++ b/packages/next/src/shared/lib/router/utils/get-dynamic-param.ts @@ -28,8 +28,8 @@ function getParamValue( if (fallbackRouteParams?.has(segmentKey)) { // We know that the fallback route params has the segment key because we // checked that above. - const [searchValue] = fallbackRouteParams.get(segmentKey)! - value = searchValue + const placeholder = fallbackRouteParams.get(segmentKey)! + value = placeholder } else if (Array.isArray(value)) { value = value.map((i) => encodeURIComponent(i)) } else if (typeof value === 'string') { diff --git a/test/production/app-dir/action-only-fallback-resume-data-cache/action-only-fallback-resume-data-cache.test.ts b/test/production/app-dir/action-only-fallback-resume-data-cache/action-only-fallback-resume-data-cache.test.ts index 01db86b982d3..c3893eaae227 100644 --- a/test/production/app-dir/action-only-fallback-resume-data-cache/action-only-fallback-resume-data-cache.test.ts +++ b/test/production/app-dir/action-only-fallback-resume-data-cache/action-only-fallback-resume-data-cache.test.ts @@ -66,7 +66,8 @@ describe('action-only fallback resume data cache', () => { const metadata = await next.readJSON(`.next/server/app${route}.meta`) const postponed = metadata.postponed as string expect(postponed).toEqual(expect.any(String)) - expect(postponed).toMatch(/^\d+:\d+\[\["id",/) + // Resume metadata records which params are deferred, not their placeholders. + expect(postponed).toMatch(/^\d+:\d+\["id"\]\[/) const manifest = await next.readJSON( '.next/server/server-reference-manifest.json'