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/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/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/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