Fix getPageContext({ asyncHook: true }) returning different proxy than usePageContext() #2880
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In production builds with streaming,
getPageContext({ asyncHook: true })was returning a different proxy object thanusePageContext(), causing assertion failures in tests.Root cause: The sync hook's
globalObject.pageContextis cleared on the next microtask. When React renders asynchronously, the async hook fallback was creating a new proxy instead of returning the cached one.Changes
Store proxy in async store during hook execution (
execHook.ts): The proxied pageContext is now stored in_asyncStore.pageContextwhen hooks execute, ensuring the same proxy is available later.Return cached proxy if available (
getHttpRequestAsyncStore.ts): Check_isProxyObjectbefore creating a new proxy; return the stored proxy directly if already proxied.Type-safe helper function: Extracted
storeProxyInAsyncStore()with proper type guard to avoid duplication andas anycasts.✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.