From b690af094678622f03670348e627d6f9f53ff036 Mon Sep 17 00:00:00 2001 From: Luke Sandberg Date: Mon, 26 Jan 2026 12:42:15 -0800 Subject: [PATCH 01/11] Reapply "[turbopack] Add bundling support for worker_threads" (#88725) (#88967) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What? This PR reapplies #87746 which adds bundling support for Node.js `worker_threads` in Turbopack. ## Why? The original PR (#87746) was reverted in #88725 because it broke builds that use packages like `pino` with transports. These packages use dynamic patterns like `join(__dirname, 'lib', 'worker.js')` to resolve worker entry points, which can match non-evaluatable files like `package.json` or `tsconfig.json`. ## How? This PR reapplies the original changes with the following fixes: 1. **Downgrade errors to warnings in tracing contexts**: When `loose_errors` is enabled (tracing mode) or `in_try` is true, worker entry point validation errors are now emitted as warnings instead of errors. This follows the established Turbopack pattern used in `handle_resolve_error` and other resolve error handling. 2. **Improved error messages**: Error messages for non-chunkable and non-evaluatable worker entry point modules now include: - The module identifier (so you can see which file caused the issue) - The issue source location (pointing to the `new Worker()` call in source code) 3. **Added regression test**: A new pino-based test case exercises the `thread-stream` worker pattern that caused the original failure. This test runs in `CodeGenerationAndTracing` mode via `test-start-turbo`. ## Changes from original PR - Added `source` field to `CodeGenerationIssue` to support showing issue source locations - Added `get_issue_severity()` helper that checks `loose_errors` and `in_try` to determine severity - Fixed typo: `"SharedbWorker"` → `"SharedWorker"` in `to_string` implementation - Added pino regression test in `test/e2e/app-dir/node-worker-threads/` ## Testing - ✅ `pnpm test-dev-turbo test/e2e/app-dir/node-worker-threads/` - all tests pass - ✅ `pnpm test-start-turbo test/e2e/app-dir/node-worker-threads/` - all tests pass (exercises bundling mode) - ✅ Verified test fails without the `loose_errors` fix - ✅ Verified vercel-docs build succeeds with warnings instead of errors --- .rustfmt.toml | 1 + crates/next-api/src/middleware.rs | 8 +- crates/next-api/src/nft_json.rs | 20 +- .../app/api/pino-test/route.ts | 32 ++ .../app/api/simple-worker-test/route.ts | 41 +++ .../app/api/worker-test/route.ts | 62 ++++ .../node-worker-threads/app/layout.tsx | 11 + .../app/worker-dir/simple-worker.ts | 9 + .../node-worker-threads.test.ts | 51 +++ .../turbopack-browser/src/chunking_context.rs | 25 +- .../crates/turbopack-cli/src/build/mod.rs | 2 +- .../turbopack-cli/src/dev/web_entry_source.rs | 2 +- .../crates/turbopack-core/src/context.rs | 6 +- .../turbopack-core/src/issue/code_gen.rs | 12 +- .../crates/turbopack-core/src/resolve/mod.rs | 2 +- .../turbopack-core/src/resolve/origin.rs | 7 +- .../turbopack-ecmascript/src/chunk/item.rs | 1 + .../crates/turbopack-ecmascript/src/lib.rs | 7 +- .../src/references/external_module.rs | 2 +- .../src/references/mod.rs | 77 +++-- .../src/references/node.rs | 99 +----- .../src/references/pattern_mapping.rs | 2 + .../src/references/worker.rs | 327 ++++++++++++++---- .../src/typescript/mod.rs | 7 +- .../turbopack-ecmascript/src/webpack/mod.rs | 3 +- .../src/worker_chunk/chunk_item.rs | 209 ++++++++--- .../src/worker_chunk/mod.rs | 3 + .../src/worker_chunk/module.rs | 43 ++- .../src/worker_chunk/worker_type.rs | 37 ++ .../turbopack-nodejs/src/chunking_context.rs | 47 +-- .../src/ecmascript/node/entry/chunk.rs | 2 +- .../turbopack-resolve/src/ecmascript.rs | 6 +- .../turbopack-resolve/src/typescript.rs | 2 +- .../src/noop_asset_context.rs | 1 - .../crates/turbopack-tests/tests/execution.rs | 2 + .../basic/worker-threads/input/index.js | 81 +++++ .../basic/worker-threads/input/math-worker.js | 8 + .../worker-threads/input/string-worker.js | 8 + .../basic/worker-threads/input/worker.js | 11 + turbopack/crates/turbopack/src/lib.rs | 1 - 40 files changed, 931 insertions(+), 346 deletions(-) create mode 100644 test/e2e/app-dir/node-worker-threads/app/api/pino-test/route.ts create mode 100644 test/e2e/app-dir/node-worker-threads/app/api/simple-worker-test/route.ts create mode 100644 test/e2e/app-dir/node-worker-threads/app/api/worker-test/route.ts create mode 100644 test/e2e/app-dir/node-worker-threads/app/layout.tsx create mode 100644 test/e2e/app-dir/node-worker-threads/app/worker-dir/simple-worker.ts create mode 100644 test/e2e/app-dir/node-worker-threads/node-worker-threads.test.ts create mode 100644 turbopack/crates/turbopack-ecmascript/src/worker_chunk/worker_type.rs create mode 100644 turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/index.js create mode 100644 turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/math-worker.js create mode 100644 turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/string-worker.js create mode 100644 turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/worker.js diff --git a/.rustfmt.toml b/.rustfmt.toml index 75b28121a6d21..5a94000280194 100644 --- a/.rustfmt.toml +++ b/.rustfmt.toml @@ -1,3 +1,4 @@ +edition = "2024" max_width = 100 comment_width = 100 diff --git a/crates/next-api/src/middleware.rs b/crates/next-api/src/middleware.rs index 2b87d3709c3a4..168f917daf909 100644 --- a/crates/next-api/src/middleware.rs +++ b/crates/next-api/src/middleware.rs @@ -14,10 +14,7 @@ use turbo_tasks::{Completion, ResolvedVc, Vc}; use turbo_tasks_fs::{self, File, FileContent, FileSystemPath}; use turbopack_core::{ asset::AssetContent, - chunk::{ - ChunkingContext, ChunkingContextExt, EntryChunkGroupResult, - availability_info::AvailabilityInfo, - }, + chunk::{ChunkingContextExt, EntryChunkGroupResult, availability_info::AvailabilityInfo}, context::AssetContext, module::Module, module_graph::{ @@ -138,7 +135,7 @@ impl MiddlewareEndpoint { }; let EntryChunkGroupResult { asset: chunk, .. } = *chunking_context - .entry_chunk_group( + .root_entry_chunk_group( this.project .node_root() .await? @@ -147,7 +144,6 @@ impl MiddlewareEndpoint { module_graph, OutputAssets::empty(), OutputAssets::empty(), - AvailabilityInfo::root(), ) .await?; Ok(*chunk) diff --git a/crates/next-api/src/nft_json.rs b/crates/next-api/src/nft_json.rs index 95eb96cca73e0..8ee2847832a4b 100644 --- a/crates/next-api/src/nft_json.rs +++ b/crates/next-api/src/nft_json.rs @@ -76,9 +76,6 @@ impl OutputAsset for NftJsonAsset { } } -#[turbo_tasks::value(transparent)] -pub struct OutputSpecifier(Option); - fn get_output_specifier( path_ref: &FileSystemPath, ident_folder: &FileSystemPath, @@ -97,9 +94,8 @@ fn get_output_specifier( .get_relative_path_to(path_ref) .unwrap()); } - // This should effectively be unreachable - bail!("NftJsonAsset: cannot handle filepath {path_ref}"); + bail!("NftJsonAsset: cannot handle filepath '{path_ref}'"); } /// Apply outputFileTracingIncludes patterns to find additional files @@ -285,13 +281,23 @@ impl Asset for NftJsonAsset { } } - let specifier = get_output_specifier( + let specifier = match get_output_specifier( &referenced_chunk_path, &ident_folder, &ident_folder_in_project_fs, &output_root_ref, &project_root_ref, - )?; + ) { + Ok(specifier) => specifier, + Err(err) => { + return Err(err.context(format!( + "NftJsonAsset: cannot handle filepath '{chunk_path}' for \ + {referenced_chunk:?} it is not under the output_root: \ + '{output_root_ref}' or the project_root: '{project_root_ref}'", + chunk_path = referenced_chunk_path.value_to_string().await? + ))); + } + }; result.insert(specifier); } diff --git a/test/e2e/app-dir/node-worker-threads/app/api/pino-test/route.ts b/test/e2e/app-dir/node-worker-threads/app/api/pino-test/route.ts new file mode 100644 index 0000000000000..9a0838d016d84 --- /dev/null +++ b/test/e2e/app-dir/node-worker-threads/app/api/pino-test/route.ts @@ -0,0 +1,32 @@ +import { NextResponse } from 'next/server' +import pino from 'pino' + +export async function GET() { + try { + // Create a pino logger with a transport + // This internally uses thread-stream which creates worker_threads + const logger = pino({ + transport: { + target: 'pino/file', + options: { destination: 1 }, // stdout + }, + }) + + // Log a test message - this triggers the transport worker + logger.info('pino test message') + + // Flush the logger to ensure the message is sent + // Use nextTick to allow async initialization of the transport + await new Promise((resolve) => process.nextTick(resolve)) + + return NextResponse.json({ + success: true, + message: 'pino logger with transport initialized successfully', + }) + } catch (error) { + return NextResponse.json( + { success: false, error: String(error) }, + { status: 500 } + ) + } +} diff --git a/test/e2e/app-dir/node-worker-threads/app/api/simple-worker-test/route.ts b/test/e2e/app-dir/node-worker-threads/app/api/simple-worker-test/route.ts new file mode 100644 index 0000000000000..424514a3e6c7a --- /dev/null +++ b/test/e2e/app-dir/node-worker-threads/app/api/simple-worker-test/route.ts @@ -0,0 +1,41 @@ +import { Worker } from 'node:worker_threads' +import { NextResponse } from 'next/server' + +export async function GET() { + try { + // Test with a relative path instead of __filename + const worker = new Worker('./app/worker-dir/simple-worker.ts') + + const message = await new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + reject(new Error('Worker timeout')) + }, 5000) + + worker.on('message', (msg) => { + clearTimeout(timeout) + resolve(msg) + }) + worker.on('error', (err) => { + clearTimeout(timeout) + reject(err) + }) + worker.on('exit', (code) => { + if (code !== 0) { + clearTimeout(timeout) + reject(new Error(`Worker stopped with exit code ${code}`)) + } + }) + + worker.postMessage('ping') + }) + + await worker.terminate() + + return NextResponse.json({ success: true, message }) + } catch (error) { + return NextResponse.json( + { success: false, error: String(error) }, + { status: 500 } + ) + } +} diff --git a/test/e2e/app-dir/node-worker-threads/app/api/worker-test/route.ts b/test/e2e/app-dir/node-worker-threads/app/api/worker-test/route.ts new file mode 100644 index 0000000000000..89038954af4a5 --- /dev/null +++ b/test/e2e/app-dir/node-worker-threads/app/api/worker-test/route.ts @@ -0,0 +1,62 @@ +import { Worker, isMainThread, parentPort } from 'node:worker_threads' +import { NextResponse } from 'next/server' + +// This file tests self-referencing worker threads using __filename +// This pattern is used by libraries like @duckdb/duckdb-wasm + +if (!isMainThread && parentPort) { + // Worker thread - handle messages + parentPort.on('message', (msg) => { + if (msg === 'ping') { + parentPort!.postMessage('pong') + } + }) +} + +export async function GET() { + if (!isMainThread) { + // If we're in a worker, don't try to create another worker + return NextResponse.json({ error: 'Already in worker' }, { status: 500 }) + } + + // Log __filename for debugging + console.log('__filename:', __filename) + console.log('typeof __filename:', typeof __filename) + + try { + // Create a worker using __filename - this is the pattern that triggers the cycle bug + const worker = new Worker(__filename) + + const message = await new Promise((resolve, reject) => { + const timeout = setTimeout(() => { + reject(new Error('Worker timeout')) + }, 5000) + + worker.on('message', (msg) => { + clearTimeout(timeout) + resolve(msg) + }) + worker.on('error', (err) => { + clearTimeout(timeout) + reject(err) + }) + worker.on('exit', (code) => { + if (code !== 0) { + clearTimeout(timeout) + reject(new Error(`Worker stopped with exit code ${code}`)) + } + }) + + worker.postMessage('ping') + }) + + await worker.terminate() + + return NextResponse.json({ success: true, message }) + } catch (error) { + return NextResponse.json( + { success: false, error: String(error) }, + { status: 500 } + ) + } +} diff --git a/test/e2e/app-dir/node-worker-threads/app/layout.tsx b/test/e2e/app-dir/node-worker-threads/app/layout.tsx new file mode 100644 index 0000000000000..08eaa94fdc889 --- /dev/null +++ b/test/e2e/app-dir/node-worker-threads/app/layout.tsx @@ -0,0 +1,11 @@ +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/test/e2e/app-dir/node-worker-threads/app/worker-dir/simple-worker.ts b/test/e2e/app-dir/node-worker-threads/app/worker-dir/simple-worker.ts new file mode 100644 index 0000000000000..0aeed237ef590 --- /dev/null +++ b/test/e2e/app-dir/node-worker-threads/app/worker-dir/simple-worker.ts @@ -0,0 +1,9 @@ +import { parentPort } from 'node:worker_threads' + +if (parentPort) { + parentPort.on('message', (msg) => { + if (msg === 'ping') { + parentPort!.postMessage('pong from simple worker') + } + }) +} diff --git a/test/e2e/app-dir/node-worker-threads/node-worker-threads.test.ts b/test/e2e/app-dir/node-worker-threads/node-worker-threads.test.ts new file mode 100644 index 0000000000000..c49a2178fceb7 --- /dev/null +++ b/test/e2e/app-dir/node-worker-threads/node-worker-threads.test.ts @@ -0,0 +1,51 @@ +import { nextTestSetup } from 'e2e-utils' + +describe('node-worker-threads', () => { + const { next, skipped, isTurbopack } = nextTestSetup({ + files: __dirname, + skipDeployment: true, + dependencies: { + pino: '9.6.0', + }, + }) + + if (skipped) { + return + } + + // These tests are Turbopack-specific since they rely on Turbopack's worker bundling + if (!isTurbopack) { + it.skip('webpack doesnt support bundling worker-threads', () => {}) + return + } + + it('should handle simple worker with relative path', async () => { + const res = await next.fetch('/api/simple-worker-test') + const data = await res.json() + console.log('Simple worker response:', data) + expect(res.status).toBe(200) + expect(data.success).toBe(true) + expect(data.message).toBe('pong from simple worker') + }) + + it('should handle self-referencing worker with __filename', async () => { + const res = await next.fetch('/api/worker-test') + const data = await res.json() + console.log('Self-ref worker response:', data) + expect(res.status).toBe(200) + expect(data.success).toBe(true) + expect(data.message).toBe('pong') + }) + + it('should handle pino logger with transport (thread-stream)', async () => { + // Pino with transports uses thread-stream internally, which creates worker_threads + // with a broad pattern like join(__dirname, 'lib', 'worker.js') that can match + // non-evaluatable files like package.json. This tests that we properly downgrade + // those errors to warnings via loose_errors. + const res = await next.fetch('/api/pino-test') + const data = await res.json() + console.log('Pino test response:', data) + expect(res.status).toBe(200) + expect(data.success).toBe(true) + }) +}) diff --git a/turbopack/crates/turbopack-browser/src/chunking_context.rs b/turbopack/crates/turbopack-browser/src/chunking_context.rs index 9cfa28ca8ab38..7b7e00f04d8df 100644 --- a/turbopack/crates/turbopack-browser/src/chunking_context.rs +++ b/turbopack/crates/turbopack-browser/src/chunking_context.rs @@ -372,10 +372,7 @@ impl BrowserChunkingContext { } } } - -#[turbo_tasks::value_impl] impl BrowserChunkingContext { - #[turbo_tasks::function] fn generate_evaluate_chunk( self: Vc, ident: Vc, @@ -392,8 +389,6 @@ impl BrowserChunkingContext { module_graph, )) } - - #[turbo_tasks::function] fn generate_chunk_list_register_chunk( self: Vc, ident: Vc, @@ -409,26 +404,30 @@ impl BrowserChunkingContext { source, )) } - - #[turbo_tasks::function] async fn generate_chunk( self: Vc, chunk: ResolvedVc>, - ) -> Result>> { + ) -> Result>> { Ok( if let Some(ecmascript_chunk) = ResolvedVc::try_downcast_type::(chunk) { - Vc::upcast(EcmascriptBrowserChunk::new(self, *ecmascript_chunk)) + ResolvedVc::upcast( + EcmascriptBrowserChunk::new(self, *ecmascript_chunk) + .to_resolved() + .await?, + ) } else if let Some(output_asset) = ResolvedVc::try_sidecast::>(chunk) { - *output_asset + output_asset } else { bail!("Unable to generate output asset for chunk"); }, ) } - +} +#[turbo_tasks::value_impl] +impl BrowserChunkingContext { #[turbo_tasks::function] pub fn current_chunk_method(&self) -> Vc { self.current_chunk_method.cell() @@ -724,7 +723,7 @@ impl ChunkingContext for BrowserChunkingContext { let mut assets = chunks .iter() - .map(|chunk| self.generate_chunk(**chunk).to_resolved()) + .map(|chunk| self.generate_chunk(*chunk)) .try_join() .await?; @@ -787,7 +786,7 @@ impl ChunkingContext for BrowserChunkingContext { let mut assets: Vec>> = chunks .iter() - .map(|chunk| self.generate_chunk(**chunk).to_resolved()) + .map(|chunk| self.generate_chunk(*chunk)) .try_join() .await?; diff --git a/turbopack/crates/turbopack-cli/src/build/mod.rs b/turbopack/crates/turbopack-cli/src/build/mod.rs index 8859a309a121e..99403b4975af7 100644 --- a/turbopack/crates/turbopack-cli/src/build/mod.rs +++ b/turbopack/crates/turbopack-cli/src/build/mod.rs @@ -286,7 +286,7 @@ async fn build_internal( let ty = ReferenceType::Entry(EntryReferenceSubType::Undefined); let request = request_vc.await?; origin - .resolve_asset(request_vc, origin.resolve_options(ty.clone()), ty) + .resolve_asset(request_vc, origin.resolve_options(), ty) .await? .first_module() .await? diff --git a/turbopack/crates/turbopack-cli/src/dev/web_entry_source.rs b/turbopack/crates/turbopack-cli/src/dev/web_entry_source.rs index 6c1a2005e6da1..f488afeb2b6fe 100644 --- a/turbopack/crates/turbopack-cli/src/dev/web_entry_source.rs +++ b/turbopack/crates/turbopack-cli/src/dev/web_entry_source.rs @@ -139,7 +139,7 @@ pub async fn create_web_entry_source( .map(|request| async move { let ty = ReferenceType::Entry(EntryReferenceSubType::Web); Ok(origin - .resolve_asset(request, origin.resolve_options(ty.clone()), ty) + .resolve_asset(request, origin.resolve_options(), ty) .await? .resolve() .await? diff --git a/turbopack/crates/turbopack-core/src/context.rs b/turbopack/crates/turbopack-core/src/context.rs index 8f9177907a26d..034068ea4c4bc 100644 --- a/turbopack/crates/turbopack-core/src/context.rs +++ b/turbopack/crates/turbopack-core/src/context.rs @@ -69,11 +69,7 @@ pub trait AssetContext { /// Gets the resolve options for a given path. #[turbo_tasks::function] - fn resolve_options( - self: Vc, - origin_path: FileSystemPath, - reference_type: ReferenceType, - ) -> Vc; + fn resolve_options(self: Vc, origin_path: FileSystemPath) -> Vc; /// Resolves an request to an [ModuleResolveResult]. #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-core/src/issue/code_gen.rs b/turbopack/crates/turbopack-core/src/issue/code_gen.rs index 1bd4b36a5b81a..fdc686b35d1aa 100644 --- a/turbopack/crates/turbopack-core/src/issue/code_gen.rs +++ b/turbopack/crates/turbopack-core/src/issue/code_gen.rs @@ -1,7 +1,10 @@ use turbo_tasks::{ResolvedVc, Vc}; use turbo_tasks_fs::FileSystemPath; -use super::{Issue, IssueSeverity, IssueStage, OptionStyledString, StyledString}; +use super::{ + Issue, IssueSeverity, IssueSource, IssueStage, OptionIssueSource, OptionStyledString, + StyledString, +}; #[turbo_tasks::value(shared)] pub struct CodeGenerationIssue { @@ -9,6 +12,8 @@ pub struct CodeGenerationIssue { pub path: FileSystemPath, pub title: ResolvedVc, pub message: ResolvedVc, + /// Optional source location that points to where the issue originates + pub source: Option, } #[turbo_tasks::value_impl] @@ -36,4 +41,9 @@ impl Issue for CodeGenerationIssue { fn description(&self) -> Vc { Vc::cell(Some(self.message)) } + + #[turbo_tasks::function] + fn source(&self) -> Vc { + Vc::cell(self.source) + } } diff --git a/turbopack/crates/turbopack-core/src/resolve/mod.rs b/turbopack/crates/turbopack-core/src/resolve/mod.rs index 8fa0f5e042317..118cd5ef3d491 100644 --- a/turbopack/crates/turbopack-core/src/resolve/mod.rs +++ b/turbopack/crates/turbopack-core/src/resolve/mod.rs @@ -1654,7 +1654,7 @@ pub async fn url_resolve( issue_source: Option, is_optional: bool, ) -> Result> { - let resolve_options = origin.resolve_options(reference_type.clone()); + let resolve_options = origin.resolve_options(); let rel_request = request.as_relative(); let origin_path_parent = origin.origin_path().await?.parent(); let rel_result = resolve( diff --git a/turbopack/crates/turbopack-core/src/resolve/origin.rs b/turbopack/crates/turbopack-core/src/resolve/origin.rs index 5b10825582ed9..37d23d7e439b5 100644 --- a/turbopack/crates/turbopack-core/src/resolve/origin.rs +++ b/turbopack/crates/turbopack-core/src/resolve/origin.rs @@ -34,13 +34,10 @@ pub trait ResolveOrigin { /// Get the resolve options that apply for this origin. #[turbo_tasks::function] - async fn resolve_options( - self: Vc, - reference_type: ReferenceType, - ) -> Result> { + async fn resolve_options(self: Vc) -> Result> { Ok(self .asset_context() - .resolve_options(self.origin_path().owned().await?, reference_type)) + .resolve_options(self.origin_path().owned().await?)) } } diff --git a/turbopack/crates/turbopack-ecmascript/src/chunk/item.rs b/turbopack/crates/turbopack-ecmascript/src/chunk/item.rs index 20bff5b4810ed..270cbdd2118e6 100644 --- a/turbopack/crates/turbopack-ecmascript/src/chunk/item.rs +++ b/turbopack/crates/turbopack-ecmascript/src/chunk/item.rs @@ -284,6 +284,7 @@ async fn module_factory_with_code_generation_issue( title: StyledString::Text(rcstr!("Code generation for chunk item errored")) .resolved_cell(), message: StyledString::Text(error_message).resolved_cell(), + source: None, } .resolved_cell() .emit(); diff --git a/turbopack/crates/turbopack-ecmascript/src/lib.rs b/turbopack/crates/turbopack-ecmascript/src/lib.rs index 3818d826d220e..e413e55f995d3 100644 --- a/turbopack/crates/turbopack-ecmascript/src/lib.rs +++ b/turbopack/crates/turbopack-ecmascript/src/lib.rs @@ -197,14 +197,15 @@ pub enum AnalyzeMode { /// For bundling only, no tracing of referenced files. #[default] CodeGeneration, - /// For bundling and tracing of referenced files. + /// For bundling and finding references to external referenced files CodeGenerationAndTracing, - /// For tracing of referenced files only, no bundling (i.e. no codegen). + /// For tracing transitive external references (i.e. no codegen). Tracing, } impl AnalyzeMode { - pub fn is_tracing(self) -> bool { + /// Are we currently collecting references to external assets. e.g. filesystem dependencies + pub fn is_tracing_assets(self) -> bool { match self { AnalyzeMode::Tracing | AnalyzeMode::CodeGenerationAndTracing => true, AnalyzeMode::CodeGeneration => false, diff --git a/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs b/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs index 83755dd89a82a..3d81c42a71de0 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs @@ -311,7 +311,7 @@ impl Module for CachedExternalModule { origin .resolve_asset( Request::parse_string(self.request.clone()), - origin.resolve_options(ReferenceType::Undefined), + origin.resolve_options(), ReferenceType::Undefined, ) .await? diff --git a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs index bc77b379f9bd1..d0d47383f8245 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/mod.rs @@ -78,7 +78,7 @@ use turbopack_core::{ issue::{IssueExt, IssueSeverity, IssueSource, StyledString, analyze::AnalyzeIssue}, module::{Module, ModuleSideEffects}, reference::{ModuleReference, ModuleReferences}, - reference_type::{CommonJsReferenceSubType, ReferenceType, WorkerReferenceSubType}, + reference_type::{CommonJsReferenceSubType, ReferenceType}, resolve::{ FindContextFileResult, ImportUsage, ModulePart, find_context_file, origin::{PlainResolveOrigin, ResolveOrigin}, @@ -139,7 +139,7 @@ use crate::{ exports_info::{ExportsInfoBinding, ExportsInfoRef}, ident::IdentReplacement, member::MemberReplacement, - node::{FilePathModuleReference, PackageJsonReference}, + node::PackageJsonReference, raw::{DirAssetReference, FileSourceReference}, require_context::{RequireContextAssetReference, RequireContextMap}, type_issue::SpecifiedModuleTypeIssue, @@ -479,6 +479,9 @@ struct AnalysisState<'a> { // Whether we should collect affecting sources from referenced files. Only usedful when // tracing. collect_affecting_sources: bool, + // Whether we are only tracing dependencies (no code generation). When true, synthetic + // wrapper modules like WorkerLoaderModule should not be created. + tracing_only: bool, } impl AnalysisState<'_> { @@ -1086,7 +1089,8 @@ async fn analyze_ecmascript_module_internal( .free_var_references .individual() .await?, - collect_affecting_sources: options.analyze_mode.is_tracing(), + collect_affecting_sources: options.analyze_mode.is_tracing_assets(), + tracing_only: !options.analyze_mode.is_code_gen(), }; enum Action { @@ -1735,6 +1739,7 @@ async fn handle_call) + Send + Sync>( ignore_dynamic_requests, url_rewrite_behavior, collect_affecting_sources, + tracing_only, allow_project_root_tracing: _, .. } = state; @@ -1795,6 +1800,7 @@ async fn handle_call) + Send + Sync>( in_try, state, collect_affecting_sources, + tracing_only, ) .await?; } @@ -1817,6 +1823,7 @@ async fn handle_call) + Send + Sync>( in_try, state, collect_affecting_sources, + tracing_only, ) .await?; } @@ -1842,6 +1849,7 @@ async fn handle_well_known_function_call<'a, F, Fut>( in_try: bool, state: &'a AnalysisState<'a>, collect_affecting_sources: bool, + tracing_only: bool, ) -> Result<()> where F: Fn() -> Fut, @@ -1919,13 +1927,9 @@ where | WellKnownFunctionKind::SharedWorkerConstructor => { let args = linked_args().await?; if let Some(url @ JsValue::Url(_, JsValueUrlKind::Relative)) = args.first() { - let (name, worker_type) = match func { - WellKnownFunctionKind::WorkerConstructor => { - ("Worker", WorkerReferenceSubType::WebWorker) - } - WellKnownFunctionKind::SharedWorkerConstructor => { - ("SharedWorker", WorkerReferenceSubType::SharedWorker) - } + let (name, is_shared) = match func { + WellKnownFunctionKind::WorkerConstructor => ("Worker", false), + WellKnownFunctionKind::SharedWorkerConstructor => ("SharedWorker", true), _ => unreachable!(), }; let pat = js_value_to_pattern(url); @@ -1945,12 +1949,13 @@ where if *compile_time_info.environment().rendering().await? == Rendering::Client { analysis.add_reference_code_gen( - WorkerAssetReference::new( + WorkerAssetReference::new_web_worker( origin, Request::parse(pat).to_resolved().await?, issue_source(source, span), in_try, - worker_type, + tracing_only, + is_shared, ), ast_path.to_vec().into(), ); @@ -1961,8 +1966,7 @@ where // Ignore (e.g. dynamic parameter or string literal), just as Webpack does return Ok(()); } - WellKnownFunctionKind::NodeWorkerConstructor if analysis.analyze_mode.is_tracing() => { - // Only for tracing, not for bundling (yet?) + WellKnownFunctionKind::NodeWorkerConstructor => { let args = linked_args().await?; if !args.is_empty() { let pat = js_value_to_pattern(&args[0]); @@ -1979,17 +1983,21 @@ where return Ok(()); } } - analysis.add_reference( - FilePathModuleReference::new( - origin.asset_context(), + + analysis.add_reference_code_gen( + WorkerAssetReference::new_node_worker_thread( + origin, + // WorkerThreads resolve filepaths relative to the process root get_traced_project_dir().await?, - Pattern::new(pat), + Pattern::new(pat).to_resolved().await?, collect_affecting_sources, get_issue_source(), - ) - .to_resolved() - .await?, + in_try, + tracing_only, + ), + ast_path.to_vec().into(), ); + return Ok(()); } let (args, hints) = explain_args(args); @@ -2199,7 +2207,7 @@ where ); } - WellKnownFunctionKind::FsReadMethod(name) if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::FsReadMethod(name) if analysis.analyze_mode.is_tracing_assets() => { let args = linked_args().await?; if !args.is_empty() { let pat = js_value_to_pattern(&args[0]); @@ -2236,7 +2244,7 @@ where ) } - WellKnownFunctionKind::PathResolve(..) if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::PathResolve(..) if analysis.analyze_mode.is_tracing_assets() => { let parent_path = origin.origin_path().owned().await?.parent(); let args = linked_args().await?; @@ -2280,7 +2288,7 @@ where return Ok(()); } - WellKnownFunctionKind::PathJoin if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::PathJoin if analysis.analyze_mode.is_tracing_assets() => { let context_path = source.ident().path().await?; // ignore path.join in `node-gyp`, it will includes too many files if context_path.path.contains("node_modules/node-gyp") { @@ -2322,7 +2330,7 @@ where return Ok(()); } WellKnownFunctionKind::ChildProcessSpawnMethod(name) - if analysis.analyze_mode.is_tracing() => + if analysis.analyze_mode.is_tracing_assets() => { let args = linked_args().await?; @@ -2399,7 +2407,7 @@ where ), ) } - WellKnownFunctionKind::ChildProcessFork if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::ChildProcessFork if analysis.analyze_mode.is_tracing_assets() => { let args = linked_args().await?; if !args.is_empty() { let first_arg = &args[0]; @@ -2438,7 +2446,7 @@ where ), ) } - WellKnownFunctionKind::NodePreGypFind if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::NodePreGypFind if analysis.analyze_mode.is_tracing_assets() => { use turbopack_resolve::node_native_binding::NodePreGypConfigReference; let args = linked_args().await?; @@ -2481,7 +2489,7 @@ where ), ) } - WellKnownFunctionKind::NodeGypBuild if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::NodeGypBuild if analysis.analyze_mode.is_tracing_assets() => { use turbopack_resolve::node_native_binding::NodeGypBuildReference; let args = linked_args().await?; @@ -2520,7 +2528,7 @@ where ), ) } - WellKnownFunctionKind::NodeBindings if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::NodeBindings if analysis.analyze_mode.is_tracing_assets() => { use turbopack_resolve::node_native_binding::NodeBindingsReference; let args = linked_args().await?; @@ -2550,7 +2558,7 @@ where ), ) } - WellKnownFunctionKind::NodeExpressSet if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::NodeExpressSet if analysis.analyze_mode.is_tracing_assets() => { let args = linked_args().await?; if args.len() == 2 && let Some(s) = args.first().and_then(|arg| arg.as_str()) @@ -2634,7 +2642,7 @@ where ) } WellKnownFunctionKind::NodeStrongGlobalizeSetRootDir - if analysis.analyze_mode.is_tracing() => + if analysis.analyze_mode.is_tracing_assets() => { let args = linked_args().await?; if let Some(p) = args.first().and_then(|arg| arg.as_str()) { @@ -2681,7 +2689,7 @@ where ), ) } - WellKnownFunctionKind::NodeResolveFrom if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::NodeResolveFrom if analysis.analyze_mode.is_tracing_assets() => { let args = linked_args().await?; if args.len() == 2 && args.get(1).and_then(|arg| arg.as_str()).is_some() { analysis.add_reference( @@ -2705,7 +2713,7 @@ where ), ) } - WellKnownFunctionKind::NodeProtobufLoad if analysis.analyze_mode.is_tracing() => { + WellKnownFunctionKind::NodeProtobufLoad if analysis.analyze_mode.is_tracing_assets() => { let args = linked_args().await?; if args.len() == 2 && let Some(JsValue::Object { parts, .. }) = args.get(1) @@ -3957,8 +3965,7 @@ async fn resolve_as_webpack_runtime( request: Vc, transforms: Vc, ) -> Result> { - let ty = ReferenceType::CommonJs(CommonJsReferenceSubType::Undefined); - let options = origin.resolve_options(ty.clone()); + let options = origin.resolve_options(); let options = apply_cjs_specific_options(options); diff --git a/turbopack/crates/turbopack-ecmascript/src/references/node.rs b/turbopack/crates/turbopack-ecmascript/src/references/node.rs index e4e92c7faed29..efc5aaf6c7954 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/node.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/node.rs @@ -1,21 +1,12 @@ use anyhow::Result; -use tracing::Instrument; use turbo_rcstr::RcStr; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ - chunk::{ChunkableModuleReference, ChunkingType, ChunkingTypeOption}, - context::AssetContext, - file_source::FileSource, - issue::IssueSource, - raw_module::RawModule, - reference::ModuleReference, - reference_type::{ReferenceType, WorkerReferenceSubType}, - resolve::{ModuleResolveResult, pattern::Pattern, resolve_raw}, + file_source::FileSource, raw_module::RawModule, reference::ModuleReference, + resolve::ModuleResolveResult, }; -use crate::references::util::check_and_emit_too_many_matches_warning; - #[turbo_tasks::value] #[derive(Hash, Clone, Debug)] pub struct PackageJsonReference { @@ -55,89 +46,3 @@ impl ValueToString for PackageJsonReference { )) } } - -#[turbo_tasks::value] -#[derive(Hash, Debug)] -pub struct FilePathModuleReference { - asset_context: ResolvedVc>, - context_dir: FileSystemPath, - path: ResolvedVc, - collect_affecting_sources: bool, - issue_source: IssueSource, -} - -#[turbo_tasks::value_impl] -impl FilePathModuleReference { - #[turbo_tasks::function] - pub fn new( - asset_context: ResolvedVc>, - context_dir: FileSystemPath, - path: ResolvedVc, - collect_affecting_sources: bool, - issue_source: IssueSource, - ) -> Vc { - Self { - asset_context, - context_dir, - path, - collect_affecting_sources, - issue_source, - } - .cell() - } -} - -// A reference to an module by absolute or cwd-relative file path (e.g. for the -// worker-threads `new Worker` which has the resolving behavior of `fs.readFile` but should treat -// the resolve result as an module instead of a raw source). -#[turbo_tasks::value_impl] -impl ModuleReference for FilePathModuleReference { - #[turbo_tasks::function] - async fn resolve_reference(&self) -> Result> { - let span = tracing::info_span!( - "trace module", - pattern = display(self.path.to_string().await?) - ); - async { - let result = resolve_raw( - self.context_dir.clone(), - *self.path, - self.collect_affecting_sources, - /* force_in_lookup_dir */ false, - ); - let result = self.asset_context.process_resolve_result( - result, - ReferenceType::Worker(WorkerReferenceSubType::NodeWorker), - ); - - check_and_emit_too_many_matches_warning( - result, - self.issue_source, - self.context_dir.clone(), - self.path, - ) - .await?; - - Ok(result) - } - .instrument(span) - .await - } -} -#[turbo_tasks::value_impl] -impl ChunkableModuleReference for FilePathModuleReference { - #[turbo_tasks::function] - fn chunking_type(&self) -> Vc { - Vc::cell(Some(ChunkingType::Traced)) - } -} - -#[turbo_tasks::value_impl] -impl ValueToString for FilePathModuleReference { - #[turbo_tasks::function] - async fn to_string(&self) -> Result> { - Ok(Vc::cell( - format!("raw asset {}", self.path.to_string().await?,).into(), - )) - } -} diff --git a/turbopack/crates/turbopack-ecmascript/src/references/pattern_mapping.rs b/turbopack/crates/turbopack-ecmascript/src/references/pattern_mapping.rs index 2021bcf54f937..81d77baf995c4 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/pattern_mapping.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/pattern_mapping.rs @@ -345,6 +345,7 @@ async fn to_single_pattern_mapping( ) .resolved_cell(), path: origin.origin_path().owned().await?, + source: None, } .resolved_cell() .emit(); @@ -376,6 +377,7 @@ async fn to_single_pattern_mapping( )) .resolved_cell(), path: origin.origin_path().owned().await?, + source: None, } .resolved_cell() .emit(); diff --git a/turbopack/crates/turbopack-ecmascript/src/references/worker.rs b/turbopack/crates/turbopack-ecmascript/src/references/worker.rs index 4765df238ccba..cae03826bceb7 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/worker.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/worker.rs @@ -1,4 +1,4 @@ -use anyhow::{Result, bail}; +use anyhow::Result; use bincode::{Decode, Encode}; use swc_core::{ common::util::take::Take, @@ -9,83 +9,104 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ NonLocalValue, ResolvedVc, ValueToString, Vc, debug::ValueDebugFormat, trace::TraceRawVcs, }; +use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ - chunk::{ChunkableModule, ChunkableModuleReference, ChunkingContext}, + chunk::{ChunkableModule, ChunkableModuleReference, ChunkingContext, EvaluatableAsset}, + context::AssetContext, issue::{IssueExt, IssueSeverity, IssueSource, StyledString, code_gen::CodeGenerationIssue}, module::Module, reference::ModuleReference, reference_type::{ReferenceType, WorkerReferenceSubType}, - resolve::{ModuleResolveResult, origin::ResolveOrigin, parse::Request, url_resolve}, + resolve::{ + ModuleResolveResult, ModuleResolveResultItem, handle_resolve_error, origin::ResolveOrigin, + parse::Request, pattern::Pattern, resolve_raw, url_resolve, + }, }; use crate::{ code_gen::{CodeGen, CodeGeneration, IntoCodeGenReference}, create_visitor, - references::AstPath, - runtime_functions::TURBOPACK_REQUIRE, - utils::module_id_to_lit, - worker_chunk::module::WorkerLoaderModule, + references::{ + AstPath, + pattern_mapping::{PatternMapping, ResolveType}, + }, + worker_chunk::{WorkerType, module::WorkerLoaderModule}, }; +/// A unified reference to a Worker (web or Node.js) that creates an isolated chunk group +/// for the worker module. #[turbo_tasks::value] #[derive(Hash, Debug)] pub struct WorkerAssetReference { + pub worker_type: WorkerType, pub origin: ResolvedVc>, - pub request: ResolvedVc, + pub request: WorkerRequest, pub issue_source: IssueSource, pub in_try: bool, - pub worker_type: WorkerReferenceSubType, + /// When true, skip creating WorkerLoaderModule and return the inner module directly. + /// This is used when we're only tracing dependencies, not generating code. + pub tracing_only: bool, +} + +/// The request type varies between web and Node.js workers +#[turbo_tasks::value] +#[derive(Hash, Debug, Clone)] +pub enum WorkerRequest { + /// Web workers use Request (URLs) + Url(ResolvedVc), + /// Node.js workers use Pattern (file paths) with a context directory that should be the server + /// working directory + Pattern { + context_dir: FileSystemPath, + path: ResolvedVc, + collect_affecting_sources: bool, + }, } impl WorkerAssetReference { - pub fn new( + pub fn new_web_worker( origin: ResolvedVc>, request: ResolvedVc, issue_source: IssueSource, in_try: bool, - worker_type: WorkerReferenceSubType, + tracing_only: bool, + is_shared: bool, ) -> Self { WorkerAssetReference { + worker_type: if is_shared { + WorkerType::SharedWebWorker + } else { + WorkerType::WebWorker + }, origin, - request, + request: WorkerRequest::Url(request), issue_source, in_try, - worker_type, + tracing_only, } } -} - -impl WorkerAssetReference { - async fn worker_loader_module(&self) -> Result>> { - let module = url_resolve( - *self.origin, - *self.request, - ReferenceType::Worker(self.worker_type), - Some(self.issue_source), - self.in_try, - ); - - let Some(module) = *module.first_module().await? else { - return Ok(None); - }; - let Some(chunkable) = ResolvedVc::try_downcast::>(module) else { - CodeGenerationIssue { - severity: IssueSeverity::Bug, - title: StyledString::Text(rcstr!("non-ecmascript placeable asset")).resolved_cell(), - message: StyledString::Text(rcstr!("asset is not placeable in ESM chunks")) - .resolved_cell(), - path: self.origin.origin_path().owned().await?, - } - .resolved_cell() - .emit(); - return Ok(None); - }; - Ok(Some(WorkerLoaderModule::new( - *chunkable, - self.worker_type, - *self.origin.asset_context().to_resolved().await?, - ))) + pub fn new_node_worker_thread( + origin: ResolvedVc>, + context_dir: FileSystemPath, + path: ResolvedVc, + collect_affecting_sources: bool, + issue_source: IssueSource, + in_try: bool, + tracing_only: bool, + ) -> Self { + WorkerAssetReference { + worker_type: WorkerType::NodeWorkerThread, + origin, + request: WorkerRequest::Pattern { + context_dir, + path, + collect_affecting_sources, + }, + issue_source, + in_try, + tracing_only, + } } } @@ -93,13 +114,159 @@ impl WorkerAssetReference { impl ModuleReference for WorkerAssetReference { #[turbo_tasks::function] async fn resolve_reference(&self) -> Result> { - if let Some(worker_loader_module) = self.worker_loader_module().await? { - Ok(*ModuleResolveResult::module(ResolvedVc::upcast( - worker_loader_module.to_resolved().await?, - ))) - } else { - Ok(*ModuleResolveResult::unresolvable()) + let asset_context = self.origin.asset_context().to_resolved().await?; + + let result = match (&self.worker_type, &self.request) { + (WorkerType::WebWorker | WorkerType::SharedWebWorker, WorkerRequest::Url(request)) => { + // Web worker resolution uses url_resolve + url_resolve( + *self.origin, + **request, + self.worker_type.reference_type(), + Some(self.issue_source), + self.in_try, + ) + } + ( + WorkerType::NodeWorkerThread, + WorkerRequest::Pattern { + context_dir, + path, + collect_affecting_sources, + }, + ) => { + // Node.js worker resolution uses resolve_raw + let result = resolve_raw( + context_dir.clone(), + **path, + *collect_affecting_sources, + /* force_in_lookup_dir */ false, + ); + let reference_type = ReferenceType::Worker(WorkerReferenceSubType::NodeWorker); + let result = asset_context.process_resolve_result(result, reference_type.clone()); + + // Report an error if we cannot resolve + handle_resolve_error( + result, + reference_type.clone(), + *self.origin, + Request::parse(path.owned().await?), + self.origin.resolve_options(), + self.in_try, + Some(self.issue_source), + ) + .await? + } + _ => { + // This should never happen due to our constructor functions + unreachable!("WorkerType and WorkerRequest mismatch"); + } + }; + + // When tracing only (no code generation), return the resolved modules directly + // without wrapping them in WorkerLoaderModule + if self.tracing_only { + return Ok(result); } + + // Wrap each resolved module in a WorkerLoaderModule + let result_ref = result.await?; + let mut primary = Vec::with_capacity(result_ref.primary.len()); + + for (request_key, resolve_item) in result_ref.primary.iter() { + match resolve_item { + ModuleResolveResultItem::Module(module) => { + let module_ident = module.ident().to_string().await?; + + let Some(chunkable) = + ResolvedVc::try_downcast::>(*module) + else { + CodeGenerationIssue { + severity: self.get_module_type_issue_severity().await?, + title: StyledString::Text(rcstr!("non-chunkable module")) + .resolved_cell(), + message: StyledString::Text( + format!( + "Worker entry point module '{}' is not chunkable and cannot \ + be used as a worker module. This may happen if the module \ + type doesn't support bundling.", + module_ident + ) + .into(), + ) + .resolved_cell(), + path: self.origin.origin_path().owned().await?, + source: Some(self.issue_source), + } + .resolved_cell() + .emit(); + continue; + }; + + // For Node.js worker threads, the module must also be evaluatable since + // it becomes an entry point + if matches!(self.worker_type, WorkerType::NodeWorkerThread) + && ResolvedVc::try_sidecast::>(chunkable) + .is_none() + { + CodeGenerationIssue { + severity: self.get_module_type_issue_severity().await?, + title: StyledString::Text(rcstr!("non-evaluatable module")) + .resolved_cell(), + message: StyledString::Text( + format!( + "Worker thread entry point module '{}' must be evaluatable to \ + serve as an entry point. This module cannot be used as a \ + Node.js worker_threads Worker entry point because it doesn't \ + support direct evaluation.", + module_ident + ) + .into(), + ) + .resolved_cell(), + path: self.origin.origin_path().owned().await?, + source: Some(self.issue_source), + } + .resolved_cell() + .emit(); + continue; + } + + let loader = + WorkerLoaderModule::new(*chunkable, self.worker_type, *asset_context) + .to_resolved() + .await?; + + primary.push(( + request_key.clone(), + ModuleResolveResultItem::Module(ResolvedVc::upcast(loader)), + )); + } + // Pass through other result types (External, Ignore, etc.) + _ => { + primary.push((request_key.clone(), resolve_item.clone())); + } + } + } + + Ok(ModuleResolveResult { + primary: primary.into_boxed_slice(), + affecting_sources: result_ref.affecting_sources.clone(), + } + .cell()) + } +} + +impl WorkerAssetReference { + /// Downgrade errors to warnings if we are in a try context or if loos errors is enabled + async fn get_module_type_issue_severity(&self) -> Result { + Ok( + if self.in_try || self.origin.resolve_options().await?.loose_errors { + IssueSeverity::Warning + } else { + IssueSeverity::Error + }, + ) } } @@ -108,7 +275,19 @@ impl ValueToString for WorkerAssetReference { #[turbo_tasks::function] async fn to_string(&self) -> Result> { Ok(Vc::cell( - format!("new Worker {}", self.request.to_string().await?,).into(), + format!( + "new {}({})", + match self.worker_type { + WorkerType::WebWorker => "WebWorker", + WorkerType::SharedWebWorker => "SharedWorker", + WorkerType::NodeWorkerThread => "NodeWorkerThread", + }, + match &self.request { + WorkerRequest::Url(request) => request.to_string().await?, + WorkerRequest::Pattern { path, .. } => path.to_string().await?, + } + ) + .into(), )) } } @@ -142,29 +321,45 @@ impl WorkerAssetReferenceCodeGen { &self, chunking_context: Vc>, ) -> Result { - let Some(loader) = self.reference.await?.worker_loader_module().await? else { - bail!("Worker loader could not be created"); + let reference = self.reference.await?; + + // Build the request for PatternMapping + let request = match &reference.request { + WorkerRequest::Url(request) => **request, + WorkerRequest::Pattern { path, .. } => Request::parse(path.owned().await?), }; - let item_id = chunking_context - .chunk_item_id_strategy() - .await? - .get_id_from_ident(loader.ident()) - .await?; + // Use PatternMapping to handle both single and multiple (dynamic) worker results + let pm = PatternMapping::resolve_request( + request, + *reference.origin, + chunking_context, + self.reference.resolve_reference(), + ResolveType::ChunkItem, + ) + .await?; let visitor = create_visitor!(self.path, visit_mut_expr, |expr: &mut Expr| { let message = if let Expr::New(NewExpr { args, .. }) = expr { if let Some(args) = args { match args.first_mut() { - Some(ExprOrSpread { spread: None, expr }) => { - let item_id = module_id_to_lit(&item_id); - *expr = quote_expr!( - "$turbopack_require($item_id)", - turbopack_require: Expr = TURBOPACK_REQUIRE.into(), - item_id: Expr = item_id + Some(ExprOrSpread { + spread: None, + expr: key_expr, + }) => { + // Replace the first argument (the URL/path) with a turbopack_require + // call that uses the pattern mapping to resolve to the correct loader + // module + *key_expr = quote_expr!( + "$require", + require: Expr = pm.create_require(*key_expr.take()) ); - if let Some(opts) = args.get_mut(1) + // For web workers, remove type: "module" if it exists + if matches!( + reference.worker_type, + WorkerType::WebWorker | WorkerType::SharedWebWorker + ) && let Some(opts) = args.get_mut(1) && opts.spread.is_none() { *opts.expr = *quote_expr!( diff --git a/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs b/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs index adc34f8f762b4..98b9640d0d427 100644 --- a/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs @@ -9,7 +9,7 @@ use turbopack_core::{ module::{Module, ModuleSideEffects}, raw_module::RawModule, reference::{ModuleReference, ModuleReferences}, - reference_type::{CommonJsReferenceSubType, ReferenceType}, + reference_type::CommonJsReferenceSubType, resolve::{ModuleResolveResult, origin::ResolveOrigin, parse::Request}, source::Source, }; @@ -55,10 +55,7 @@ impl Module for TsConfigModuleAsset { let configs = read_tsconfigs( self.source.content().file_content(), self.source, - apply_cjs_specific_options( - self.origin - .resolve_options(ReferenceType::CommonJs(CommonJsReferenceSubType::Undefined)), - ), + apply_cjs_specific_options(self.origin.resolve_options()), ) .await?; references.extend( diff --git a/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs b/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs index 534439a8a8725..1d9af6f361947 100644 --- a/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs @@ -159,8 +159,7 @@ pub struct WebpackRuntimeAssetReference { impl ModuleReference for WebpackRuntimeAssetReference { #[turbo_tasks::function] async fn resolve_reference(&self) -> Result> { - let ty = ReferenceType::CommonJs(CommonJsReferenceSubType::Undefined); - let options = self.origin.resolve_options(ty.clone()); + let options = self.origin.resolve_options(); let options = apply_cjs_specific_options(options); diff --git a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/chunk_item.rs b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/chunk_item.rs index 7a798c5dd5ad2..29effbeebf7ce 100644 --- a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/chunk_item.rs +++ b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/chunk_item.rs @@ -1,21 +1,20 @@ -use anyhow::Result; +use anyhow::{Result, bail}; use indoc::formatdoc; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; use turbopack_core::{ chunk::{ - ChunkData, ChunkItem, ChunkType, ChunkingContext, ChunkingContextExt, ChunksData, - availability_info::AvailabilityInfo, + AsyncModuleInfo, ChunkData, ChunkItem, ChunkType, ChunkingContext, ChunkingContextExt, + ChunksData, EvaluatableAsset, EvaluatableAssets, availability_info::AvailabilityInfo, }, context::AssetContext, ident::AssetIdent, module::Module, module_graph::{ModuleGraph, chunk_group_info::ChunkGroup}, - output::{OutputAsset, OutputAssetsReference, OutputAssetsWithReferenced}, - reference_type::WorkerReferenceSubType, + output::{OutputAsset, OutputAssets, OutputAssetsReference, OutputAssetsWithReferenced}, }; -use super::module::WorkerLoaderModule; +use super::{module::WorkerLoaderModule, worker_type::WorkerType}; use crate::{ chunk::{ EcmascriptChunkItem, EcmascriptChunkItemContent, EcmascriptChunkType, @@ -30,8 +29,8 @@ pub struct WorkerLoaderChunkItem { pub module: ResolvedVc, pub module_graph: ResolvedVc, pub chunking_context: ResolvedVc>, + pub worker_type: WorkerType, pub asset_context: ResolvedVc>, - pub worker_type: WorkerReferenceSubType, } #[turbo_tasks::value_impl] @@ -39,12 +38,58 @@ impl WorkerLoaderChunkItem { #[turbo_tasks::function] async fn chunk_group(&self) -> Result> { let module = self.module.await?; - Ok(self.chunking_context.evaluated_chunk_group_assets( - module.inner.ident().with_modifier(rcstr!("worker")), - ChunkGroup::Isolated(ResolvedVc::upcast(module.inner)), - *self.module_graph, - AvailabilityInfo::root(), - )) + + Ok(match self.worker_type { + WorkerType::WebWorker | WorkerType::SharedWebWorker => { + self.chunking_context.evaluated_chunk_group_assets( + module + .inner + .ident() + .with_modifier(self.worker_type.chunk_modifier_str()), + ChunkGroup::Isolated(ResolvedVc::upcast(module.inner)), + *self.module_graph, + AvailabilityInfo::root(), + ) + } + // WorkerThreads are treated as an entry point, webworkers probably should too but + // currently it would lead to a cascade that we need to address. + WorkerType::NodeWorkerThread => { + let Some(evaluatable) = + ResolvedVc::try_sidecast::>(module.inner) + else { + bail!("Worker module must be evaluatable"); + }; + + let worker_path = self + .chunking_context + .chunk_path( + None, + module.inner.ident(), + Some(rcstr!("[worker thread]")), + rcstr!(".js"), + ) + .owned() + .await?; + + let entry_result = self + .chunking_context + .root_entry_chunk_group( + worker_path, + EvaluatableAssets::one(*evaluatable), + *self.module_graph, + OutputAssets::empty(), + OutputAssets::empty(), + ) + .await?; + + OutputAssetsWithReferenced { + assets: ResolvedVc::cell(vec![entry_result.asset]), + referenced_assets: ResolvedVc::cell(vec![]), + references: ResolvedVc::cell(vec![]), + } + .cell() + } + }) } #[turbo_tasks::function] @@ -60,43 +105,95 @@ impl WorkerLoaderChunkItem { #[turbo_tasks::value_impl] impl EcmascriptChunkItem for WorkerLoaderChunkItem { #[turbo_tasks::function] - async fn content(self: Vc) -> Result> { + fn content(self: Vc) -> Vc { + panic!("should not be called"); + } + + #[turbo_tasks::function] + async fn content_with_async_module_info( + self: Vc, + _async_module_info: Option>, + estimated: bool, + ) -> Result> { let this = self.await?; - // Get the worker entrypoint for this chunking context - let asset_context = *this.asset_context; - let entrypoint_full_path = this - .chunking_context - .worker_entrypoint(asset_context) - .path() - .await?; - - // Get the entrypoint path relative to output root - let output_root = this.chunking_context.output_root().owned().await?; - let entrypoint_path = output_root - .get_path_to(&entrypoint_full_path) - .map(|s| s.to_string()) - .unwrap_or_else(|| entrypoint_full_path.path.to_string()); - - // Get the chunk data for the worker module - let chunks_data = self.chunks_data().await?; - let chunks_data = chunks_data.iter().try_join().await?; - let chunks_data: Vec<_> = chunks_data - .iter() - .map(|chunk_data| EcmascriptChunkData::new(chunk_data)) - .collect(); - - // Determine if this is a SharedWorker - let is_shared = matches!(this.worker_type, WorkerReferenceSubType::SharedWorker); - - // Generate code that creates a worker URL with the entrypoint and chunk paths - let code = formatdoc! { - r#" - {TURBOPACK_EXPORT_VALUE}({TURBOPACK_WORKER_URL}({entrypoint}, {chunks}, {shared})); - "#, - entrypoint = StringifyJs(&entrypoint_path), - chunks = StringifyJs(&chunks_data), - shared = is_shared, + let code = match this.worker_type { + WorkerType::WebWorker | WorkerType::SharedWebWorker => { + // For web workers, generate code that creates a worker URL using the real + // entrypoint + let asset_context = *this.asset_context; + let entrypoint_full_path = this + .chunking_context + .worker_entrypoint(asset_context) + .path() + .await?; + + // Get the entrypoint path relative to output root + let output_root = this.chunking_context.output_root().owned().await?; + let entrypoint_path = output_root + .get_path_to(&entrypoint_full_path) + .map(|s| s.to_string()) + .unwrap_or_else(|| entrypoint_full_path.path.to_string()); + + // Get the chunk data for the worker module + let chunks_data = self.chunks_data().await?; + let chunks_data = chunks_data.iter().try_join().await?; + let chunks_data: Vec<_> = chunks_data + .iter() + .map(|chunk_data| EcmascriptChunkData::new(chunk_data)) + .collect(); + + // Determine if this is a SharedWorker + let is_shared = matches!(this.worker_type, WorkerType::SharedWebWorker); + + formatdoc! { + r#" + {TURBOPACK_EXPORT_VALUE}({TURBOPACK_WORKER_URL}({entrypoint}, {chunks}, {shared})); + "#, + entrypoint = StringifyJs(&entrypoint_path), + chunks = StringifyJs(&chunks_data), + shared = is_shared, + } + } + WorkerType::NodeWorkerThread => { + // For Node.js workers, export the path to the worker entry chunk + if estimated { + // In estimation mode we cannot call into chunking context APIs otherwise we + // will induce a turbo tasks cycle. But we only need an approximate solution. + formatdoc! { + r#" + {TURBOPACK_EXPORT_VALUE}(__dirname + "/" + {worker_path:#}); + "#, + worker_path = StringifyJs(&"a_fake_path_for_size_estimation"), + } + } else { + let chunk_group = self.chunk_group().await?; + let assets = chunk_group.assets.await?; + + // The last asset is the evaluate chunk (entry point) for the worker. + // The evaluated_chunk_group adds regular chunks first, then pushes the + // evaluate chunk last. The evaluate chunk contains the bootstrap code that + // loads the runtime and other chunks. For Node.js workers, we need a single + // file path (not a blob URL like browser workers), so we use the evaluate + // chunk which serves as the entry point. + let Some(entry_asset) = assets.last() else { + bail!("cannot find worker entry point asset"); + }; + let entry_path = entry_asset.path().await?; + + // Get the filename of the worker entry chunk + // We use just the filename because both the loader module and the worker + // entry chunk are in the same directory (typically server/chunks/), so we + // don't need a relative path - __dirname will already point to the correct + // directory + formatdoc! { + r#" + {TURBOPACK_EXPORT_VALUE}(__dirname + "/" + {worker_path:#}); + "#, + worker_path = StringifyJs(entry_path.file_name()), + } + } + } }; Ok(EcmascriptChunkItemContent { @@ -112,10 +209,18 @@ impl OutputAssetsReference for WorkerLoaderChunkItem { #[turbo_tasks::function] async fn references(self: Vc) -> Result> { let this = self.await?; - let asset_context = *this.asset_context; - Ok(self - .chunk_group() - .concatenate_asset(this.chunking_context.worker_entrypoint(asset_context))) + match this.worker_type { + WorkerType::WebWorker | WorkerType::SharedWebWorker => { + let asset_context = *this.asset_context; + Ok(self + .chunk_group() + .concatenate_asset(this.chunking_context.worker_entrypoint(asset_context))) + } + WorkerType::NodeWorkerThread => { + // Node.js workers don't need a separate entrypoint asset + Ok(self.chunk_group()) + } + } } } diff --git a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/mod.rs b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/mod.rs index dd8dfeedf3096..6a2d0b9d59722 100644 --- a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/mod.rs @@ -1,2 +1,5 @@ pub mod chunk_item; pub mod module; +pub mod worker_type; + +pub use worker_type::WorkerType; diff --git a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs index 806c293ce63b5..78e8e113b45f3 100644 --- a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs @@ -11,18 +11,18 @@ use turbopack_core::{ module::{Module, ModuleSideEffects}, module_graph::ModuleGraph, reference::{ModuleReference, ModuleReferences}, - reference_type::WorkerReferenceSubType, resolve::ModuleResolveResult, }; -use super::chunk_item::WorkerLoaderChunkItem; +use super::{chunk_item::WorkerLoaderChunkItem, worker_type::WorkerType}; /// The WorkerLoaderModule is a module that creates a separate root chunk group for the given module -/// and exports a URL to pass to the worker constructor. +/// and exports a URL (for web workers) or file path (for Node.js workers) to pass to the worker +/// constructor. #[turbo_tasks::value] pub struct WorkerLoaderModule { pub inner: ResolvedVc>, - pub worker_type: WorkerReferenceSubType, + pub worker_type: WorkerType, pub asset_context: ResolvedVc>, } @@ -31,7 +31,7 @@ impl WorkerLoaderModule { #[turbo_tasks::function] pub fn new( module: ResolvedVc>, - worker_type: WorkerReferenceSubType, + worker_type: WorkerType, asset_context: ResolvedVc>, ) -> Vc { Self::cell(WorkerLoaderModule { @@ -40,18 +40,15 @@ impl WorkerLoaderModule { asset_context, }) } - - #[turbo_tasks::function] - pub fn asset_ident_for(module: Vc>) -> Vc { - module.ident().with_modifier(rcstr!("worker loader")) - } } #[turbo_tasks::value_impl] impl Module for WorkerLoaderModule { #[turbo_tasks::function] fn ident(&self) -> Vc { - Self::asset_ident_for(*self.inner) + self.inner + .ident() + .with_modifier(self.worker_type.modifier_str()) } #[turbo_tasks::function] @@ -61,8 +58,9 @@ impl Module for WorkerLoaderModule { #[turbo_tasks::function] async fn references(self: Vc) -> Result> { + let this = self.await?; Ok(Vc::cell(vec![ResolvedVc::upcast( - WorkerModuleReference::new(*ResolvedVc::upcast(self.await?.inner)) + WorkerModuleReference::new(*ResolvedVc::upcast(this.inner), this.worker_type) .to_resolved() .await?, )])) @@ -99,22 +97,29 @@ impl ChunkableModule for WorkerLoaderModule { #[turbo_tasks::value] struct WorkerModuleReference { module: ResolvedVc>, + worker_type: WorkerType, } #[turbo_tasks::value_impl] impl WorkerModuleReference { #[turbo_tasks::function] - pub fn new(module: ResolvedVc>) -> Vc { - Self::cell(WorkerModuleReference { module }) + pub fn new(module: ResolvedVc>, worker_type: WorkerType) -> Vc { + Self::cell(WorkerModuleReference { + module, + worker_type, + }) } } #[turbo_tasks::value_impl] impl ChunkableModuleReference for WorkerModuleReference { #[turbo_tasks::function] - fn chunking_type(self: Vc) -> Vc { + fn chunking_type(&self) -> Vc { Vc::cell(Some(ChunkingType::Isolated { - _ty: ChunkGroupType::Evaluated, + _ty: match self.worker_type { + WorkerType::SharedWebWorker | WorkerType::WebWorker => ChunkGroupType::Evaluated, + WorkerType::NodeWorkerThread => ChunkGroupType::Entry, + }, merge_tag: None, })) } @@ -132,6 +137,10 @@ impl ModuleReference for WorkerModuleReference { impl ValueToString for WorkerModuleReference { #[turbo_tasks::function] fn to_string(&self) -> Vc { - Vc::cell(rcstr!("worker module")) + Vc::cell(match self.worker_type { + WorkerType::WebWorker => rcstr!("web worker module"), + WorkerType::NodeWorkerThread => rcstr!("node worker thread module"), + WorkerType::SharedWebWorker => rcstr!("shared web worker module"), + }) } } diff --git a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/worker_type.rs b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/worker_type.rs new file mode 100644 index 0000000000000..5b20296204e4a --- /dev/null +++ b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/worker_type.rs @@ -0,0 +1,37 @@ +use bincode::{Decode, Encode}; +use turbo_rcstr::{RcStr, rcstr}; +use turbo_tasks::{NonLocalValue, TaskInput, trace::TraceRawVcs}; +use turbopack_core::reference_type::{ReferenceType, WorkerReferenceSubType}; + +#[derive( + Debug, Clone, Copy, Hash, PartialEq, Eq, Encode, Decode, TraceRawVcs, NonLocalValue, TaskInput, +)] +pub enum WorkerType { + WebWorker, + SharedWebWorker, + NodeWorkerThread, +} + +impl WorkerType { + pub fn modifier_str(&self) -> RcStr { + match self { + WorkerType::SharedWebWorker | WorkerType::WebWorker => rcstr!("worker loader"), + WorkerType::NodeWorkerThread => rcstr!("node worker thread loader"), + } + } + + pub fn chunk_modifier_str(&self) -> RcStr { + match self { + WorkerType::SharedWebWorker | WorkerType::WebWorker => rcstr!("worker"), + WorkerType::NodeWorkerThread => rcstr!("node worker thread"), + } + } + + pub fn reference_type(&self) -> ReferenceType { + ReferenceType::Worker(match self { + WorkerType::WebWorker => WorkerReferenceSubType::WebWorker, + WorkerType::SharedWebWorker => WorkerReferenceSubType::SharedWorker, + WorkerType::NodeWorkerThread => WorkerReferenceSubType::NodeWorker, + }) + } +} diff --git a/turbopack/crates/turbopack-nodejs/src/chunking_context.rs b/turbopack/crates/turbopack-nodejs/src/chunking_context.rs index 619fa73a51e5b..0cd868470c9ab 100644 --- a/turbopack/crates/turbopack-nodejs/src/chunking_context.rs +++ b/turbopack/crates/turbopack-nodejs/src/chunking_context.rs @@ -266,25 +266,6 @@ impl NodeJsChunkingContext { #[turbo_tasks::value_impl] impl NodeJsChunkingContext { - #[turbo_tasks::function] - async fn generate_chunk( - self: Vc, - chunk: ResolvedVc>, - ) -> Result>> { - Ok( - if let Some(ecmascript_chunk) = ResolvedVc::try_downcast_type::(chunk) - { - Vc::upcast(EcmascriptBuildNodeChunk::new(self, *ecmascript_chunk)) - } else if let Some(output_asset) = - ResolvedVc::try_sidecast::>(chunk) - { - *output_asset - } else { - bail!("Unable to generate output asset for chunk"); - }, - ) - } - /// Returns the kind of runtime to include in output chunks. /// /// This is defined directly on `NodeJsChunkingContext` so it is zero-cost @@ -306,6 +287,30 @@ impl NodeJsChunkingContext { } } +impl NodeJsChunkingContext { + async fn generate_chunk( + self: Vc, + chunk: ResolvedVc>, + ) -> Result>> { + Ok( + if let Some(ecmascript_chunk) = ResolvedVc::try_downcast_type::(chunk) + { + ResolvedVc::upcast( + EcmascriptBuildNodeChunk::new(self, *ecmascript_chunk) + .to_resolved() + .await?, + ) + } else if let Some(output_asset) = + ResolvedVc::try_sidecast::>(chunk) + { + output_asset + } else { + bail!("Unable to generate output asset for chunk"); + }, + ) + } +} + #[turbo_tasks::value_impl] impl ChunkingContext for NodeJsChunkingContext { #[turbo_tasks::function] @@ -499,7 +504,7 @@ impl ChunkingContext for NodeJsChunkingContext { let assets = chunks .iter() - .map(|chunk| self.generate_chunk(**chunk).to_resolved()) + .map(|chunk| self.generate_chunk(*chunk)) .try_join() .await?; @@ -551,7 +556,7 @@ impl ChunkingContext for NodeJsChunkingContext { let extra_chunks = extra_chunks.await?; let mut other_chunks = chunks .iter() - .map(|chunk| self.generate_chunk(**chunk).to_resolved()) + .map(|chunk| self.generate_chunk(*chunk)) .try_join() .await?; other_chunks.extend(extra_chunks.iter().copied()); diff --git a/turbopack/crates/turbopack-nodejs/src/ecmascript/node/entry/chunk.rs b/turbopack/crates/turbopack-nodejs/src/ecmascript/node/entry/chunk.rs index 54b40f81b02e6..7d8e61c013017 100644 --- a/turbopack/crates/turbopack-nodejs/src/ecmascript/node/entry/chunk.rs +++ b/turbopack/crates/turbopack-nodejs/src/ecmascript/node/entry/chunk.rs @@ -166,7 +166,7 @@ impl EcmascriptBuildNodeEntryChunk { impl ValueToString for EcmascriptBuildNodeEntryChunk { #[turbo_tasks::function] fn to_string(&self) -> Vc { - Vc::cell(rcstr!("Ecmascript Build Node Evaluate Chunk")) + Vc::cell(rcstr!("Ecmascript Build Node Entry Chunk")) } } diff --git a/turbopack/crates/turbopack-resolve/src/ecmascript.rs b/turbopack/crates/turbopack-resolve/src/ecmascript.rs index d9ac715174d44..b50790f68c62f 100644 --- a/turbopack/crates/turbopack-resolve/src/ecmascript.rs +++ b/turbopack/crates/turbopack-resolve/src/ecmascript.rs @@ -94,7 +94,7 @@ pub async fn esm_resolve( issue_source: Option, ) -> Result> { let ty = ReferenceType::EcmaScriptModules(ty); - let options = apply_esm_specific_options(origin.resolve_options(ty.clone()), &ty) + let options = apply_esm_specific_options(origin.resolve_options(), &ty) .resolve() .await?; specific_resolve(origin, request, options, ty, is_optional, issue_source).await @@ -109,7 +109,7 @@ pub async fn cjs_resolve( is_optional: bool, ) -> Result> { let ty = ReferenceType::CommonJs(ty); - let options = apply_cjs_specific_options(origin.resolve_options(ty.clone())) + let options = apply_cjs_specific_options(origin.resolve_options()) .resolve() .await?; specific_resolve(origin, request, options, ty, is_optional, issue_source).await @@ -124,7 +124,7 @@ pub async fn cjs_resolve_source( is_optional: bool, ) -> Result> { let ty = ReferenceType::CommonJs(ty); - let options = apply_cjs_specific_options(origin.resolve_options(ty.clone())) + let options = apply_cjs_specific_options(origin.resolve_options()) .resolve() .await?; let result = resolve( diff --git a/turbopack/crates/turbopack-resolve/src/typescript.rs b/turbopack/crates/turbopack-resolve/src/typescript.rs index 89da0655c3976..683200b447b54 100644 --- a/turbopack/crates/turbopack-resolve/src/typescript.rs +++ b/turbopack/crates/turbopack-resolve/src/typescript.rs @@ -417,7 +417,7 @@ pub async fn type_resolve( ) -> Result> { let ty = ReferenceType::TypeScript(TypeScriptReferenceSubType::Undefined); let context_path = origin.origin_path().await?.parent(); - let options = origin.resolve_options(ty.clone()); + let options = origin.resolve_options(); let options = apply_typescript_types_options(options); let types_request = if let Request::Module { module: m, diff --git a/turbopack/crates/turbopack-test-utils/src/noop_asset_context.rs b/turbopack/crates/turbopack-test-utils/src/noop_asset_context.rs index 89bc7a43901e2..1201cc7bce6b9 100644 --- a/turbopack/crates/turbopack-test-utils/src/noop_asset_context.rs +++ b/turbopack/crates/turbopack-test-utils/src/noop_asset_context.rs @@ -32,7 +32,6 @@ impl AssetContext for NoopAssetContext { async fn resolve_options( self: Vc, _origin_path: FileSystemPath, - _reference_type: ReferenceType, ) -> Result> { Ok(ResolveOptions::default().cell()) } diff --git a/turbopack/crates/turbopack-tests/tests/execution.rs b/turbopack/crates/turbopack-tests/tests/execution.rs index d67c07e3968ba..bc4f7aea5a8b1 100644 --- a/turbopack/crates/turbopack-tests/tests/execution.rs +++ b/turbopack/crates/turbopack-tests/tests/execution.rs @@ -437,6 +437,8 @@ async fn run_test_operation(prepared_test: ResolvedVc) -> Result { + const worker = new Worker(path.join(__dirname, 'worker.js')) + + const message = await new Promise((resolve, reject) => { + worker.on('message', resolve) + worker.on('error', reject) + worker.on('exit', (code) => { + if (code !== 0) { + reject(new Error(`Worker stopped with exit code ${code}`)) + } + }) + + worker.postMessage('ping') + }) + + expect(message).toBe('pong') + await worker.terminate() + }) + + it('should handle self-referencing worker (__filename)', async () => { + const worker = new Worker(__filename) + + const message = await new Promise((resolve, reject) => { + worker.on('message', resolve) + worker.on('error', reject) + worker.on('exit', (code) => { + if (code !== 0) { + reject(new Error(`Worker stopped with exit code ${code}`)) + } + }) + + worker.postMessage('self-ref-ping') + }) + + expect(message).toBe('self-ref-pong') + await worker.terminate() + }) + + async function runDynamicWorker(workerType, args) { + const worker = new Worker(`./${workerType}-worker.js`) + + try { + return await new Promise((resolve, reject) => { + worker.on('message', resolve) + worker.on('error', reject) + worker.on('exit', (code) => { + if (code !== 0) { + reject(new Error(`Worker stopped with exit code ${code}`)) + } + }) + + worker.postMessage(args) + }) + } finally { + await worker.terminate() + } + } + + it('should handle dynamic worker selection with pattern', async () => { + const response = await runDynamicWorker('math', { a: 5, b: 3 }) + + expect(response).toEqual({ type: 'math', result: 8 }) + }) + + it('should handle another dynamic worker type', async () => { + const response = await runDynamicWorker('string', { text: 'hello' }) + + expect(response).toEqual({ type: 'string', result: 'HELLO' }) + }) +} else { + // Worker thread - handle self-referencing worker messages + parentPort.on('message', (msg) => { + if (msg === 'self-ref-ping') { + parentPort.postMessage('self-ref-pong') + } + }) +} diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/math-worker.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/math-worker.js new file mode 100644 index 0000000000000..39f1fd02b349a --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/math-worker.js @@ -0,0 +1,8 @@ +const { parentPort } = require('node:worker_threads') + +if (parentPort) { + parentPort.on('message', (data) => { + const result = data.a + data.b + parentPort.postMessage({ type: 'math', result }) + }) +} diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/string-worker.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/string-worker.js new file mode 100644 index 0000000000000..f5db69a38f89c --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/string-worker.js @@ -0,0 +1,8 @@ +const { parentPort } = require('node:worker_threads') + +if (parentPort) { + parentPort.on('message', (data) => { + const result = data.text.toUpperCase() + parentPort.postMessage({ type: 'string', result }) + }) +} diff --git a/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/worker.js b/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/worker.js new file mode 100644 index 0000000000000..90b8e4dc17868 --- /dev/null +++ b/turbopack/crates/turbopack-tests/tests/execution/turbopack/basic/worker-threads/input/worker.js @@ -0,0 +1,11 @@ +const { parentPort } = require('node:worker_threads') + +// Worker thread code +parentPort.on('message', (msg) => { + if (msg === 'ping') { + parentPort.postMessage('pong') + } else if (msg.type === 'compute') { + const result = msg.a + msg.b + parentPort.postMessage({ type: 'result', value: result }) + } +}) diff --git a/turbopack/crates/turbopack/src/lib.rs b/turbopack/crates/turbopack/src/lib.rs index 765d3d9710dfa..0f022891954ae 100644 --- a/turbopack/crates/turbopack/src/lib.rs +++ b/turbopack/crates/turbopack/src/lib.rs @@ -797,7 +797,6 @@ impl AssetContext for ModuleAssetContext { async fn resolve_options( self: Vc, origin_path: FileSystemPath, - _reference_type: ReferenceType, ) -> Result> { let this = self.await?; let module_asset_context = if let Some(transition) = this.transition { From 9e5759deedb143bfc37baaa30056558c439d6207 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Mon, 26 Jan 2026 22:00:19 +0100 Subject: [PATCH 02/11] fix: ensure LRU cache items have minimum size of 1 to prevent unbounded growth (#89040) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What? Prevent LRU cache unbounded growth by requiring `calculateSize` to return values > 0. ### Why? When `calculateSize` returned 0 (e.g., for `null` values in the filesystem route cache), items were never evicted because they didn't contribute to `totalSize`. This caused unbounded memory growth when handling dynamic routes like `/api/logs/[id]` where each unique ID created a new cache entry with size 0. ### How? 1. **LRUCache now throws an error if size ≤ 0** - This catches bugs at development time rather than silently masking them: ```typescript if (size <= 0) { throw new Error( \`LRUCache: calculateSize returned ${size}, but size must be > 0. \` + \`Items with size 0 would never be evicted, causing unbounded cache growth.\` ) } ``` 2. **Fixed filesystem.ts** - Null entries (negative cache) now return size 1 instead of 0: ```typescript if (!value) { // Null entries (negative cache) still need a non-zero size for LRU eviction return 1 } ``` 3. **Fixed next-dev-server.ts** - Static paths cache now uses `|| 1` instead of `?? 0`: ```typescript return JSON.stringify(value.staticPaths)?.length || 1 ``` --- packages/next/errors.json | 3 ++- packages/next/src/server/dev/next-dev-server.ts | 3 ++- packages/next/src/server/lib/lru-cache.ts | 6 ++++++ packages/next/src/server/lib/router-utils/filesystem.ts | 5 ++++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/next/errors.json b/packages/next/errors.json index cc588d374ef0d..c74753bd72014 100644 --- a/packages/next/errors.json +++ b/packages/next/errors.json @@ -981,5 +981,6 @@ "980": "Failed to load client middleware manifest", "981": "resolvedPathname must be set in request metadata", "982": "`serializeResumeDataCache` should not be called in edge runtime.", - "983": "Invariant: global-error module is required but not found in loader tree" + "983": "Invariant: global-error module is required but not found in loader tree", + "984": "LRUCache: calculateSize returned %s, but size must be > 0. Items with size 0 would never be evicted, causing unbounded cache growth." } diff --git a/packages/next/src/server/dev/next-dev-server.ts b/packages/next/src/server/dev/next-dev-server.ts index 40f64288442e1..c1ad69c62dda3 100644 --- a/packages/next/src/server/dev/next-dev-server.ts +++ b/packages/next/src/server/dev/next-dev-server.ts @@ -186,7 +186,8 @@ export default class DevServer extends Server { // 5MB 5 * 1024 * 1024, function length(value) { - return JSON.stringify(value.staticPaths)?.length ?? 0 + // Ensure minimum size of 1 for LRU eviction to work correctly + return JSON.stringify(value.staticPaths)?.length || 1 } ) diff --git a/packages/next/src/server/lib/lru-cache.ts b/packages/next/src/server/lib/lru-cache.ts index e8fc56809f216..4249b95a3f776 100644 --- a/packages/next/src/server/lib/lru-cache.ts +++ b/packages/next/src/server/lib/lru-cache.ts @@ -125,6 +125,12 @@ export class LRUCache { */ public set(key: string, value: T): void { const size = this.calculateSize?.(value) ?? 1 + if (size <= 0) { + throw new Error( + `LRUCache: calculateSize returned ${size}, but size must be > 0. ` + + `Items with size 0 would never be evicted, causing unbounded cache growth.` + ) + } if (size > this.maxSize) { console.warn('Single item size exceeds maxSize') return diff --git a/packages/next/src/server/lib/router-utils/filesystem.ts b/packages/next/src/server/lib/router-utils/filesystem.ts index 287e7efd6b49f..abd5cff25ae1c 100644 --- a/packages/next/src/server/lib/router-utils/filesystem.ts +++ b/packages/next/src/server/lib/router-utils/filesystem.ts @@ -113,7 +113,10 @@ export async function setupFsCheck(opts: { }) { const getItemsLru = !opts.dev ? new LRUCache(1024 * 1024, function length(value) { - if (!value) return 0 + if (!value) { + // Null entries (negative cache) still need a non-zero size for LRU eviction + return 1 + } return ( (value.fsPath || '').length + value.itemPath.length + From 0efb346e58ad509a454507af715e171326c9b24b Mon Sep 17 00:00:00 2001 From: Hendrik Liebau Date: Mon, 26 Jan 2026 22:30:54 +0100 Subject: [PATCH 03/11] Upgrade React from `24d8716e-20260123` to `8c34556c-20260126` (#89066) --- ...om-turbopack-client.browser.development.js | 239 +++-- ...dom-turbopack-client.browser.production.js | 122 ++- ...r-dom-turbopack-client.edge.development.js | 235 +++-- ...er-dom-turbopack-client.edge.production.js | 122 ++- ...r-dom-turbopack-client.node.development.js | 235 +++-- ...er-dom-turbopack-client.node.production.js | 122 ++- ...om-turbopack-server.browser.development.js | 945 ++++++++++------- ...dom-turbopack-server.browser.production.js | 885 ++++++++++------ ...r-dom-turbopack-server.edge.development.js | 949 ++++++++++------- ...er-dom-turbopack-server.edge.production.js | 889 ++++++++++------ ...r-dom-turbopack-server.node.development.js | 959 +++++++++++------- ...er-dom-turbopack-server.node.production.js | 899 ++++++++++------ .../package.json | 4 +- ...om-turbopack-client.browser.development.js | 239 +++-- ...dom-turbopack-client.browser.production.js | 122 ++- ...r-dom-turbopack-client.edge.development.js | 235 +++-- ...er-dom-turbopack-client.edge.production.js | 122 ++- ...r-dom-turbopack-client.node.development.js | 235 +++-- ...er-dom-turbopack-client.node.production.js | 122 ++- ...om-turbopack-server.browser.development.js | 945 ++++++++++------- ...dom-turbopack-server.browser.production.js | 885 ++++++++++------ ...r-dom-turbopack-server.edge.development.js | 949 ++++++++++------- ...er-dom-turbopack-server.edge.production.js | 889 ++++++++++------ ...r-dom-turbopack-server.node.development.js | 959 +++++++++++------- ...er-dom-turbopack-server.node.production.js | 899 ++++++++++------ .../react-server-dom-turbopack/package.json | 4 +- ...-dom-webpack-client.browser.development.js | 239 +++-- ...r-dom-webpack-client.browser.production.js | 122 ++- ...ver-dom-webpack-client.edge.development.js | 235 +++-- ...rver-dom-webpack-client.edge.production.js | 122 ++- ...ver-dom-webpack-client.node.development.js | 235 +++-- ...rver-dom-webpack-client.node.production.js | 122 ++- ...-dom-webpack-server.browser.development.js | 945 ++++++++++------- ...r-dom-webpack-server.browser.production.js | 885 ++++++++++------ ...ver-dom-webpack-server.edge.development.js | 949 ++++++++++------- ...rver-dom-webpack-server.edge.production.js | 889 ++++++++++------ ...ver-dom-webpack-server.node.development.js | 959 +++++++++++------- ...rver-dom-webpack-server.node.production.js | 899 ++++++++++------ .../package.json | 4 +- ...-dom-webpack-client.browser.development.js | 239 +++-- ...r-dom-webpack-client.browser.production.js | 122 ++- ...ver-dom-webpack-client.edge.development.js | 235 +++-- ...rver-dom-webpack-client.edge.production.js | 122 ++- ...ver-dom-webpack-client.node.development.js | 235 +++-- ...rver-dom-webpack-client.node.production.js | 122 ++- ...-dom-webpack-server.browser.development.js | 945 ++++++++++------- ...r-dom-webpack-server.browser.production.js | 885 ++++++++++------ ...ver-dom-webpack-server.edge.development.js | 949 ++++++++++------- ...rver-dom-webpack-server.edge.production.js | 889 ++++++++++------ ...ver-dom-webpack-server.node.development.js | 959 +++++++++++------- ...rver-dom-webpack-server.node.production.js | 899 ++++++++++------ .../react-server-dom-webpack/package.json | 4 +- packages/next/taskfile.js | 4 +- 53 files changed, 16614 insertions(+), 9810 deletions(-) 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 44612abdf9692..f26a58de53aa5 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 @@ -419,6 +419,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -663,17 +668,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2030,7 +2038,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2058,7 +2073,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2222,7 +2237,7 @@ metaData.id, metaData.bound ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2481,20 +2496,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2698,13 +2714,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4532,83 +4549,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { @@ -5000,10 +5019,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-24d8716e-20260123", + version: "19.3.0-experimental-8c34556c-20260126", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-24d8716e-20260123", + reconcilerVersion: "19.3.0-experimental-8c34556c-20260126", 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 b2df86e17d76e..a175938d8bef1 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 @@ -433,17 +433,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -858,7 +861,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -867,26 +877,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -997,7 +1007,7 @@ function loadServerReference(response, metaData, parentObject, key) { resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs); } registerBoundServerReference(resolvedValue, metaData.id, metaData.bound); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1402,8 +1412,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1411,10 +1421,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1575,8 +1585,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -1754,37 +1764,39 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 5950f374b7ed8..7a426fe66bd96 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 @@ -444,6 +444,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -688,17 +693,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2186,7 +2194,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2214,7 +2229,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2384,7 +2399,7 @@ metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2643,20 +2658,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2860,13 +2876,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4574,83 +4591,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 58ab74ad57a20..b8f2deb8ab7e4 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 @@ -454,17 +454,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -1028,7 +1031,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -1037,26 +1047,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1181,7 +1191,7 @@ function loadServerReference(response, metaData, parentObject, key) { metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1591,8 +1601,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1600,10 +1610,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1764,8 +1774,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -1943,37 +1953,39 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 0b20360fd0765..7d7859482e4ea 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 @@ -444,6 +444,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -688,17 +693,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2186,7 +2194,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2214,7 +2229,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2384,7 +2399,7 @@ metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2643,20 +2658,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2860,13 +2876,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4699,83 +4716,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 c81ea6caa5a1f..d6dff8fe0c31d 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 @@ -455,17 +455,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -1029,7 +1032,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -1038,26 +1048,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1182,7 +1192,7 @@ function loadServerReference(response, metaData, parentObject, key) { metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1595,8 +1605,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1604,10 +1614,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1768,8 +1778,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -2047,37 +2057,39 @@ function processBinaryChunk(weakResponse, streamState, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 ed8eebf7f0f4f..18af3c21573d2 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 @@ -2375,6 +2375,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -3955,12 +3962,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -3971,27 +3978,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4015,57 +4001,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4089,15 +4043,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4109,93 +4099,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4209,13 +4213,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4227,19 +4233,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4254,7 +4261,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4275,14 +4283,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4293,24 +4307,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4322,31 +4362,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4359,31 +4434,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4392,13 +4470,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4409,13 +4499,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4427,40 +4538,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4478,90 +4581,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -4572,7 +4663,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -4651,19 +4742,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -4679,27 +4781,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -4712,15 +4831,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -4728,22 +4880,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -4751,17 +4960,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -4772,8 +4988,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -4785,6 +5009,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -4793,19 +5019,32 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -4814,8 +5053,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -5399,6 +5649,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -5408,20 +5664,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -5457,7 +5717,8 @@ turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); 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 6f9b9e816479c..2163005b20a26 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 @@ -2368,12 +2368,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2384,27 +2384,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2440,33 +2419,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2483,7 +2440,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2506,15 +2464,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2526,74 +2519,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2607,13 +2631,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2625,19 +2651,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2652,7 +2679,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2669,14 +2697,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2687,24 +2721,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2716,62 +2769,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2780,13 +2868,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2797,13 +2897,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2815,37 +2936,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2861,86 +2977,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$33 = new ReactPromise("pending", null, null); - chunk$33.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$33; - chunk.then(function () { - previousBlockedChunk === chunk$33 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$33, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$34 = new ReactPromise("pending", null, null); + chunk$34.then(enqueue, flightController.error); + previousBlockedChunk = chunk$34; + chunk.then(function () { + previousBlockedChunk === chunk$34 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$34, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2952,7 +3060,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -3032,17 +3140,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3055,27 +3174,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3088,42 +3217,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3134,8 +3371,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3143,6 +3381,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3151,19 +3391,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3172,8 +3423,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3189,16 +3451,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3234,7 +3504,8 @@ exports.decodeReply = function (body, turbopackMap, options) { turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); 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 c39cdcb38befb..1bfd9a6840f60 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 @@ -2435,6 +2435,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -4029,12 +4036,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -4045,27 +4052,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4089,57 +4075,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4163,15 +4117,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4183,93 +4173,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4283,13 +4287,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4301,19 +4307,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4328,7 +4335,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4349,14 +4357,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4367,24 +4381,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4396,31 +4436,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4433,31 +4508,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4466,13 +4544,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4483,13 +4573,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4501,40 +4612,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4552,90 +4655,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -4646,7 +4737,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -4725,19 +4816,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -4753,27 +4855,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -4786,15 +4905,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -4802,22 +4954,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -4825,17 +5034,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -4846,8 +5062,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -4859,6 +5083,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -4867,19 +5093,32 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -4888,8 +5127,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -5473,6 +5723,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -5482,20 +5738,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -5531,7 +5791,8 @@ turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); @@ -5571,7 +5832,9 @@ response$jscomp$0 = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response$jscomp$0, 0); 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 fc9da7ea70db8..248a1b7be6159 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 @@ -2372,12 +2372,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2388,27 +2388,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2444,33 +2423,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2487,7 +2444,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2510,15 +2468,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2530,74 +2523,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2611,13 +2635,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2629,19 +2655,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2656,7 +2683,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2673,14 +2701,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2691,24 +2725,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2720,62 +2773,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2784,13 +2872,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2801,13 +2901,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2819,37 +2940,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2865,86 +2981,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$33 = new ReactPromise("pending", null, null); - chunk$33.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$33; - chunk.then(function () { - previousBlockedChunk === chunk$33 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$33, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$34 = new ReactPromise("pending", null, null); + chunk$34.then(enqueue, flightController.error); + previousBlockedChunk = chunk$34; + chunk.then(function () { + previousBlockedChunk === chunk$34 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$34, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2956,7 +3064,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -3036,17 +3144,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3059,27 +3178,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3092,42 +3221,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3138,8 +3375,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3147,6 +3385,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3155,19 +3395,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3176,8 +3427,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3193,16 +3455,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3238,7 +3508,8 @@ exports.decodeReply = function (body, turbopackMap, options) { turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); @@ -3277,7 +3548,9 @@ exports.decodeReplyFromAsyncIterable = function ( response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); 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 0483a989c142e..c37ab54f440cb 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 @@ -2683,6 +2683,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -4476,12 +4483,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -4492,27 +4499,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4536,57 +4522,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4610,15 +4564,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4630,93 +4620,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4730,13 +4734,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4748,19 +4754,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4775,7 +4782,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4796,14 +4804,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4814,24 +4828,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4843,31 +4883,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4880,31 +4955,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4913,13 +4991,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4930,13 +5020,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4948,40 +5059,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4999,90 +5102,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -5093,7 +5184,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -5172,19 +5263,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -5200,27 +5302,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -5233,15 +5352,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -5249,22 +5401,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -5272,17 +5481,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -5293,8 +5509,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -5306,6 +5530,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -5314,7 +5540,9 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function resolveField(response, key, value) { @@ -5330,13 +5558,24 @@ function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -5345,8 +5584,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -6152,6 +6402,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -6161,20 +6417,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -6210,7 +6470,8 @@ turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); @@ -6242,7 +6503,9 @@ response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); @@ -6255,7 +6518,9 @@ var response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ), pendingFiles = 0, queuedFields = []; @@ -6279,13 +6544,13 @@ ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_286 = []; + var JSCompiler_object_inline_chunks_281 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_286.push(chunk); + JSCompiler_object_inline_chunks_281.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_286, { + var blob = new Blob(JSCompiler_object_inline_chunks_281, { type: mimeType }); response._formData.append(name, blob, filename); 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 a092d8dc0668a..b3994e5247fef 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 @@ -2402,12 +2402,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2418,27 +2418,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2474,33 +2453,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2517,7 +2474,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2540,15 +2498,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2560,74 +2553,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2641,13 +2665,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2659,19 +2685,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2686,7 +2713,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2703,14 +2731,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2721,24 +2755,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2750,62 +2803,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2814,13 +2902,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2831,13 +2931,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2849,37 +2970,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2895,86 +3011,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$33 = new ReactPromise("pending", null, null); - chunk$33.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$33; - chunk.then(function () { - previousBlockedChunk === chunk$33 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$33, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$34 = new ReactPromise("pending", null, null); + chunk$34.then(enqueue, flightController.error); + previousBlockedChunk = chunk$34; + chunk.then(function () { + previousBlockedChunk === chunk$34 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$34, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2986,7 +3094,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -3066,17 +3174,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3089,27 +3208,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3122,42 +3251,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3168,8 +3405,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3177,6 +3415,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3185,7 +3425,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function resolveField(response, key, value) { @@ -3201,13 +3443,22 @@ function resolveField(response, key, value) { function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3216,8 +3467,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3274,16 +3536,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3319,7 +3589,8 @@ exports.decodeReply = function (body, turbopackMap, options) { turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); @@ -3351,7 +3622,9 @@ exports.decodeReplyFromAsyncIterable = function ( response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); @@ -3360,7 +3633,9 @@ exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { var response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ), pendingFiles = 0, queuedFields = []; @@ -3384,13 +3659,13 @@ exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_294 = []; + var JSCompiler_object_inline_chunks_290 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_294.push(chunk); + JSCompiler_object_inline_chunks_290.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_294, { + var blob = new Blob(JSCompiler_object_inline_chunks_290, { type: mimeType }); response._formData.append(name, blob, filename); 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 c6cb2ed85a946..b615e82b3143a 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-24d8716e-20260123", - "react-dom": "0.0.0-experimental-24d8716e-20260123" + "react": "0.0.0-experimental-8c34556c-20260126", + "react-dom": "0.0.0-experimental-8c34556c-20260126" } } \ No newline at end of file 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 cc0da97f4ae40..1436a60edb977 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 @@ -419,6 +419,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -663,17 +668,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2030,7 +2038,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2058,7 +2073,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2222,7 +2237,7 @@ metaData.id, metaData.bound ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2481,20 +2496,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2698,13 +2714,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4532,83 +4549,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { @@ -5000,10 +5019,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-24d8716e-20260123", + version: "19.3.0-canary-8c34556c-20260126", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-24d8716e-20260123", + reconcilerVersion: "19.3.0-canary-8c34556c-20260126", 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 b2df86e17d76e..a175938d8bef1 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 @@ -433,17 +433,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -858,7 +861,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -867,26 +877,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -997,7 +1007,7 @@ function loadServerReference(response, metaData, parentObject, key) { resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs); } registerBoundServerReference(resolvedValue, metaData.id, metaData.bound); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1402,8 +1412,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1411,10 +1421,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1575,8 +1585,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -1754,37 +1764,39 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 5950f374b7ed8..7a426fe66bd96 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 @@ -444,6 +444,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -688,17 +693,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2186,7 +2194,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2214,7 +2229,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2384,7 +2399,7 @@ metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2643,20 +2658,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2860,13 +2876,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4574,83 +4591,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 58ab74ad57a20..b8f2deb8ab7e4 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 @@ -454,17 +454,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -1028,7 +1031,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -1037,26 +1047,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1181,7 +1191,7 @@ function loadServerReference(response, metaData, parentObject, key) { metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1591,8 +1601,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1600,10 +1610,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1764,8 +1774,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -1943,37 +1953,39 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 0b20360fd0765..7d7859482e4ea 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 @@ -444,6 +444,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -688,17 +693,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2186,7 +2194,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2214,7 +2229,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2384,7 +2399,7 @@ metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2643,20 +2658,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2860,13 +2876,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4699,83 +4716,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 c81ea6caa5a1f..d6dff8fe0c31d 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 @@ -455,17 +455,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -1029,7 +1032,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -1038,26 +1048,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1182,7 +1192,7 @@ function loadServerReference(response, metaData, parentObject, key) { metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1595,8 +1605,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1604,10 +1614,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1768,8 +1778,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -2047,37 +2057,39 @@ function processBinaryChunk(weakResponse, streamState, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 a620a33fda853..bbdd1de6da7c3 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 @@ -2357,6 +2357,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -3909,12 +3916,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -3925,27 +3932,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -3969,57 +3955,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4043,15 +3997,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4063,93 +4053,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4163,13 +4167,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4181,19 +4187,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4208,7 +4215,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4229,14 +4237,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4247,24 +4261,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4276,31 +4316,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4313,31 +4388,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4346,13 +4424,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4363,13 +4453,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4381,40 +4492,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4432,90 +4535,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -4526,7 +4617,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -4605,19 +4696,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -4633,27 +4735,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -4666,15 +4785,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -4682,22 +4834,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -4705,17 +4914,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -4726,8 +4942,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -4739,6 +4963,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -4747,19 +4973,32 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -4768,8 +5007,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -5347,6 +5597,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -5356,20 +5612,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -5405,7 +5665,8 @@ turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); 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 b148acc1a6ed7..808a20919bee0 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 @@ -2319,12 +2319,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2335,27 +2335,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2391,33 +2370,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2434,7 +2391,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2457,15 +2415,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2477,74 +2470,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2558,13 +2582,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2576,19 +2602,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2603,7 +2630,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2620,14 +2648,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2638,24 +2672,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2667,62 +2720,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2731,13 +2819,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2748,13 +2848,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2766,37 +2887,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2812,86 +2928,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$30 = new ReactPromise("pending", null, null); - chunk$30.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$30; - chunk.then(function () { - previousBlockedChunk === chunk$30 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$30, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$31 = new ReactPromise("pending", null, null); + chunk$31.then(enqueue, flightController.error); + previousBlockedChunk = chunk$31; + chunk.then(function () { + previousBlockedChunk === chunk$31 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$31, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2903,7 +3011,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -2983,17 +3091,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3006,27 +3125,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3039,42 +3168,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3085,8 +3322,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3094,6 +3332,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3102,19 +3342,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3123,8 +3374,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3140,16 +3402,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3185,7 +3455,8 @@ exports.decodeReply = function (body, turbopackMap, options) { turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); 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 5485c93ba9b16..836ea4d6899ce 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 @@ -2417,6 +2417,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -3983,12 +3990,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -3999,27 +4006,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4043,57 +4029,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4117,15 +4071,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4137,93 +4127,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4237,13 +4241,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4255,19 +4261,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4282,7 +4289,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4303,14 +4311,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4321,24 +4335,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4350,31 +4390,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4387,31 +4462,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4420,13 +4498,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4437,13 +4527,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4455,40 +4566,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4506,90 +4609,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -4600,7 +4691,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -4679,19 +4770,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -4707,27 +4809,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -4740,15 +4859,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -4756,22 +4908,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -4779,17 +4988,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -4800,8 +5016,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -4813,6 +5037,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -4821,19 +5047,32 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -4842,8 +5081,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -5421,6 +5671,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -5430,20 +5686,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -5479,7 +5739,8 @@ turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); @@ -5519,7 +5780,9 @@ response$jscomp$0 = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response$jscomp$0, 0); 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 e03d9dcd39b3b..0fd3601131e66 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 @@ -2323,12 +2323,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2339,27 +2339,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2395,33 +2374,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2438,7 +2395,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2461,15 +2419,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2481,74 +2474,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2562,13 +2586,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2580,19 +2606,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2607,7 +2634,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2624,14 +2652,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2642,24 +2676,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2671,62 +2724,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2735,13 +2823,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2752,13 +2852,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2770,37 +2891,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2816,86 +2932,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$30 = new ReactPromise("pending", null, null); - chunk$30.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$30; - chunk.then(function () { - previousBlockedChunk === chunk$30 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$30, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$31 = new ReactPromise("pending", null, null); + chunk$31.then(enqueue, flightController.error); + previousBlockedChunk = chunk$31; + chunk.then(function () { + previousBlockedChunk === chunk$31 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$31, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2907,7 +3015,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -2987,17 +3095,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3010,27 +3129,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3043,42 +3172,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3089,8 +3326,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3098,6 +3336,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3106,19 +3346,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3127,8 +3378,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3144,16 +3406,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3189,7 +3459,8 @@ exports.decodeReply = function (body, turbopackMap, options) { turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); @@ -3228,7 +3499,9 @@ exports.decodeReplyFromAsyncIterable = function ( response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); 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 2d39cd2ac4ca5..2b6920832a4c9 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 @@ -2665,6 +2665,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -4430,12 +4437,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -4446,27 +4453,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4490,57 +4476,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4564,15 +4518,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4584,93 +4574,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4684,13 +4688,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4702,19 +4708,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4729,7 +4736,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4750,14 +4758,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4768,24 +4782,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4797,31 +4837,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4834,31 +4909,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4867,13 +4945,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4884,13 +4974,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4902,40 +5013,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4953,90 +5056,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -5047,7 +5138,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -5126,19 +5217,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -5154,27 +5256,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -5187,15 +5306,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -5203,22 +5355,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -5226,17 +5435,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -5247,8 +5463,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -5260,6 +5484,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -5268,7 +5494,9 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function resolveField(response, key, value) { @@ -5284,13 +5512,24 @@ function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -5299,8 +5538,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -6100,6 +6350,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -6109,20 +6365,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -6158,7 +6418,8 @@ turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); @@ -6190,7 +6451,9 @@ response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); @@ -6203,7 +6466,9 @@ var response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ), pendingFiles = 0, queuedFields = []; @@ -6227,13 +6492,13 @@ ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_286 = []; + var JSCompiler_object_inline_chunks_281 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_286.push(chunk); + JSCompiler_object_inline_chunks_281.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_286, { + var blob = new Blob(JSCompiler_object_inline_chunks_281, { type: mimeType }); response._formData.append(name, blob, filename); 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 e25bb9546fb53..12407d6933093 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 @@ -2353,12 +2353,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2369,27 +2369,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2425,33 +2404,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2468,7 +2425,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2491,15 +2449,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2511,74 +2504,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2592,13 +2616,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2610,19 +2636,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2637,7 +2664,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2654,14 +2682,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2672,24 +2706,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2701,62 +2754,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2765,13 +2853,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2782,13 +2882,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2800,37 +2921,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2846,86 +2962,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$30 = new ReactPromise("pending", null, null); - chunk$30.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$30; - chunk.then(function () { - previousBlockedChunk === chunk$30 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$30, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$31 = new ReactPromise("pending", null, null); + chunk$31.then(enqueue, flightController.error); + previousBlockedChunk = chunk$31; + chunk.then(function () { + previousBlockedChunk === chunk$31 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$31, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2937,7 +3045,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -3017,17 +3125,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3040,27 +3159,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3073,42 +3202,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3119,8 +3356,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3128,6 +3366,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3136,7 +3376,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function resolveField(response, key, value) { @@ -3152,13 +3394,22 @@ function resolveField(response, key, value) { function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3167,8 +3418,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3225,16 +3487,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3270,7 +3540,8 @@ exports.decodeReply = function (body, turbopackMap, options) { turbopackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); turbopackMap = getChunk(body, 0); close(body); @@ -3302,7 +3573,9 @@ exports.decodeReplyFromAsyncIterable = function ( response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); @@ -3311,7 +3584,9 @@ exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { var response = createResponse( turbopackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ), pendingFiles = 0, queuedFields = []; @@ -3335,13 +3610,13 @@ exports.decodeReplyFromBusboy = function (busboyStream, turbopackMap, options) { ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_291 = []; + var JSCompiler_object_inline_chunks_287 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_291.push(chunk); + JSCompiler_object_inline_chunks_287.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_291, { + var blob = new Blob(JSCompiler_object_inline_chunks_287, { type: mimeType }); response._formData.append(name, blob, filename); 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 2d405c6f0b6cc..5af775e6b78ee 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-24d8716e-20260123", - "react-dom": "19.3.0-canary-24d8716e-20260123" + "react": "19.3.0-canary-8c34556c-20260126", + "react-dom": "19.3.0-canary-8c34556c-20260126" } } \ No newline at end of file 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 3019f84c21db6..54f5589a854fb 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 @@ -426,6 +426,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -670,17 +675,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2039,7 +2047,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2067,7 +2082,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2231,7 +2246,7 @@ metaData.id, metaData.bound ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2490,20 +2505,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2707,13 +2723,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4541,83 +4558,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { @@ -5016,10 +5035,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-24d8716e-20260123", + version: "19.3.0-experimental-8c34556c-20260126", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-24d8716e-20260123", + reconcilerVersion: "19.3.0-experimental-8c34556c-20260126", 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 4fe0afc4934c8..9fbc59a6b43a4 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 @@ -444,17 +444,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -869,7 +872,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -878,26 +888,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1008,7 +1018,7 @@ function loadServerReference(response, metaData, parentObject, key) { resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs); } registerBoundServerReference(resolvedValue, metaData.id, metaData.bound); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1413,8 +1423,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1422,10 +1432,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1586,8 +1596,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -1765,37 +1775,39 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 f16b2625fbc72..8b1246b6c4dc1 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 @@ -447,6 +447,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -691,17 +696,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2189,7 +2197,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2217,7 +2232,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2387,7 +2402,7 @@ metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2646,20 +2661,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2863,13 +2879,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4577,83 +4594,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 1fed366e75cc0..c580598dcf472 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 @@ -456,17 +456,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -1030,7 +1033,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -1039,26 +1049,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1183,7 +1193,7 @@ function loadServerReference(response, metaData, parentObject, key) { metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1593,8 +1603,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1602,10 +1612,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1766,8 +1776,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -1945,37 +1955,39 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 c8d915ff6ff65..e7560e30da90d 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 @@ -447,6 +447,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -691,17 +696,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2189,7 +2197,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2217,7 +2232,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2387,7 +2402,7 @@ metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2646,20 +2661,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2863,13 +2879,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4702,83 +4719,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 4b2cc78580ea1..1372893b471c4 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 @@ -457,17 +457,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -1031,7 +1034,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -1040,26 +1050,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1184,7 +1194,7 @@ function loadServerReference(response, metaData, parentObject, key) { metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1597,8 +1607,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1606,10 +1616,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1770,8 +1780,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -2049,37 +2059,39 @@ function processBinaryChunk(weakResponse, streamState, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 de2864c2a08c7..9d49b4a4fd1c3 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 @@ -2375,6 +2375,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -3962,12 +3969,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -3978,27 +3985,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4022,57 +4008,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4096,15 +4050,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4116,93 +4106,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4216,13 +4220,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4234,19 +4240,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4261,7 +4268,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4282,14 +4290,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4300,24 +4314,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4329,31 +4369,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4366,31 +4441,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4399,13 +4477,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4416,13 +4506,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4434,40 +4545,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4485,90 +4588,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -4579,7 +4670,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -4658,19 +4749,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -4686,27 +4788,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -4719,15 +4838,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -4735,22 +4887,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -4758,17 +4967,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -4779,8 +4995,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -4792,6 +5016,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -4800,19 +5026,32 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -4821,8 +5060,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -5413,6 +5663,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -5422,20 +5678,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -5471,7 +5731,8 @@ webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); 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 f6099be38fe07..9afbddcc9f67a 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 @@ -2379,12 +2379,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2395,27 +2395,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2451,33 +2430,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2494,7 +2451,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2517,15 +2475,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2537,74 +2530,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2618,13 +2642,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2636,19 +2662,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2663,7 +2690,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2680,14 +2708,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2698,24 +2732,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2727,62 +2780,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2791,13 +2879,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2808,13 +2908,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2826,37 +2947,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2872,86 +2988,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$33 = new ReactPromise("pending", null, null); - chunk$33.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$33; - chunk.then(function () { - previousBlockedChunk === chunk$33 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$33, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$34 = new ReactPromise("pending", null, null); + chunk$34.then(enqueue, flightController.error); + previousBlockedChunk = chunk$34; + chunk.then(function () { + previousBlockedChunk === chunk$34 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$34, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2963,7 +3071,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -3043,17 +3151,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3066,27 +3185,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3099,42 +3228,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3145,8 +3382,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3154,6 +3392,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3162,19 +3402,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3183,8 +3434,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3200,16 +3462,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3245,7 +3515,8 @@ exports.decodeReply = function (body, webpackMap, options) { webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); 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 89b1148d39b21..6c41aa3831dd4 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 @@ -2435,6 +2435,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -4032,12 +4039,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -4048,27 +4055,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4092,57 +4078,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4166,15 +4120,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4186,93 +4176,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4286,13 +4290,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4304,19 +4310,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4331,7 +4338,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4352,14 +4360,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4370,24 +4384,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4399,31 +4439,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4436,31 +4511,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4469,13 +4547,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4486,13 +4576,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4504,40 +4615,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4555,90 +4658,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -4649,7 +4740,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -4728,19 +4819,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -4756,27 +4858,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -4789,15 +4908,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -4805,22 +4957,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -4828,17 +5037,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -4849,8 +5065,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -4862,6 +5086,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -4870,19 +5096,32 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -4891,8 +5130,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -5475,6 +5725,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -5484,20 +5740,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -5533,7 +5793,8 @@ webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); @@ -5573,7 +5834,9 @@ response$jscomp$0 = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response$jscomp$0, 0); 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 3c7acc3cf65ed..84e1035af1c56 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 @@ -2374,12 +2374,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2390,27 +2390,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2446,33 +2425,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2489,7 +2446,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2512,15 +2470,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2532,74 +2525,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2613,13 +2637,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2631,19 +2657,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2658,7 +2685,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2675,14 +2703,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2693,24 +2727,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2722,62 +2775,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2786,13 +2874,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2803,13 +2903,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2821,37 +2942,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2867,86 +2983,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$33 = new ReactPromise("pending", null, null); - chunk$33.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$33; - chunk.then(function () { - previousBlockedChunk === chunk$33 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$33, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$34 = new ReactPromise("pending", null, null); + chunk$34.then(enqueue, flightController.error); + previousBlockedChunk = chunk$34; + chunk.then(function () { + previousBlockedChunk === chunk$34 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$34, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2958,7 +3066,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -3038,17 +3146,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3061,27 +3180,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3094,42 +3223,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3140,8 +3377,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3149,6 +3387,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3157,19 +3397,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3178,8 +3429,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3195,16 +3457,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3240,7 +3510,8 @@ exports.decodeReply = function (body, webpackMap, options) { webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); @@ -3279,7 +3550,9 @@ exports.decodeReplyFromAsyncIterable = function ( response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); 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 70de5228cdd10..057ae0dc4ef96 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 @@ -2683,6 +2683,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -4479,12 +4486,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -4495,27 +4502,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4539,57 +4525,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4613,15 +4567,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4633,93 +4623,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4733,13 +4737,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4751,19 +4757,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4778,7 +4785,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4799,14 +4807,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4817,24 +4831,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4846,31 +4886,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4883,31 +4958,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4916,13 +4994,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4933,13 +5023,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4951,40 +5062,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -5002,90 +5105,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -5096,7 +5187,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -5175,19 +5266,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -5203,27 +5305,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -5236,15 +5355,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -5252,22 +5404,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -5275,17 +5484,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -5296,8 +5512,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -5309,6 +5533,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -5317,7 +5543,9 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function resolveField(response, key, value) { @@ -5333,13 +5561,24 @@ function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -5348,8 +5587,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -6154,6 +6404,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -6163,20 +6419,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -6212,7 +6472,8 @@ webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); @@ -6244,7 +6505,9 @@ response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); @@ -6257,7 +6520,9 @@ var response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ), pendingFiles = 0, queuedFields = []; @@ -6281,13 +6546,13 @@ ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_286 = []; + var JSCompiler_object_inline_chunks_281 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_286.push(chunk); + JSCompiler_object_inline_chunks_281.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_286, { + var blob = new Blob(JSCompiler_object_inline_chunks_281, { type: mimeType }); response._formData.append(name, blob, filename); 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 9f1ce367dff1e..9691f2d915048 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 @@ -2404,12 +2404,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2420,27 +2420,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2476,33 +2455,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2519,7 +2476,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2542,15 +2500,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2562,74 +2555,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2643,13 +2667,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2661,19 +2687,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2688,7 +2715,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2705,14 +2733,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2723,24 +2757,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2752,62 +2805,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2816,13 +2904,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2833,13 +2933,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2851,37 +2972,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2897,86 +3013,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$33 = new ReactPromise("pending", null, null); - chunk$33.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$33; - chunk.then(function () { - previousBlockedChunk === chunk$33 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$33, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$34 = new ReactPromise("pending", null, null); + chunk$34.then(enqueue, flightController.error); + previousBlockedChunk = chunk$34; + chunk.then(function () { + previousBlockedChunk === chunk$34 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$34, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2988,7 +3096,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -3068,17 +3176,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3091,27 +3210,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3124,42 +3253,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3170,8 +3407,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3179,6 +3417,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3187,7 +3427,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function resolveField(response, key, value) { @@ -3203,13 +3445,22 @@ function resolveField(response, key, value) { function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3218,8 +3469,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3276,16 +3538,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3321,7 +3591,8 @@ exports.decodeReply = function (body, webpackMap, options) { webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); @@ -3353,7 +3624,9 @@ exports.decodeReplyFromAsyncIterable = function ( response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); @@ -3362,7 +3635,9 @@ exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { var response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ), pendingFiles = 0, queuedFields = []; @@ -3386,13 +3661,13 @@ exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_294 = []; + var JSCompiler_object_inline_chunks_290 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_294.push(chunk); + JSCompiler_object_inline_chunks_290.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_294, { + var blob = new Blob(JSCompiler_object_inline_chunks_290, { type: mimeType }); response._formData.append(name, blob, filename); 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 2ca11d9f09c71..9d354b483b17b 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-24d8716e-20260123", - "react-dom": "0.0.0-experimental-24d8716e-20260123", + "react": "0.0.0-experimental-8c34556c-20260126", + "react-dom": "0.0.0-experimental-8c34556c-20260126", "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 b7eb7fc28b8d9..58d330511f7e8 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 @@ -426,6 +426,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -670,17 +675,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2039,7 +2047,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2067,7 +2082,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2231,7 +2246,7 @@ metaData.id, metaData.bound ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2490,20 +2505,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2707,13 +2723,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4541,83 +4558,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { @@ -5016,10 +5035,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-24d8716e-20260123", + version: "19.3.0-canary-8c34556c-20260126", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-24d8716e-20260123", + reconcilerVersion: "19.3.0-canary-8c34556c-20260126", 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 4fe0afc4934c8..9fbc59a6b43a4 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 @@ -444,17 +444,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -869,7 +872,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -878,26 +888,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1008,7 +1018,7 @@ function loadServerReference(response, metaData, parentObject, key) { resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs); } registerBoundServerReference(resolvedValue, metaData.id, metaData.bound); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1413,8 +1423,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1422,10 +1432,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1586,8 +1596,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -1765,37 +1775,39 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 f16b2625fbc72..8b1246b6c4dc1 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 @@ -447,6 +447,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -691,17 +696,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2189,7 +2197,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2217,7 +2232,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2387,7 +2402,7 @@ metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2646,20 +2661,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2863,13 +2879,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4577,83 +4594,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 1fed366e75cc0..c580598dcf472 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 @@ -456,17 +456,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -1030,7 +1033,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -1039,26 +1049,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1183,7 +1193,7 @@ function loadServerReference(response, metaData, parentObject, key) { metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1593,8 +1603,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1602,10 +1612,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1766,8 +1776,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -1945,37 +1955,39 @@ function processFullBinaryRow(response, streamState, id, tag, buffer, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 c8d915ff6ff65..e7560e30da90d 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 @@ -447,6 +447,11 @@ return "$" + (iterable ? "x" : "X") + streamId.toString(16); } function resolveToJSON(key, value) { + "__proto__" === key && + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(this, key) + ); var originalValue = this[key]; "object" !== typeof originalValue || originalValue === value || @@ -691,17 +696,20 @@ if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -2189,7 +2197,14 @@ } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -2217,7 +2232,7 @@ } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -2387,7 +2402,7 @@ metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); @@ -2646,20 +2661,21 @@ Object.setPrototypeOf(parentObject, model.prototype); } function defineLazyGetter(response, chunk, parentObject, key) { - Object.defineProperty(parentObject, key, { - get: function () { - "resolved_model" === chunk.status && initializeModelChunk(chunk); - switch (chunk.status) { - case "fulfilled": - return chunk.value; - case "rejected": - throw chunk.reason; - } - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + "resolved_model" === chunk.status && initializeModelChunk(chunk); + switch (chunk.status) { + case "fulfilled": + return chunk.value; + case "rejected": + throw chunk.reason; + } + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; } function extractIterator(response, model) { @@ -2863,13 +2879,14 @@ ? ref.value : defineLazyGetter(response, ref, parentObject, key); } - Object.defineProperty(parentObject, key, { - get: function () { - return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; - }, - enumerable: !0, - configurable: !1 - }); + "__proto__" !== key && + Object.defineProperty(parentObject, key, { + get: function () { + return "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects."; + }, + enumerable: !0, + configurable: !1 + }); return null; default: return ( @@ -4702,83 +4719,85 @@ } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) - b: { - var owner = value[4], - stack = value[5]; - key = value[6]; - value = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - props: value[3], - _owner: void 0 === owner ? null : owner - }; - Object.defineProperty(value, "ref", { - enumerable: !1, - get: nullRefGetter - }); - value._store = {}; - Object.defineProperty(value._store, "validated", { - configurable: !1, - enumerable: !1, - writable: !0, - value: key - }); - Object.defineProperty(value, "_debugInfo", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - Object.defineProperty(value, "_debugStack", { - configurable: !1, - enumerable: !1, - writable: !0, - value: void 0 === stack ? null : stack - }); - Object.defineProperty(value, "_debugTask", { - configurable: !1, - enumerable: !1, - writable: !0, - value: null - }); - if (null !== initializingHandler) { - owner = initializingHandler; - initializingHandler = owner.parent; - if (owner.errored) { - stack = new ReactPromise("rejected", null, owner.reason); - initializeElement(response, value, null); - owner = { - name: getComponentNameFromType(value.type) || "", - owner: value._owner - }; - owner.debugStack = value._debugStack; - supportsCreateTask && (owner.debugTask = value._debugTask); - stack._debugInfo = [owner]; - key = createLazyChunkWrapper(stack, key); - break b; - } - if (0 < owner.deps) { - stack = new ReactPromise("blocked", null, null); - owner.value = value; - owner.chunk = stack; - key = createLazyChunkWrapper(stack, key); - value = initializeElement.bind(null, response, value, key); - stack.then(value, value); - break b; + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) + b: { + var owner = value[4], + stack = value[5]; + key = value[6]; + value = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + props: value[3], + _owner: void 0 === owner ? null : owner + }; + Object.defineProperty(value, "ref", { + enumerable: !1, + get: nullRefGetter + }); + value._store = {}; + Object.defineProperty(value._store, "validated", { + configurable: !1, + enumerable: !1, + writable: !0, + value: key + }); + Object.defineProperty(value, "_debugInfo", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + Object.defineProperty(value, "_debugStack", { + configurable: !1, + enumerable: !1, + writable: !0, + value: void 0 === stack ? null : stack + }); + Object.defineProperty(value, "_debugTask", { + configurable: !1, + enumerable: !1, + writable: !0, + value: null + }); + if (null !== initializingHandler) { + owner = initializingHandler; + initializingHandler = owner.parent; + if (owner.errored) { + stack = new ReactPromise("rejected", null, owner.reason); + initializeElement(response, value, null); + owner = { + name: getComponentNameFromType(value.type) || "", + owner: value._owner + }; + owner.debugStack = value._debugStack; + supportsCreateTask && (owner.debugTask = value._debugTask); + stack._debugInfo = [owner]; + key = createLazyChunkWrapper(stack, key); + break b; + } + if (0 < owner.deps) { + stack = new ReactPromise("blocked", null, null); + owner.value = value; + owner.chunk = stack; + key = createLazyChunkWrapper(stack, key); + value = initializeElement.bind(null, response, value, key); + stack.then(value, value); + break b; + } } + initializeElement(response, value, null); + key = value; } - initializeElement(response, value, null); - key = value; - } - else key = value; - return key; + else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 4b2cc78580ea1..1372893b471c4 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 @@ -457,17 +457,20 @@ function processReply( if ("undefined" === typeof value) return "$undefined"; if ("function" === typeof value) { parentReference = knownServerReferences.get(value); - if (void 0 !== parentReference) - return ( - (key = JSON.stringify( - { id: parentReference.id, bound: parentReference.bound }, - resolveToJSON - )), - null === formData && (formData = new FormData()), - (parentReference = nextPartId++), - formData.set(formFieldPrefix + parentReference, key), - "$h" + parentReference.toString(16) + if (void 0 !== parentReference) { + key = writtenObjects.get(value); + if (void 0 !== key) return key; + key = JSON.stringify( + { id: parentReference.id, bound: parentReference.bound }, + resolveToJSON ); + null === formData && (formData = new FormData()); + parentReference = nextPartId++; + formData.set(formFieldPrefix + parentReference, key); + key = "$h" + parentReference.toString(16); + writtenObjects.set(value, key); + return key; + } if ( void 0 !== temporaryReferences && -1 === key.indexOf(":") && @@ -1031,7 +1034,14 @@ function fulfillReference(response, reference, value) { } } } - value = value[path[i]]; + var name = path[i]; + if ( + "object" === typeof value && + null !== value && + hasOwnProperty.call(value, name) + ) + value = value[name]; + else throw Error("Invalid reference."); } for ( ; @@ -1040,26 +1050,26 @@ function fulfillReference(response, reference, value) { value.$$typeof === REACT_LAZY_TYPE; ) { - var referencedChunk$43 = value._payload; - if (referencedChunk$43 === handler.chunk) value = handler.value; + var referencedChunk$44 = value._payload; + if (referencedChunk$44 === handler.chunk) value = handler.value; else { - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "resolved_model": - initializeModelChunk(referencedChunk$43); + initializeModelChunk(referencedChunk$44); break; case "resolved_module": - initializeModuleChunk(referencedChunk$43); + initializeModuleChunk(referencedChunk$44); } - switch (referencedChunk$43.status) { + switch (referencedChunk$44.status) { case "fulfilled": - value = referencedChunk$43.value; + value = referencedChunk$44.value; continue; } break; } } var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; + "__proto__" !== key && (parentObject[key] = mappedValue); "" === key && null === handler.value && (handler.value = mappedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1184,7 +1194,7 @@ function loadServerReference(response, metaData, parentObject, key) { metaData.bound, response._encodeFormAction ); - parentObject[key] = resolvedValue; + "__proto__" !== key && (parentObject[key] = resolvedValue); "" === key && null === handler.value && (handler.value = resolvedValue); if ( parentObject[0] === REACT_ELEMENT_TYPE && @@ -1597,8 +1607,8 @@ function startReadableStream(response, id, type) { (previousBlockedChunk = chunk)); } else { chunk = previousBlockedChunk; - var chunk$54 = new ReactPromise("pending", null, null); - chunk$54.then( + var chunk$55 = new ReactPromise("pending", null, null); + chunk$55.then( function (v) { return controller.enqueue(v); }, @@ -1606,10 +1616,10 @@ function startReadableStream(response, id, type) { return controller.error(e); } ); - previousBlockedChunk = chunk$54; + previousBlockedChunk = chunk$55; chunk.then(function () { - previousBlockedChunk === chunk$54 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$54, json); + previousBlockedChunk === chunk$55 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$55, json); }); } }, @@ -1770,8 +1780,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$55 = (i = 0); i$55 < l; i$55++) { - var chunk = buffer[i$55]; + for (var i$56 = (i = 0); i$56 < l; i$56++) { + var chunk = buffer[i$56]; byteLength.set(chunk, i); i += chunk.byteLength; } @@ -2049,37 +2059,39 @@ function processBinaryChunk(weakResponse, streamState, chunk) { } function createFromJSONCallback(response) { return function (key, value) { - if ("string" === typeof value) - return parseModelString(response, this, key, value); - if ("object" === typeof value && null !== value) { - if (value[0] === REACT_ELEMENT_TYPE) { - if ( - ((key = { - $$typeof: REACT_ELEMENT_TYPE, - type: value[1], - key: value[2], - ref: null, - props: value[3] - }), - null !== initializingHandler) - ) + if ("__proto__" !== key) { + if ("string" === typeof value) + return parseModelString(response, this, key, value); + if ("object" === typeof value && null !== value) { + if (value[0] === REACT_ELEMENT_TYPE) { if ( - ((value = initializingHandler), - (initializingHandler = value.parent), - value.errored) + ((key = { + $$typeof: REACT_ELEMENT_TYPE, + type: value[1], + key: value[2], + ref: null, + props: value[3] + }), + null !== initializingHandler) ) - (key = new ReactPromise("rejected", null, value.reason)), - (key = createLazyChunkWrapper(key)); - else if (0 < value.deps) { - var blockedChunk = new ReactPromise("blocked", null, null); - value.value = key; - value.chunk = blockedChunk; - key = createLazyChunkWrapper(blockedChunk); - } - } else key = value; - return key; + if ( + ((value = initializingHandler), + (initializingHandler = value.parent), + value.errored) + ) + (key = new ReactPromise("rejected", null, value.reason)), + (key = createLazyChunkWrapper(key)); + else if (0 < value.deps) { + var blockedChunk = new ReactPromise("blocked", null, null); + value.value = key; + value.chunk = blockedChunk; + key = createLazyChunkWrapper(blockedChunk); + } + } else key = value; + return key; + } + return value; } - return value; }; } function close(weakResponse) { 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 877275611318d..d68201e0af469 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 @@ -2357,6 +2357,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -3916,12 +3923,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -3932,27 +3939,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -3976,57 +3962,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4050,15 +4004,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4070,93 +4060,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4170,13 +4174,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4188,19 +4194,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4215,7 +4222,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4236,14 +4244,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4254,24 +4268,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4283,31 +4323,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4320,31 +4395,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4353,13 +4431,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4370,13 +4460,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4388,40 +4499,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4439,90 +4542,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -4533,7 +4624,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -4612,19 +4703,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -4640,27 +4742,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -4673,15 +4792,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -4689,22 +4841,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -4712,17 +4921,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -4733,8 +4949,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -4746,6 +4970,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -4754,19 +4980,32 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -4775,8 +5014,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -5361,6 +5611,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -5370,20 +5626,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -5419,7 +5679,8 @@ webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); 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 88441319cffd4..5a9208af3cea5 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 @@ -2330,12 +2330,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2346,27 +2346,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2402,33 +2381,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2445,7 +2402,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2468,15 +2426,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2488,74 +2481,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2569,13 +2593,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2587,19 +2613,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2614,7 +2641,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2631,14 +2659,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2649,24 +2683,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2678,62 +2731,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2742,13 +2830,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2759,13 +2859,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2777,37 +2898,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2823,86 +2939,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$30 = new ReactPromise("pending", null, null); - chunk$30.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$30; - chunk.then(function () { - previousBlockedChunk === chunk$30 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$30, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$31 = new ReactPromise("pending", null, null); + chunk$31.then(enqueue, flightController.error); + previousBlockedChunk = chunk$31; + chunk.then(function () { + previousBlockedChunk === chunk$31 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$31, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2914,7 +3022,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -2994,17 +3102,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3017,27 +3136,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3050,42 +3179,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3096,8 +3333,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3105,6 +3343,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3113,19 +3353,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3134,8 +3385,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3151,16 +3413,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3196,7 +3466,8 @@ exports.decodeReply = function (body, webpackMap, options) { webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); 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 41b1253dbe927..8d30e9e18d72b 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 @@ -2417,6 +2417,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -3986,12 +3993,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -4002,27 +4009,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4046,57 +4032,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4120,15 +4074,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4140,93 +4130,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4240,13 +4244,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4258,19 +4264,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4285,7 +4292,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4306,14 +4314,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4324,24 +4338,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4353,31 +4393,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4390,31 +4465,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4423,13 +4501,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4440,13 +4530,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4458,40 +4569,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4509,90 +4612,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -4603,7 +4694,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -4682,19 +4773,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -4710,27 +4812,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -4743,15 +4862,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -4759,22 +4911,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -4782,17 +4991,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -4803,8 +5019,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -4816,6 +5040,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -4824,19 +5050,32 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -4845,8 +5084,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -5423,6 +5673,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -5432,20 +5688,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -5481,7 +5741,8 @@ webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); @@ -5521,7 +5782,9 @@ response$jscomp$0 = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response$jscomp$0, 0); 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 b143465e89261..4a193ba592f4b 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 @@ -2325,12 +2325,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2341,27 +2341,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2397,33 +2376,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2440,7 +2397,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2463,15 +2421,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2483,74 +2476,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2564,13 +2588,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2582,19 +2608,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2609,7 +2636,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2626,14 +2654,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2644,24 +2678,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2673,62 +2726,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2737,13 +2825,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2754,13 +2854,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2772,37 +2893,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2818,86 +2934,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$30 = new ReactPromise("pending", null, null); - chunk$30.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$30; - chunk.then(function () { - previousBlockedChunk === chunk$30 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$30, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$31 = new ReactPromise("pending", null, null); + chunk$31.then(enqueue, flightController.error); + previousBlockedChunk = chunk$31; + chunk.then(function () { + previousBlockedChunk === chunk$31 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$31, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2909,7 +3017,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -2989,17 +3097,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3012,27 +3131,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3045,42 +3174,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3091,8 +3328,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3100,6 +3338,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3108,19 +3348,30 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3129,8 +3380,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3146,16 +3408,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3191,7 +3461,8 @@ exports.decodeReply = function (body, webpackMap, options) { webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); @@ -3230,7 +3501,9 @@ exports.decodeReplyFromAsyncIterable = function ( response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); 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 58a51d42ace07..fef26be610369 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 @@ -2665,6 +2665,13 @@ value ) { task.model = value; + "__proto__" === parentPropertyName && + callWithDebugContextInDEV(request, task, function () { + console.error( + "Expected not to serialize an object with own property `__proto__`. When parsed this property will be omitted.%s", + describeObjectForErrorMessage(parent, parentPropertyName) + ); + }); if (value === REACT_ELEMENT_TYPE) return "$"; if (null === value) return null; if ("object" === typeof value) { @@ -4433,12 +4440,12 @@ this.value = value; this.reason = reason; } - function wakeChunk(response, listeners, value) { + function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -4449,27 +4456,6 @@ : rejectReference(response, listener.handler, error); } } - function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; - } function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -4493,57 +4479,25 @@ chunk.value = value; chunk.reason = _defineProperty({ id: id }, RESPONSE_SYMBOL, response); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if ( - ((id = resolveListeners[value]), "function" !== typeof id) - ) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) - for ( - response = 0; - response < resolveListeners.length; - response++ - ) - chunk.value.push(resolveListeners[response]); + for (value = 0; value < resolveListeners.length; value++) + chunk.value.push(resolveListeners[value]); else chunk.value = resolveListeners; if (chunk.reason) { if (rejectListeners) - for ( - resolveListeners = 0; - resolveListeners < rejectListeners.length; - resolveListeners++ - ) - chunk.reason.push(rejectListeners[resolveListeners]); + for (value = 0; value < rejectListeners.length; value++) + chunk.reason.push(rejectListeners[value]); } else chunk.reason = rejectListeners; break; case "rejected": rejectListeners && - wakeChunk(response, rejectListeners, chunk.reason); + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -4567,15 +4521,51 @@ ); } 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4587,93 +4577,107 @@ deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) - ? promiseValue.slice(0) - : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply( - resolvedValue, - promiseValue + 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 + + "." + ) ); + return; } - parentObject[key] = resolvedValue; - "" === key && - null === handler.value && - (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } - function reviveModel(response, parentObj, parentKey, value, reference) { + function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ) { if ("string" === typeof value) return parseModelString( response, parentObj, parentKey, value, - reference + reference, + arrayRoot ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel( - response, - value, - i, - value[i], - parentObj - )), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } + function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); + } function initializeModelChunk(chunk) { var prevHandler = initializingHandler; initializingHandler = null; @@ -4687,13 +4691,15 @@ chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -4705,19 +4711,20 @@ var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -4732,7 +4739,8 @@ ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -4753,14 +4761,20 @@ chunks.set(id, chunk)); return chunk; } - function fulfillReference(response, reference, value) { + function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -4771,24 +4785,50 @@ ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && + wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -4800,31 +4840,66 @@ "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } - function getOutlinedModel(response, reference, parentObject, key, map) { + function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map + ) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), + (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) + ? id.byteLength + : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); + return parentObject; case "blocked": return ( initializingHandler @@ -4837,31 +4912,34 @@ deps: 1, errored: !1 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -4870,13 +4948,25 @@ } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -4887,13 +4977,34 @@ constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -4905,40 +5016,32 @@ deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); "" === parentKey && null === handler.value && - (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -4956,90 +5059,78 @@ : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = new ReactPromise( - "resolved_model", - json, - _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) - ); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var _chunk = new ReactPromise("pending", null, null); - _chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = _chunk; - chunk.then(function () { - previousBlockedChunk === _chunk && (previousBlockedChunk = null); - resolveModelChunk(response, _chunk, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = new ReactPromise( + "resolved_model", + json, + _defineProperty({ id: -1 }, RESPONSE_SYMBOL, response) + ); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var _chunk = new ReactPromise("pending", null, null); + _chunk.then(enqueue, flightController.error); + previousBlockedChunk = _chunk; + chunk.then(function () { + previousBlockedChunk === _chunk && + (previousBlockedChunk = null); + resolveModelChunk(response, _chunk, json, -1); }); } - } - }); - return type; - } - function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } - function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; + function FlightIterator(next) { + this.next = next; } function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); @@ -5050,7 +5141,7 @@ nextWriteIndex = 0, iterable = _defineProperty({}, ASYNC_ITERATOR, function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -5129,19 +5220,30 @@ }); return iterator; } - function parseModelString(response, obj, key, value, reference) { + function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return ( (obj = parseInt(value.slice(2), 16)), getChunk(response, obj) ); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if ( @@ -5157,27 +5259,44 @@ ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + extractIterator + ) ); case "I": return Infinity; @@ -5190,15 +5309,48 @@ case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (obj.length > MAX_BIGINT_DIGITS) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is " + + MAX_BIGINT_DIGITS + + "." + ); + null !== arrayRoot && + bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": return parseTypedArray( response, @@ -5206,22 +5358,79 @@ Uint8ClampedArray, 1, obj, - key + key, + arrayRoot ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": return parseTypedArray( response, @@ -5229,17 +5438,24 @@ BigUint64Array, 8, obj, - key + key, + arrayRoot ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -5250,8 +5466,16 @@ return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel( + response, + value, + obj, + key, + arrayRoot, + createModel + ); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse( @@ -5263,6 +5487,8 @@ 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -5271,7 +5497,9 @@ _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function resolveField(response, key, value) { @@ -5287,13 +5515,24 @@ function close(response) { reportGlobalError(response, Error("Connection closed.")); } - function loadServerReference(bundlerConfig, id, bound) { + function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (_ref.length > MAX_BOUND_ARGS) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is " + + MAX_BOUND_ARGS + + "." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -5302,8 +5541,19 @@ }) : Promise.resolve(requireModule(serverReference)); } - function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); + function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit + ) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -6102,6 +6352,12 @@ var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype, initializingHandler = null; + FlightIterator.prototype = {}; + FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; + }; + var MAX_BIGINT_DIGITS = 300, + MAX_BOUND_ARGS = 1e3; exports.createClientModuleProxy = function (moduleId) { moduleId = registerClientReferenceImpl({}, moduleId, !1); return new Proxy(moduleId, proxyHandlers$1); @@ -6111,20 +6367,24 @@ }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference( - serverManifest, - value.id, - value.bound - ))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -6160,7 +6420,8 @@ webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); @@ -6192,7 +6453,9 @@ response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); @@ -6205,7 +6468,9 @@ var response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ), pendingFiles = 0, queuedFields = []; @@ -6229,13 +6494,13 @@ ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_286 = []; + var JSCompiler_object_inline_chunks_281 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_286.push(chunk); + JSCompiler_object_inline_chunks_281.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_286, { + var blob = new Blob(JSCompiler_object_inline_chunks_281, { type: mimeType }); response._formData.append(name, blob, filename); 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 71297152c8435..3d0618733778f 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 @@ -2355,12 +2355,12 @@ ReactPromise.prototype.then = function (resolve, reject) { }; var ObjectPrototype = Object.prototype, ArrayPrototype = Array.prototype; -function wakeChunk(response, listeners, value) { +function wakeChunk(response, listeners, value, chunk) { for (var i = 0; i < listeners.length; i++) { var listener = listeners[i]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, chunk.reason); } } function rejectChunk(response, listeners, error) { @@ -2371,27 +2371,6 @@ function rejectChunk(response, listeners, error) { : rejectReference(response, listener.handler, error); } } -function resolveBlockedCycle(resolvedChunk, reference) { - var referencedChunk = reference.handler.chunk; - if (null === referencedChunk) return null; - if (referencedChunk === resolvedChunk) return reference.handler; - reference = referencedChunk.value; - if (null !== reference) - for ( - referencedChunk = 0; - referencedChunk < reference.length; - referencedChunk++ - ) { - var listener = reference[referencedChunk]; - if ( - "function" !== typeof listener && - ((listener = resolveBlockedCycle(resolvedChunk, listener)), - null !== listener) - ) - return listener; - } - return null; -} function triggerErrorOnChunk(response, chunk, error) { if ("pending" !== chunk.status && "blocked" !== chunk.status) chunk.reason.error(error); @@ -2427,33 +2406,11 @@ function resolveModelChunk(response, chunk, value, id) { chunk.reason = ((value.id = id), (value[RESPONSE_SYMBOL] = response), value); if (null !== resolveListeners) - a: switch ((initializeModelChunk(chunk), chunk.status)) { + switch ((initializeModelChunk(chunk), chunk.status)) { case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); + wakeChunk(response, resolveListeners, chunk.value, chunk); break; case "blocked": - for (value = 0; value < resolveListeners.length; value++) - if (((id = resolveListeners[value]), "function" !== typeof id)) { - var cyclicHandler = resolveBlockedCycle(chunk, id); - if (null !== cyclicHandler) - switch ( - (fulfillReference(response, id, cyclicHandler.value), - resolveListeners.splice(value, 1), - value--, - null !== rejectListeners && - ((id = rejectListeners.indexOf(id)), - -1 !== id && rejectListeners.splice(id, 1)), - chunk.status) - ) { - case "fulfilled": - wakeChunk(response, resolveListeners, chunk.value); - break a; - case "rejected": - null !== rejectListeners && - rejectChunk(response, rejectListeners, chunk.reason); - break a; - } - } case "pending": if (chunk.value) for (response = 0; response < resolveListeners.length; response++) @@ -2470,7 +2427,8 @@ function resolveModelChunk(response, chunk, value, id) { } else chunk.reason = rejectListeners; break; case "rejected": - rejectListeners && wakeChunk(response, rejectListeners, chunk.reason); + rejectListeners && + rejectChunk(response, rejectListeners, chunk.reason); } } } @@ -2493,15 +2451,50 @@ 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 blockedPromise = new ReactPromise("blocked", null, null); + metaData.$$promise = blockedPromise; var serverReference = resolveServerReference(response._bundlerConfig, id); - id = metaData.bound; - var promise = preloadModule(serverReference); - if (promise) - id instanceof ReactPromise && (promise = Promise.all([promise, id])); - else if (id instanceof ReactPromise) promise = Promise.resolve(id); - else return requireModule(serverReference); + cachedPromise = metaData.bound; + if ((id = preloadModule(serverReference))) + cachedPromise instanceof ReactPromise && + (id = Promise.all([id, cachedPromise])); + else if (cachedPromise instanceof ReactPromise) + id = Promise.resolve(cachedPromise); + else + return ( + (cachedPromise = requireModule(serverReference)), + (id = blockedPromise), + (id.status = "fulfilled"), + (id.value = cachedPromise) + ); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2513,74 +2506,105 @@ function loadServerReference$1(response, metaData, parentObject, key) { deps: 1, errored: !1 }; - promise.then( - function () { - var resolvedValue = requireModule(serverReference); - if (metaData.bound) { - var promiseValue = metaData.bound.value; - promiseValue = Array.isArray(promiseValue) ? promiseValue.slice(0) : []; - promiseValue.unshift(null); - resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); - } - parentObject[key] = resolvedValue; - "" === key && null === handler.value && (handler.value = resolvedValue); - handler.deps--; - 0 === handler.deps && - ((resolvedValue = handler.chunk), - null !== resolvedValue && - "blocked" === resolvedValue.status && - ((promiseValue = resolvedValue.value), - (resolvedValue.status = "fulfilled"), - (resolvedValue.value = handler.value), - (resolvedValue.reason = null), - null !== promiseValue && - wakeChunk(response, promiseValue, handler.value))); - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); + 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." + ) + ); + return; } + promiseValue.unshift(null); + resolvedValue = resolvedValue.bind.apply(resolvedValue, promiseValue); } - ); + 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; } -function reviveModel(response, parentObj, parentKey, value, reference) { +function reviveModel( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot +) { if ("string" === typeof value) - return parseModelString(response, parentObj, parentKey, value, reference); + return parseModelString( + response, + parentObj, + parentKey, + value, + reference, + arrayRoot + ); if ("object" === typeof value && null !== value) if ( (void 0 !== reference && void 0 !== response._temporaryReferences && response._temporaryReferences.set(value, reference), - Array.isArray(value)) - ) - for (var i = 0; i < value.length; i++) - value[i] = reviveModel( + isArrayImpl(value)) + ) { + if (null === arrayRoot) { + var childContext = { count: 0, fork: !1 }; + response._rootArrayContexts.set(value, childContext); + } else childContext = arrayRoot; + 1 < value.length && (childContext.fork = !0); + bumpArrayCount(childContext, value.length + 1, response); + for (parentObj = 0; parentObj < value.length; parentObj++) + value[parentObj] = reviveModel( response, value, - "" + i, - value[i], - void 0 !== reference ? reference + ":" + i : void 0 + "" + parentObj, + value[parentObj], + void 0 !== reference ? reference + ":" + parentObj : void 0, + childContext ); - else - for (i in value) - hasOwnProperty.call(value, i) && - ((parentObj = - void 0 !== reference && -1 === i.indexOf(":") - ? reference + ":" + i - : void 0), - (parentObj = reviveModel(response, value, i, value[i], parentObj)), - void 0 !== parentObj || "__proto__" === i - ? (value[i] = parentObj) - : delete value[i]); + } else + for (childContext in value) + hasOwnProperty.call(value, childContext) && + ("__proto__" === childContext + ? delete value[childContext] + : ((parentObj = + void 0 !== reference && -1 === childContext.indexOf(":") + ? reference + ":" + childContext + : void 0), + (parentObj = reviveModel( + response, + value, + childContext, + value[childContext], + parentObj, + null + )), + void 0 !== parentObj + ? (value[childContext] = parentObj) + : delete value[childContext])); return value; } +function bumpArrayCount(arrayContext, slots, response) { + if ( + (arrayContext.count += slots) > response._arraySizeLimit && + arrayContext.fork + ) + throw Error( + "Maximum array nesting exceeded. Large nested arrays can be dangerous. Try adding intermediate objects." + ); +} var initializingHandler = null; function initializeModelChunk(chunk) { var prevHandler = initializingHandler; @@ -2594,13 +2618,15 @@ function initializeModelChunk(chunk) { chunk.value = null; chunk.reason = null; try { - var rawModel = JSON.parse(resolvedModel), - value = reviveModel( + var rawModel = JSON.parse(resolvedModel); + resolvedModel = { count: 0, fork: !1 }; + var value = reviveModel( response, { "": rawModel }, "", rawModel, - _chunk$reason + _chunk$reason, + resolvedModel ), resolveListeners = chunk.value; if (null !== resolveListeners) @@ -2612,19 +2638,20 @@ function initializeModelChunk(chunk) { var listener = resolveListeners[rawModel]; "function" === typeof listener ? listener(value) - : fulfillReference(response, listener, value); + : fulfillReference(response, listener, value, resolvedModel); } if (null !== initializingHandler) { if (initializingHandler.errored) throw initializingHandler.reason; if (0 < initializingHandler.deps) { initializingHandler.value = value; + initializingHandler.reason = resolvedModel; initializingHandler.chunk = chunk; return; } } chunk.status = "fulfilled"; chunk.value = value; - chunk.reason = null; + chunk.reason = resolvedModel; } catch (error) { (chunk.status = "rejected"), (chunk.reason = error); } finally { @@ -2639,7 +2666,8 @@ function reportGlobalError(response, error) { ? triggerErrorOnChunk(response, chunk, error) : "fulfilled" === chunk.status && null !== chunk.reason && - chunk.reason.error(error); + ((chunk = chunk.reason), + "function" === typeof chunk.error && chunk.error(error)); }); } function getChunk(response, id) { @@ -2656,14 +2684,20 @@ function getChunk(response, id) { chunks.set(id, chunk)); return chunk; } -function fulfillReference(response, reference, value) { +function fulfillReference(response, reference, value, arrayRoot) { var handler = reference.handler, parentObject = reference.parentObject, key = reference.key, map = reference.map, path = reference.path; try { - for (var i = 1; i < path.length; i++) { + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < path.length; + i++ + ) { var name = path[i]; if ( "object" !== typeof value || @@ -2674,24 +2708,43 @@ function fulfillReference(response, reference, value) { ) throw Error("Invalid reference."); value = value[name]; + if (isArrayImpl(value)) + (localLength = 0), + (arrayRoot = rootArrayContexts.get(value) || arrayRoot); + else if (((arrayRoot = null), "string" === typeof value)) + localLength = value.length; + else if ("bigint" === typeof value) { + var n = Math.abs(Number(value)); + localLength = 0 === n ? 1 : Math.floor(Math.log10(n)) + 1; + } else localLength = ArrayBuffer.isView(value) ? value.byteLength : 0; } - var mappedValue = map(response, value, parentObject, key); - parentObject[key] = mappedValue; - "" === key && null === handler.value && (handler.value = mappedValue); + var resolvedValue = map(response, value, parentObject, key); + var referenceArrayRoot = reference.arrayRoot; + null !== referenceArrayRoot && + (null !== arrayRoot + ? (arrayRoot.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, arrayRoot.count, response)) + : 0 < localLength && + bumpArrayCount(referenceArrayRoot, localLength, response)); } catch (error) { - rejectReference(response, reference.handler, error); + 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); handler.deps--; 0 === handler.deps && - ((reference = handler.chunk), - null !== reference && - "blocked" === reference.status && - ((value = reference.value), - (reference.status = "fulfilled"), - (reference.value = handler.value), - (reference.reason = handler.reason), - null !== value && wakeChunk(response, value, handler.value))); + ((parentObject = handler.chunk), + null !== parentObject && + "blocked" === parentObject.status && + ((key = parentObject.value), + (parentObject.status = "fulfilled"), + (parentObject.value = handler.value), + (parentObject.reason = handler.reason), + null !== key && wakeChunk(response, key, handler.value, parentObject))); } function rejectReference(response, handler, error) { handler.errored || @@ -2703,62 +2756,97 @@ function rejectReference(response, handler, error) { "blocked" === handler.status && triggerErrorOnChunk(response, handler, error)); } -function getOutlinedModel(response, reference, parentObject, key, map) { +function getOutlinedModel( + response, + reference, + parentObject, + key, + referenceArrayRoot, + map +) { reference = reference.split(":"); - var id = parseInt(reference[0], 16); - id = getChunk(response, id); - switch (id.status) { + var id = parseInt(reference[0], 16), + chunk = getChunk(response, id); + switch (chunk.status) { case "resolved_model": - initializeModelChunk(id); + initializeModelChunk(chunk); } - switch (id.status) { + switch (chunk.status) { case "fulfilled": - id = id.value; - for (var i = 1; i < reference.length; i++) { - var name = reference[i]; + id = chunk.value; + chunk = chunk.reason; + for ( + var localLength = 0, + rootArrayContexts = response._rootArrayContexts, + i = 1; + i < reference.length; + i++ + ) { + localLength = reference[i]; if ( "object" !== typeof id || null === id || (getPrototypeOf(id) !== ObjectPrototype && getPrototypeOf(id) !== ArrayPrototype) || - !hasOwnProperty.call(id, name) + !hasOwnProperty.call(id, localLength) ) throw Error("Invalid reference."); - id = id[name]; + id = id[localLength]; + isArrayImpl(id) + ? ((localLength = 0), (chunk = rootArrayContexts.get(id) || chunk)) + : ((chunk = null), + "string" === typeof id + ? (localLength = id.length) + : "bigint" === typeof id + ? ((localLength = Math.abs(Number(id))), + (localLength = + 0 === localLength + ? 1 + : Math.floor(Math.log10(localLength)) + 1)) + : (localLength = ArrayBuffer.isView(id) ? id.byteLength : 0)); } - return map(response, id, parentObject, key); - case "pending": + parentObject = map(response, id, parentObject, key); + null !== referenceArrayRoot && + (null !== chunk + ? (chunk.fork && (referenceArrayRoot.fork = !0), + bumpArrayCount(referenceArrayRoot, chunk.count, response)) + : 0 < localLength && + 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 }), - (parentObject = { + (referenceArrayRoot = { handler: response, parentObject: parentObject, key: key, map: map, - path: reference + path: reference, + arrayRoot: referenceArrayRoot }), - null === id.value - ? (id.value = [parentObject]) - : id.value.push(parentObject), - null === id.reason - ? (id.reason = [parentObject]) - : id.reason.push(parentObject), + null === chunk.value + ? (chunk.value = [referenceArrayRoot]) + : chunk.value.push(referenceArrayRoot), + null === chunk.reason + ? (chunk.reason = [referenceArrayRoot]) + : chunk.reason.push(referenceArrayRoot), null ); + case "pending": + throw Error("Invalid forward reference."); default: return ( initializingHandler ? ((initializingHandler.errored = !0), (initializingHandler.value = null), - (initializingHandler.reason = id.reason)) + (initializingHandler.reason = chunk.reason)) : (initializingHandler = { chunk: null, value: null, - reason: id.reason, + reason: chunk.reason, deps: 0, errored: !0 }), @@ -2767,13 +2855,25 @@ function getOutlinedModel(response, reference, parentObject, key, map) { } } function createMap(response, model) { - return new Map(model); + if (!isArrayImpl(model)) throw Error("Invalid Map initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Map."); + response = new Map(model); + model.$$consumed = !0; + return response; } function createSet(response, model) { - return new Set(model); + if (!isArrayImpl(model)) throw Error("Invalid Set initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Set."); + response = new Set(model); + model.$$consumed = !0; + return response; } function extractIterator(response, model) { - return model[Symbol.iterator](); + if (!isArrayImpl(model)) throw Error("Invalid Iterator initializer."); + if (!0 === model.$$consumed) throw Error("Already initialized Iterator."); + response = model[Symbol.iterator](); + model.$$consumed = !0; + return response; } function createModel(response, model, parentObject, key) { return "then" === key && "function" === typeof model ? null : model; @@ -2784,13 +2884,34 @@ function parseTypedArray( constructor, bytesPerElement, parentObject, - parentKey + parentKey, + referenceArrayRoot ) { + function reject(error) { + if (!handler.errored) { + handler.errored = !0; + handler.value = null; + handler.reason = error; + var chunk = handler.chunk; + null !== chunk && + "blocked" === chunk.status && + triggerErrorOnChunk(response, chunk, error); + } + } reference = parseInt(reference.slice(2), 16); - bytesPerElement = response._prefix + reference; - if (response._chunks.has(reference)) + var key = response._prefix + reference; + bytesPerElement = response._chunks; + if (bytesPerElement.has(reference)) throw Error("Already initialized typed array."); - reference = response._formData.get(bytesPerElement).arrayBuffer(); + bytesPerElement.set( + reference, + new ReactPromise( + "rejected", + null, + Error("Already initialized typed array.") + ) + ); + reference = response._formData.get(key).arrayBuffer(); if (initializingHandler) { var handler = initializingHandler; handler.deps++; @@ -2802,37 +2923,32 @@ function parseTypedArray( deps: 1, errored: !1 }; - reference.then( - function (buffer) { - buffer = constructor === ArrayBuffer ? buffer : new constructor(buffer); - parentObject[parentKey] = buffer; - "" === parentKey && null === handler.value && (handler.value = buffer); - handler.deps--; - if ( - 0 === handler.deps && - ((buffer = handler.chunk), - null !== buffer && "blocked" === buffer.status) - ) { - var resolveListeners = buffer.value; - buffer.status = "fulfilled"; - buffer.value = handler.value; - buffer.reason = null; - null !== resolveListeners && - wakeChunk(response, resolveListeners, handler.value); - } - }, - function (error) { - if (!handler.errored) { - handler.errored = !0; - handler.value = null; - handler.reason = error; - var chunk = handler.chunk; - null !== chunk && - "blocked" === chunk.status && - triggerErrorOnChunk(response, chunk, error); - } + reference.then(function (buffer) { + try { + null !== referenceArrayRoot && + bumpArrayCount(referenceArrayRoot, buffer.byteLength, response); + var resolvedValue = + constructor === ArrayBuffer ? buffer : new constructor(buffer); + "__proto__" !== key && (parentObject[parentKey] = resolvedValue); + "" === parentKey && + null === handler.value && + (handler.value = resolvedValue); + } catch (x) { + reject(x); + return; } - ); + handler.deps--; + 0 === handler.deps && + ((buffer = handler.chunk), + null !== buffer && + "blocked" === buffer.status && + ((resolvedValue = buffer.value), + (buffer.status = "fulfilled"), + (buffer.value = handler.value), + (buffer.reason = null), + null !== resolvedValue && + wakeChunk(response, resolvedValue, handler.value, buffer))); + }, reject); return null; } function resolveStream(response, id, stream, controller) { @@ -2848,86 +2964,78 @@ function resolveStream(response, id, stream, controller) { : controller.enqueueModel(chunks)); } function parseReadableStream(response, reference, type) { + function enqueue(value) { + "bytes" !== type || ArrayBuffer.isView(value) + ? controller.enqueue(value) + : flightController.error(Error("Invalid data for bytes stream.")); + } reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) throw Error("Already initialized stream."); var controller = null, - closed = !1; - type = new ReadableStream({ - type: type, - start: function (c) { - controller = c; - } - }); - var previousBlockedChunk = null; - resolveStream(response, reference, type, { - enqueueModel: function (json) { - if (null === previousBlockedChunk) { - var chunk = createResolvedModelChunk(response, json, -1); - initializeModelChunk(chunk); - "fulfilled" === chunk.status - ? controller.enqueue(chunk.value) - : (chunk.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ), - (previousBlockedChunk = chunk)); - } else { - chunk = previousBlockedChunk; - var chunk$30 = new ReactPromise("pending", null, null); - chunk$30.then( - function (v) { - return controller.enqueue(v); - }, - function (e) { - return controller.error(e); - } - ); - previousBlockedChunk = chunk$30; - chunk.then(function () { - previousBlockedChunk === chunk$30 && (previousBlockedChunk = null); - resolveModelChunk(response, chunk$30, json, -1); - }); + closed = !1, + stream = new ReadableStream({ + type: type, + start: function (c) { + controller = c; } - }, - close: function () { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) controller.close(); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.close(); - }); - } - }, - error: function (error) { - if (!closed) - if (((closed = !0), null === previousBlockedChunk)) - controller.error(error); - else { - var blockedChunk = previousBlockedChunk; - previousBlockedChunk = null; - blockedChunk.then(function () { - return controller.error(error); + }), + previousBlockedChunk = null, + flightController = { + enqueueModel: function (json) { + if (null === previousBlockedChunk) { + var chunk = createResolvedModelChunk(response, json, -1); + initializeModelChunk(chunk); + "fulfilled" === chunk.status + ? enqueue(chunk.value) + : (chunk.then(enqueue, flightController.error), + (previousBlockedChunk = chunk)); + } else { + chunk = previousBlockedChunk; + var chunk$31 = new ReactPromise("pending", null, null); + chunk$31.then(enqueue, flightController.error); + previousBlockedChunk = chunk$31; + chunk.then(function () { + previousBlockedChunk === chunk$31 && (previousBlockedChunk = null); + resolveModelChunk(response, chunk$31, json, -1); }); } - } - }); - return type; -} -function asyncIterator() { - return this; + }, + close: function () { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.close(); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.close(); + }); + } + }, + error: function (error) { + if (!closed) + if (((closed = !0), null === previousBlockedChunk)) + controller.error(error); + else { + var blockedChunk = previousBlockedChunk; + previousBlockedChunk = null; + blockedChunk.then(function () { + return controller.error(error); + }); + } + } + }; + resolveStream(response, reference, stream, flightController); + return stream; } -function createIterator(next) { - next = { next: next }; - next[ASYNC_ITERATOR] = asyncIterator; - return next; +function FlightIterator(next) { + this.next = next; } +FlightIterator.prototype = {}; +FlightIterator.prototype[ASYNC_ITERATOR] = function () { + return this; +}; function parseAsyncIterable(response, reference, iterator) { reference = parseInt(reference.slice(2), 16); if (response._chunks.has(reference)) @@ -2939,7 +3047,7 @@ function parseAsyncIterable(response, reference, iterator) { $jscomp$compprop5 = (($jscomp$compprop5[ASYNC_ITERATOR] = function () { var nextReadIndex = 0; - return createIterator(function (arg) { + return new FlightIterator(function (arg) { if (void 0 !== arg) throw Error( "Values cannot be passed to next() of AsyncIterables passed to Client Components." @@ -3019,17 +3127,28 @@ function parseAsyncIterable(response, reference, iterator) { }); return iterator; } -function parseModelString(response, obj, key, value, reference) { +function parseModelString(response, obj, key, value, reference, arrayRoot) { if ("$" === value[0]) { switch (value[1]) { case "$": - return value.slice(1); + return ( + null !== arrayRoot && + bumpArrayCount(arrayRoot, value.length - 1, response), + value.slice(1) + ); case "@": return (obj = parseInt(value.slice(2), 16)), getChunk(response, obj); case "h": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, loadServerReference$1) + (arrayRoot = value.slice(2)), + getOutlinedModel( + response, + arrayRoot, + obj, + key, + null, + loadServerReference$1 + ) ); case "T": if (void 0 === reference || void 0 === response._temporaryReferences) @@ -3042,27 +3161,37 @@ function parseModelString(response, obj, key, value, reference) { ); case "Q": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createMap) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createMap) ); case "W": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, createSet) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, createSet) ); case "K": obj = value.slice(2); - var formPrefix = response._prefix + obj + "_", - data = new FormData(); - response._formData.forEach(function (entry, entryKey) { - entryKey.startsWith(formPrefix) && - data.append(entryKey.slice(formPrefix.length), entry); - }); - return data; + obj = response._prefix + obj + "_"; + key = new FormData(); + response = response._formData; + arrayRoot = Array.from(response.keys()); + for (value = 0; value < arrayRoot.length; value++) + if (((reference = arrayRoot[value]), reference.startsWith(obj))) { + for ( + var entries = response.getAll(reference), + newKey = reference.slice(obj.length), + j = 0; + j < entries.length; + j++ + ) + key.append(newKey, entries[j]); + response.delete(reference); + } + return key; case "i": return ( - (value = value.slice(2)), - getOutlinedModel(response, value, obj, key, extractIterator) + (arrayRoot = value.slice(2)), + getOutlinedModel(response, arrayRoot, obj, key, null, extractIterator) ); case "I": return Infinity; @@ -3075,42 +3204,150 @@ function parseModelString(response, obj, key, value, reference) { case "D": return new Date(Date.parse(value.slice(2))); case "n": - return BigInt(value.slice(2)); - } - switch (value[1]) { + obj = value.slice(2); + if (300 < obj.length) + throw Error( + "BigInt is too large. Received " + + obj.length + + " digits but the limit is 300." + ); + null !== arrayRoot && bumpArrayCount(arrayRoot, obj.length, response); + return BigInt(obj); case "A": - return parseTypedArray(response, value, ArrayBuffer, 1, obj, key); + return parseTypedArray( + response, + value, + ArrayBuffer, + 1, + obj, + key, + arrayRoot + ); case "O": - return parseTypedArray(response, value, Int8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Int8Array, + 1, + obj, + key, + arrayRoot + ); case "o": - return parseTypedArray(response, value, Uint8Array, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8Array, + 1, + obj, + key, + arrayRoot + ); case "U": - return parseTypedArray(response, value, Uint8ClampedArray, 1, obj, key); + return parseTypedArray( + response, + value, + Uint8ClampedArray, + 1, + obj, + key, + arrayRoot + ); case "S": - return parseTypedArray(response, value, Int16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Int16Array, + 2, + obj, + key, + arrayRoot + ); case "s": - return parseTypedArray(response, value, Uint16Array, 2, obj, key); + return parseTypedArray( + response, + value, + Uint16Array, + 2, + obj, + key, + arrayRoot + ); case "L": - return parseTypedArray(response, value, Int32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Int32Array, + 4, + obj, + key, + arrayRoot + ); case "l": - return parseTypedArray(response, value, Uint32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Uint32Array, + 4, + obj, + key, + arrayRoot + ); case "G": - return parseTypedArray(response, value, Float32Array, 4, obj, key); + return parseTypedArray( + response, + value, + Float32Array, + 4, + obj, + key, + arrayRoot + ); case "g": - return parseTypedArray(response, value, Float64Array, 8, obj, key); + return parseTypedArray( + response, + value, + Float64Array, + 8, + obj, + key, + arrayRoot + ); case "M": - return parseTypedArray(response, value, BigInt64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigInt64Array, + 8, + obj, + key, + arrayRoot + ); case "m": - return parseTypedArray(response, value, BigUint64Array, 8, obj, key); + return parseTypedArray( + response, + value, + BigUint64Array, + 8, + obj, + key, + arrayRoot + ); case "V": - return parseTypedArray(response, value, DataView, 1, obj, key); + return parseTypedArray( + response, + value, + DataView, + 1, + obj, + key, + arrayRoot + ); case "B": return ( (obj = parseInt(value.slice(2), 16)), response._formData.get(response._prefix + obj) ); - } - switch (value[1]) { case "R": return parseReadableStream(response, value, void 0); case "r": @@ -3121,8 +3358,9 @@ function parseModelString(response, obj, key, value, reference) { return parseAsyncIterable(response, value, !0); } value = value.slice(1); - return getOutlinedModel(response, value, obj, key, createModel); + return getOutlinedModel(response, value, obj, key, arrayRoot, createModel); } + null !== arrayRoot && bumpArrayCount(arrayRoot, value.length, response); return value; } function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { @@ -3130,6 +3368,8 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : new FormData(), + arraySizeLimit = + 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1e6, chunks = new Map(); return { _bundlerConfig: bundlerConfig, @@ -3138,7 +3378,9 @@ function createResponse(bundlerConfig, formFieldPrefix, temporaryReferences) { _chunks: chunks, _closed: !1, _closedReason: null, - _temporaryReferences: temporaryReferences + _temporaryReferences: temporaryReferences, + _rootArrayContexts: new WeakMap(), + _arraySizeLimit: arraySizeLimit }; } function resolveField(response, key, value) { @@ -3154,13 +3396,22 @@ function resolveField(response, key, value) { function close(response) { reportGlobalError(response, Error("Connection closed.")); } -function loadServerReference(bundlerConfig, id, bound) { +function loadServerReference(bundlerConfig, metaData) { + var id = metaData.id; + if ("string" !== typeof id) return null; var serverReference = resolveServerReference(bundlerConfig, id); bundlerConfig = preloadModule(serverReference); - return bound - ? Promise.all([bound, bundlerConfig]).then(function (_ref) { + metaData = metaData.bound; + return metaData instanceof Promise + ? Promise.all([metaData, bundlerConfig]).then(function (_ref) { _ref = _ref[0]; var fn = requireModule(serverReference); + if (1e3 < _ref.length) + throw Error( + "Server Function has too many bound arguments. Received " + + _ref.length + + " but the limit is 1000." + ); return fn.bind.apply(fn, [null].concat(_ref)); }) : bundlerConfig @@ -3169,8 +3420,19 @@ function loadServerReference(bundlerConfig, id, bound) { }) : Promise.resolve(requireModule(serverReference)); } -function decodeBoundActionMetaData(body, serverManifest, formFieldPrefix) { - body = createResponse(serverManifest, formFieldPrefix, void 0, body); +function decodeBoundActionMetaData( + body, + serverManifest, + formFieldPrefix, + arraySizeLimit +) { + body = createResponse( + serverManifest, + formFieldPrefix, + void 0, + body, + arraySizeLimit + ); close(body); body = getChunk(body, 0); body.then(function () {}); @@ -3227,16 +3489,24 @@ exports.createTemporaryReferenceSet = function () { }; exports.decodeAction = function (body, serverManifest) { var formData = new FormData(), - action = null; + action = null, + seenActions = new Set(); body.forEach(function (value, key) { key.startsWith("$ACTION_") ? key.startsWith("$ACTION_REF_") - ? ((value = "$ACTION_" + key.slice(12) + ":"), + ? seenActions.has(key) || + (seenActions.add(key), + (value = "$ACTION_" + key.slice(12) + ":"), (value = decodeBoundActionMetaData(body, serverManifest, value)), - (action = loadServerReference(serverManifest, value.id, value.bound))) + (action = loadServerReference(serverManifest, value))) : key.startsWith("$ACTION_ID_") && - ((value = key.slice(11)), - (action = loadServerReference(serverManifest, value, null))) + !seenActions.has(key) && + (seenActions.add(key), + (value = key.slice(11)), + (action = loadServerReference(serverManifest, { + id: value, + bound: null + }))) : formData.append(key, value); }); return null === action @@ -3272,7 +3542,8 @@ exports.decodeReply = function (body, webpackMap, options) { webpackMap, "", options ? options.temporaryReferences : void 0, - body + body, + options ? options.arraySizeLimit : void 0 ); webpackMap = getChunk(body, 0); close(body); @@ -3304,7 +3575,9 @@ exports.decodeReplyFromAsyncIterable = function ( response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ); iterator.next().then(progress, error); return getChunk(response, 0); @@ -3313,7 +3586,9 @@ exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { var response = createResponse( webpackMap, "", - options ? options.temporaryReferences : void 0 + options ? options.temporaryReferences : void 0, + void 0, + options ? options.arraySizeLimit : void 0 ), pendingFiles = 0, queuedFields = []; @@ -3337,13 +3612,13 @@ exports.decodeReplyFromBusboy = function (busboyStream, webpackMap, options) { ); else { pendingFiles++; - var JSCompiler_object_inline_chunks_291 = []; + var JSCompiler_object_inline_chunks_287 = []; value.on("data", function (chunk) { - JSCompiler_object_inline_chunks_291.push(chunk); + JSCompiler_object_inline_chunks_287.push(chunk); }); value.on("end", function () { try { - var blob = new Blob(JSCompiler_object_inline_chunks_291, { + var blob = new Blob(JSCompiler_object_inline_chunks_287, { type: mimeType }); response._formData.append(name, blob, filename); 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 50443298ce05c..ee4f544bc9f4d 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-24d8716e-20260123", - "react-dom": "19.3.0-canary-24d8716e-20260123", + "react": "19.3.0-canary-8c34556c-20260126", + "react-dom": "19.3.0-canary-8c34556c-20260126", "webpack": "^5.59.0" } } \ No newline at end of file diff --git a/packages/next/taskfile.js b/packages/next/taskfile.js index 01ac089ed4604..d353429534cf3 100644 --- a/packages/next/taskfile.js +++ b/packages/next/taskfile.js @@ -2201,7 +2201,7 @@ export async function copy_ncced(task) { export async function ncc(task, opts) { await task - .clear('src/compiled') + // .clear('src/compiled') // TODO: Re-enabled once npm issues are resolved. .parallel( [ 'ncc_safe_stable_stringify', @@ -2332,7 +2332,7 @@ export async function ncc(task, opts) { 'copy_babel_runtime', 'copy_vercel_og', 'copy_constants_browserify', - 'copy_vendor_react', + // 'copy_vendor_react', // TODO: Re-enable once npm issues are resolved. 'ncc_sass_loader', 'ncc_jest_worker', 'ncc_edge_runtime_cookies', From c7d45bb50ced6eac84cacf3d81b1616b88e95b8f Mon Sep 17 00:00:00 2001 From: nextjs-bot Date: Mon, 26 Jan 2026 21:32:50 +0000 Subject: [PATCH 04/11] v16.2.0-canary.9 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 ++-- packages/eslint-plugin-internal/package.json | 2 +- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-routing/package.json | 2 +- packages/next-rspack/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 +++++++------- packages/react-refresh-utils/package.json | 2 +- packages/third-parties/package.json | 4 ++-- pnpm-lock.yaml | 16 ++++++++-------- 20 files changed, 35 insertions(+), 35 deletions(-) diff --git a/lerna.json b/lerna.json index 3d26ebaef3365..a815c19bdf77f 100644 --- a/lerna.json +++ b/lerna.json @@ -15,5 +15,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "16.2.0-canary.8" + "version": "16.2.0-canary.9" } \ No newline at end of file diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index f98c6c0388202..b20b0e9ff8dcb 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index fe1b4ecd6709a..c65816f60327a 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "description": "ESLint configuration used by Next.js.", "license": "MIT", "repository": { @@ -12,7 +12,7 @@ "dist" ], "dependencies": { - "@next/eslint-plugin-next": "16.2.0-canary.8", + "@next/eslint-plugin-next": "16.2.0-canary.9", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index 3982558d39e43..54012022a2d0b 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -1,7 +1,7 @@ { "name": "@next/eslint-plugin-internal", "private": true, - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "description": "ESLint plugin for working on Next.js.", "exports": { ".": "./src/eslint-plugin-internal.js" diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index 082cfac1d6b32..5ed2f23748168 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/font/package.json b/packages/font/package.json index e7f1e060c4fa5..e93cd5870479d 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index bb906e59d03e4..880678e83a79f 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 4e65407507e9a..6b76b7d2d0bcc 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 2c4466a6120b2..88cf131953204 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 62942bfb30f98..eff23d00ba747 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index dd3dee653f436..cb76cf35a4a5b 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index c3c587bb7be31..9773cb0457346 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 7ddfad01ff5c6..9dd7fa9f85870 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-routing/package.json b/packages/next-routing/package.json index 7a2a3eea7ef2d..57f33d27f3f67 100644 --- a/packages/next-routing/package.json +++ b/packages/next-routing/package.json @@ -1,6 +1,6 @@ { "name": "@next/routing", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "keywords": [ "react", "next", diff --git a/packages/next-rspack/package.json b/packages/next-rspack/package.json index d32379f187bc6..e046738578e32 100644 --- a/packages/next-rspack/package.json +++ b/packages/next-rspack/package.json @@ -1,6 +1,6 @@ { "name": "next-rspack", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "repository": { "url": "vercel/next.js", "directory": "packages/next-rspack" diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index eebc4272f05f0..985e770a7dd44 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "private": true, "files": [ "native/" diff --git a/packages/next/package.json b/packages/next/package.json index 6985f656f4429..ab2285597a692 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -97,7 +97,7 @@ ] }, "dependencies": { - "@next/env": "16.2.0-canary.8", + "@next/env": "16.2.0-canary.9", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", @@ -162,11 +162,11 @@ "@modelcontextprotocol/sdk": "1.18.1", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "16.2.0-canary.8", - "@next/polyfill-module": "16.2.0-canary.8", - "@next/polyfill-nomodule": "16.2.0-canary.8", - "@next/react-refresh-utils": "16.2.0-canary.8", - "@next/swc": "16.2.0-canary.8", + "@next/font": "16.2.0-canary.9", + "@next/polyfill-module": "16.2.0-canary.9", + "@next/polyfill-nomodule": "16.2.0-canary.9", + "@next/react-refresh-utils": "16.2.0-canary.9", + "@next/swc": "16.2.0-canary.9", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.51.1", "@rspack/core": "1.6.7", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index 1062d1a719763..572b8dfb66b80 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index 975652dae2b90..a4b9816f5f9f2 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "16.2.0-canary.8", + "version": "16.2.0-canary.9", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "16.2.0-canary.8", + "next": "16.2.0-canary.9", "outdent": "0.8.0", "prettier": "2.5.1", "typescript": "5.9.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f5d4c62d415c..4f6647b33fa6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1008,7 +1008,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 16.2.0-canary.8 + specifier: 16.2.0-canary.9 version: link:../eslint-plugin-next eslint: specifier: '>=9.0.0' @@ -1085,7 +1085,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 16.2.0-canary.8 + specifier: 16.2.0-canary.9 version: link:../next-env '@swc/helpers': specifier: 0.5.15 @@ -1213,19 +1213,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 16.2.0-canary.8 + specifier: 16.2.0-canary.9 version: link:../font '@next/polyfill-module': - specifier: 16.2.0-canary.8 + specifier: 16.2.0-canary.9 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 16.2.0-canary.8 + specifier: 16.2.0-canary.9 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 16.2.0-canary.8 + specifier: 16.2.0-canary.9 version: link:../react-refresh-utils '@next/swc': - specifier: 16.2.0-canary.8 + specifier: 16.2.0-canary.9 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1943,7 +1943,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 16.2.0-canary.8 + specifier: 16.2.0-canary.9 version: link:../next outdent: specifier: 0.8.0 From e8ef2305b5a69a1711d5b84ed003591e4db761d3 Mon Sep 17 00:00:00 2001 From: Hendrik Liebau Date: Mon, 26 Jan 2026 23:43:01 +0100 Subject: [PATCH 05/11] Use null-prototype objects in server actions manifests (#89069) As a defense-in-depth mechanism, we're converting the server actions manifests and client reference manifests to use null-prototype objects, so that property lookups cannot traverse `Object.prototype`. --- .../next/src/server/app-render/manifests-singleton.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/next/src/server/app-render/manifests-singleton.ts b/packages/next/src/server/app-render/manifests-singleton.ts index c917feefc6e9b..5df89c9881e27 100644 --- a/packages/next/src/server/app-render/manifests-singleton.ts +++ b/packages/next/src/server/app-render/manifests-singleton.ts @@ -274,7 +274,7 @@ export function selectWorkerForForwarding( export function setManifestsSingleton({ page, clientReferenceManifest, - serverActionsManifest, + serverActionsManifest: rawServerActionsManifest, }: { page: string clientReferenceManifest: DeepReadonly @@ -282,6 +282,14 @@ export function setManifestsSingleton({ }) { const existingSingleton = globalThisWithManifests[MANIFESTS_SINGLETON] + const serverActionsManifest: DeepReadonly = { + encryptionKey: rawServerActionsManifest.encryptionKey, + // Use null-prototypes for the action objects to prevent prototype pollution + // from affecting action ID lookups. + node: Object.assign(Object.create(null), rawServerActionsManifest.node), + edge: Object.assign(Object.create(null), rawServerActionsManifest.edge), + } + if (existingSingleton) { existingSingleton.clientReferenceManifestsPerRoute.set( normalizeAppPath(page), From d224a56201d64a49e9d25237136fa7104d263a5c Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Mon, 26 Jan 2026 15:18:41 -0800 Subject: [PATCH 06/11] Fix reset deploy project script (#89001) This script has been quietly failing on cron occasionally, this updates to ensure it shows as failing when the inner requests fail and also adds back-off logic for re-creating the project after deleting the previous. x-ref: https://github.com/vercel/next.js/actions/runs/21327384008/job/61386921911#step:6:12 --- scripts/reset-project.mjs | 90 ++++++++++++++++++-------- scripts/run-e2e-test-project-reset.mjs | 5 +- 2 files changed, 67 insertions(+), 28 deletions(-) diff --git a/scripts/reset-project.mjs b/scripts/reset-project.mjs index 1d96704002dbd..acda0ab2fcda6 100644 --- a/scripts/reset-project.mjs +++ b/scripts/reset-project.mjs @@ -4,6 +4,54 @@ export const TEST_PROJECT_NAME = 'vtest314-e2e-tests' export const TEST_TEAM_NAME = process.env.VERCEL_TEST_TEAM export const TEST_TOKEN = process.env.VERCEL_TEST_TOKEN +/** + * Retry a fetch request with exponential backoff + * @param {string} url - The URL to fetch + * @param {object} options - Fetch options + * @param {object} config - Retry configuration + * @param {number} config.maxRetries - Maximum number of retry attempts (default: 5) + * @param {number[]} config.acceptableStatuses - Status codes that are acceptable and should not retry (default: []) + * @param {string} config.operationName - Name of the operation for logging (default: 'Request') + * @returns {Promise} The fetch response + */ +async function fetchWithRetry( + url, + options = {}, + { maxRetries = 5, acceptableStatuses = [], operationName = 'Request' } = {} +) { + let lastError + let response + + for (let attempt = 0; attempt < maxRetries; attempt++) { + response = await fetch(url, options) + + // Check if response is acceptable + if (response.ok || acceptableStatuses.includes(response.status)) { + return response + } + + // If we have attempts remaining, retry + if (attempt < maxRetries - 1) { + const delay = Math.pow(2, attempt) * 1000 // exponential backoff: 1s, 2s, 4s, 8s, 16s + const errorText = await response.text() + console.log( + `${operationName} failed with status ${response.status} (attempt ${attempt + 1}/${maxRetries}), waiting ${delay}ms before retrying...` + ) + lastError = `${operationName} failed. Got status: ${response.status}, ${errorText}` + await new Promise((resolve) => setTimeout(resolve, delay)) + continue + } + + // Last attempt failed, capture error + lastError = `${operationName} failed. Got status: ${ + response.status + }, ${await response.text()}` + } + + // All retries exhausted + throw new Error(lastError) +} + export async function resetProject({ teamId = TEST_TEAM_NAME, projectName = TEST_PROJECT_NAME, @@ -11,7 +59,7 @@ export async function resetProject({ }) { console.log(`Resetting project ${teamId}/${projectName}`) // TODO: error/bail if existing deployments are pending - const deleteRes = await fetch( + await fetchWithRetry( `https://vercel.com/api/v8/projects/${encodeURIComponent( projectName )}?teamId=${teamId}`, @@ -20,18 +68,15 @@ export async function resetProject({ headers: { Authorization: `Bearer ${TEST_TOKEN}`, }, + }, + { + acceptableStatuses: [404], // 404 is acceptable (project doesn't exist) + operationName: 'Delete project', } ) - if (!deleteRes.ok && deleteRes.status !== 404) { - throw new Error( - `Failed to delete project got status ${ - deleteRes.status - }, ${await deleteRes.text()}` - ) - } - - const createRes = await fetch( + // Retry logic for project creation since deletion may be async + const createRes = await fetchWithRetry( `https://vercel.com/api/v8/projects?teamId=${teamId}`, { method: 'POST', @@ -43,17 +88,12 @@ export async function resetProject({ framework: 'nextjs', name: projectName, }), + }, + { + operationName: 'Create project', } ) - if (!createRes.ok) { - throw new Error( - `Failed to create project. Got status: ${ - createRes.status - }, ${await createRes.text()}` - ) - } - const { id: projectId } = await createRes.json() if (!projectId) { @@ -63,7 +103,7 @@ export async function resetProject({ if (disableDeploymentProtection) { console.log('Disabling deployment protection...') - const patchRes = await fetch( + await fetchWithRetry( `https://vercel.com/api/v8/projects/${encodeURIComponent( projectId )}?teamId=${teamId}`, @@ -75,17 +115,13 @@ export async function resetProject({ }, body: JSON.stringify({ ssoProtection: null, + passwordProtection: null, }), + }, + { + operationName: 'Disable deployment protection', } ) - - if (!patchRes.ok) { - throw new Error( - `Failed to disable deployment protection. Got status: ${ - patchRes.status - }, ${await patchRes.text()}` - ) - } } console.log( diff --git a/scripts/run-e2e-test-project-reset.mjs b/scripts/run-e2e-test-project-reset.mjs index 558e2ed943aad..ba9edbfa1efcd 100644 --- a/scripts/run-e2e-test-project-reset.mjs +++ b/scripts/run-e2e-test-project-reset.mjs @@ -8,4 +8,7 @@ resetProject({ projectName: TEST_PROJECT_NAME, teamId: TEST_TEAM_NAME, disableDeploymentProtection: true, -}).catch(console.error) +}).catch((err) => { + console.error(err) + process.exit(1) +}) From a04499797e2ff9ca0321ab0706d6f335d59266df Mon Sep 17 00:00:00 2001 From: "Sebastian \"Sebbie\" Silbermann" Date: Tue, 27 Jan 2026 00:19:43 +0100 Subject: [PATCH 07/11] Re-enable types-and-precompiled (#89070) --- examples/reproduction-template/package.json | 4 +- package.json | 32 +- packages/create-next-app/templates/index.ts | 2 +- .../cjs/react-dom-client.development.js | 10 +- .../cjs/react-dom-client.production.js | 10 +- .../cjs/react-dom-profiling.development.js | 10 +- .../cjs/react-dom-profiling.profiling.js | 10 +- ...t-dom-server-legacy.browser.development.js | 2 +- ...ct-dom-server-legacy.browser.production.js | 2 +- ...eact-dom-server-legacy.node.development.js | 2 +- ...react-dom-server-legacy.node.production.js | 2 +- .../react-dom-server.browser.development.js | 6 +- .../react-dom-server.browser.production.js | 6 +- .../cjs/react-dom-server.bun.production.js | 6 +- .../cjs/react-dom-server.edge.development.js | 6 +- .../cjs/react-dom-server.edge.production.js | 6 +- .../cjs/react-dom-server.node.development.js | 6 +- .../cjs/react-dom-server.node.production.js | 6 +- .../react-dom-unstable_testing.development.js | 10 +- .../react-dom-unstable_testing.production.js | 10 +- .../cjs/react-dom.development.js | 2 +- .../cjs/react-dom.production.js | 2 +- .../cjs/react-dom.react-server.development.js | 2 +- .../cjs/react-dom.react-server.production.js | 2 +- .../react-dom-experimental/package.json | 4 +- .../cjs/react-dom-client.development.js | 10 +- .../cjs/react-dom-client.production.js | 10 +- .../cjs/react-dom-profiling.development.js | 10 +- .../cjs/react-dom-profiling.profiling.js | 10 +- ...t-dom-server-legacy.browser.development.js | 2 +- ...ct-dom-server-legacy.browser.production.js | 2 +- ...eact-dom-server-legacy.node.development.js | 2 +- ...react-dom-server-legacy.node.production.js | 2 +- .../react-dom-server.browser.development.js | 6 +- .../react-dom-server.browser.production.js | 6 +- .../cjs/react-dom-server.bun.production.js | 6 +- .../cjs/react-dom-server.edge.development.js | 6 +- .../cjs/react-dom-server.edge.production.js | 6 +- .../cjs/react-dom-server.node.development.js | 6 +- .../cjs/react-dom-server.node.production.js | 6 +- .../react-dom/cjs/react-dom.development.js | 2 +- .../react-dom/cjs/react-dom.production.js | 2 +- .../cjs/react-dom.react-server.development.js | 2 +- .../cjs/react-dom.react-server.production.js | 2 +- .../next/src/compiled/react-dom/package.json | 4 +- .../cjs/react.development.js | 2 +- .../cjs/react.production.js | 2 +- .../cjs/react.react-server.development.js | 2 +- .../cjs/react.react-server.production.js | 2 +- .../next/src/compiled/react-is/package.json | 2 +- ...om-turbopack-client.browser.development.js | 4 +- .../package.json | 4 +- ...om-turbopack-client.browser.development.js | 4 +- .../react-server-dom-turbopack/package.json | 4 +- ...-dom-webpack-client.browser.development.js | 4 +- .../package.json | 4 +- ...-dom-webpack-client.browser.development.js | 4 +- .../react-server-dom-webpack/package.json | 4 +- .../compiled/react/cjs/react.development.js | 2 +- .../compiled/react/cjs/react.production.js | 2 +- .../cjs/react.react-server.development.js | 2 +- .../cjs/react.react-server.production.js | 2 +- .../next/src/compiled/unistore/unistore.js | 2 +- packages/next/taskfile.js | 4 +- pnpm-lock.yaml | 1748 ++++++++--------- run-tests.js | 2 +- test/.stats-app/package.json | 4 +- .../first-time-setup-js/package.json | 4 +- .../first-time-setup-ts/package.json | 4 +- test/lib/next-modes/base.ts | 2 +- 70 files changed, 1041 insertions(+), 1041 deletions(-) diff --git a/examples/reproduction-template/package.json b/examples/reproduction-template/package.json index 05c41302ee2ca..208843153f992 100644 --- a/examples/reproduction-template/package.json +++ b/examples/reproduction-template/package.json @@ -7,8 +7,8 @@ }, "dependencies": { "next": "canary", - "react": "19.2.3", - "react-dom": "19.2.3" + "react": "19.2.4", + "react-dom": "19.2.4" }, "devDependencies": { "@types/node": "^22", diff --git a/package.json b/package.json index a76e601ff3e04..c14218a93555f 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ "eslint-plugin-jsdoc": "48.0.4", "eslint-plugin-mdx": "3.1.5", "eslint-plugin-react": "7.37.0", - "eslint-plugin-react-hooks": "0.0.0-experimental-24d8716e-20260123", + "eslint-plugin-react-hooks": "0.0.0-experimental-10680271-20260126", "event-stream": "4.0.1", "execa": "2.0.3", "expect": "29.7.0", @@ -258,16 +258,16 @@ "pretty-ms": "7.0.0", "random-seed": "0.3.0", "react": "19.0.0", - "react-builtin": "npm:react@19.3.0-canary-24d8716e-20260123", + "react-builtin": "npm:react@19.3.0-canary-10680271-20260126", "react-dom": "19.0.0", - "react-dom-builtin": "npm:react-dom@19.3.0-canary-24d8716e-20260123", - "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-24d8716e-20260123", - "react-experimental-builtin": "npm:react@0.0.0-experimental-24d8716e-20260123", - "react-is-builtin": "npm:react-is@19.3.0-canary-24d8716e-20260123", - "react-server-dom-turbopack": "19.3.0-canary-24d8716e-20260123", - "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-24d8716e-20260123", - "react-server-dom-webpack": "19.3.0-canary-24d8716e-20260123", - "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-24d8716e-20260123", + "react-dom-builtin": "npm:react-dom@19.3.0-canary-10680271-20260126", + "react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-10680271-20260126", + "react-experimental-builtin": "npm:react@0.0.0-experimental-10680271-20260126", + "react-is-builtin": "npm:react-is@19.3.0-canary-10680271-20260126", + "react-server-dom-turbopack": "19.3.0-canary-10680271-20260126", + "react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-10680271-20260126", + "react-server-dom-webpack": "19.3.0-canary-10680271-20260126", + "react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-10680271-20260126", "react-ssr-prepass": "1.0.8", "react-virtualized": "9.22.3", "relay-compiler": "13.0.2", @@ -277,8 +277,8 @@ "resolve-from": "5.0.0", "sass": "1.54.0", "satori": "0.15.2", - "scheduler-builtin": "npm:scheduler@0.28.0-canary-24d8716e-20260123", - "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-24d8716e-20260123", + "scheduler-builtin": "npm:scheduler@0.28.0-canary-10680271-20260126", + "scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-10680271-20260126", "seedrandom": "3.0.5", "semver": "7.3.7", "serve-handler": "6.1.6", @@ -323,10 +323,10 @@ "@types/react-dom": "19.2.1", "@types/retry": "0.12.0", "jest-snapshot": "30.0.0-alpha.6", - "react": "19.3.0-canary-24d8716e-20260123", - "react-dom": "19.3.0-canary-24d8716e-20260123", - "react-is": "19.3.0-canary-24d8716e-20260123", - "scheduler": "0.28.0-canary-24d8716e-20260123" + "react": "19.3.0-canary-10680271-20260126", + "react-dom": "19.3.0-canary-10680271-20260126", + "react-is": "19.3.0-canary-10680271-20260126", + "scheduler": "0.28.0-canary-10680271-20260126" }, "packageExtensions": { "eslint-plugin-react-hooks@0.0.0-experimental-6de32a5a-20250822": { diff --git a/packages/create-next-app/templates/index.ts b/packages/create-next-app/templates/index.ts index bca5bf716666e..1465f207db12c 100644 --- a/packages/create-next-app/templates/index.ts +++ b/packages/create-next-app/templates/index.ts @@ -15,7 +15,7 @@ import { Bundler, GetTemplateFileArgs, InstallTemplateArgs } from "./types"; // Do not rename or format. sync-react script relies on this line. // prettier-ignore -const nextjsReactPeerVersion = "19.2.3"; +const nextjsReactPeerVersion = "19.2.4"; function sorted(obj: Record) { return Object.keys(obj) .sort() 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 4f6f4b59e7550..76a9bb2191275 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 @@ -32672,11 +32672,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -32713,10 +32713,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-24d8716e-20260123", + version: "19.3.0-experimental-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-24d8716e-20260123" + reconcilerVersion: "19.3.0-experimental-10680271-20260126" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -32864,7 +32864,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.3.0-experimental-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; "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 7815f88aade3e..43f704ff7fe63 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 @@ -19825,14 +19825,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2237 = React.version; if ( - "19.3.0-experimental-24d8716e-20260123" !== + "19.3.0-experimental-10680271-20260126" !== isomorphicReactPackageVersion$jscomp$inline_2237 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2237, - "19.3.0-experimental-24d8716e-20260123" + "19.3.0-experimental-10680271-20260126" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -19854,10 +19854,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2940 = { bundleType: 0, - version: "19.3.0-experimental-24d8716e-20260123", + version: "19.3.0-experimental-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-24d8716e-20260123" + reconcilerVersion: "19.3.0-experimental-10680271-20260126" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2941 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -19964,4 +19964,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 9ca71947857ef..871f4bce5ec2c 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 @@ -32729,11 +32729,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -32770,10 +32770,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-24d8716e-20260123", + version: "19.3.0-experimental-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-24d8716e-20260123" + reconcilerVersion: "19.3.0-experimental-10680271-20260126" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -33251,7 +33251,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-experimental-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; "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 5567fb324323a..f2b82235dddd7 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 @@ -21907,14 +21907,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2541 = React.version; if ( - "19.3.0-experimental-24d8716e-20260123" !== + "19.3.0-experimental-10680271-20260126" !== isomorphicReactPackageVersion$jscomp$inline_2541 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2541, - "19.3.0-experimental-24d8716e-20260123" + "19.3.0-experimental-10680271-20260126" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -21936,10 +21936,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_3261 = { bundleType: 0, - version: "19.3.0-experimental-24d8716e-20260123", + version: "19.3.0-experimental-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-24d8716e-20260123" + reconcilerVersion: "19.3.0-experimental-10680271-20260126" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_3262 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -22207,7 +22207,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; "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 3e6cb92a29c60..8df411c732829 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 @@ -10516,5 +10516,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-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; })(); 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 c14c449c3e463..15bebd3b296e2 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 @@ -7035,4 +7035,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-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 6c77ee234cdd5..1dbc9dfe69e4b 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 @@ -10516,5 +10516,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-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; })(); 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 323b8b1e69af6..ebdc99f41586e 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 @@ -7138,4 +7138,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-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 03c16f9a81b36..25285b8848030 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 @@ -9492,11 +9492,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -11319,5 +11319,5 @@ startWork(request); }); }; - exports.version = "19.3.0-experimental-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; })(); 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 1d7e9e9381eb2..dfb8abc81115a 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 @@ -7688,12 +7688,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.3.0-experimental-24d8716e-20260123" + "19.3.0-experimental-10680271-20260126" ) ); } @@ -7944,4 +7944,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 94f4349da5847..ff15a34e5fda4 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 @@ -7383,11 +7383,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7932,4 +7932,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 0b5862b99cb66..42d9baaf269e5 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 @@ -9521,11 +9521,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react-experimental"), @@ -11344,5 +11344,5 @@ startWork(request); }); }; - exports.version = "19.3.0-experimental-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; })(); 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 fbb50ec6f6d88..c8794ee5c1447 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 @@ -7806,11 +7806,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8060,4 +8060,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 0ae0bbd7bee15..decd696e21ca2 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 @@ -9381,11 +9381,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -11510,5 +11510,5 @@ } }; }; - exports.version = "19.3.0-experimental-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; })(); 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 3e567fdbc2c60..b466d2f88e949 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 @@ -7685,11 +7685,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -8239,4 +8239,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 132d78dad1a2a..bda55937defa3 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 @@ -32993,11 +32993,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-experimental-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-experimental-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-experimental-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -33034,10 +33034,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-experimental-24d8716e-20260123", + version: "19.3.0-experimental-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-24d8716e-20260123" + reconcilerVersion: "19.3.0-experimental-10680271-20260126" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -33351,5 +33351,5 @@ } }; }; - exports.version = "19.3.0-experimental-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; })(); 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 b0f066f62dd6b..3c8c33617de65 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 @@ -20141,14 +20141,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2266 = React.version; if ( - "19.3.0-experimental-24d8716e-20260123" !== + "19.3.0-experimental-10680271-20260126" !== isomorphicReactPackageVersion$jscomp$inline_2266 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2266, - "19.3.0-experimental-24d8716e-20260123" + "19.3.0-experimental-10680271-20260126" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -20170,10 +20170,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2974 = { bundleType: 0, - version: "19.3.0-experimental-24d8716e-20260123", + version: "19.3.0-experimental-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-24d8716e-20260123" + reconcilerVersion: "19.3.0-experimental-10680271-20260126" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2975 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20431,4 +20431,4 @@ exports.observeVisibleRects = function ( } }; }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 54e70f2066bb0..7a6c74dfdcec0 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 @@ -422,7 +422,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-experimental-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; "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 4e9842d6adb88..abcb8acf2060b 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 @@ -213,4 +213,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 d3d563e1b90e7..2aa27c24097a1 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 @@ -336,5 +336,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.3.0-experimental-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; })(); 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 fb102a9165b7c..18f279544fadb 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 @@ -149,4 +149,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.3.0-experimental-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; diff --git a/packages/next/src/compiled/react-dom-experimental/package.json b/packages/next/src/compiled/react-dom-experimental/package.json index f91f1efcc1ec2..30f29dd23b482 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-24d8716e-20260123" + "scheduler": "0.0.0-experimental-10680271-20260126" }, "peerDependencies": { - "react": "0.0.0-experimental-24d8716e-20260123" + "react": "0.0.0-experimental-10680271-20260126" }, "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 3fbd2ff57dbbb..434b6150ccb18 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 @@ -30422,11 +30422,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -30463,10 +30463,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-canary-24d8716e-20260123", + version: "19.3.0-canary-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-24d8716e-20260123" + reconcilerVersion: "19.3.0-canary-10680271-20260126" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -30604,7 +30604,7 @@ listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; - exports.version = "19.3.0-canary-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; "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 895633f0f6c2e..6c20cb0e3a4e6 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 @@ -18028,14 +18028,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2044 = React.version; if ( - "19.3.0-canary-24d8716e-20260123" !== + "19.3.0-canary-10680271-20260126" !== isomorphicReactPackageVersion$jscomp$inline_2044 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2044, - "19.3.0-canary-24d8716e-20260123" + "19.3.0-canary-10680271-20260126" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -18057,10 +18057,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2634 = { bundleType: 0, - version: "19.3.0-canary-24d8716e-20260123", + version: "19.3.0-canary-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-24d8716e-20260123" + reconcilerVersion: "19.3.0-canary-10680271-20260126" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2635 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -18158,4 +18158,4 @@ exports.hydrateRoot = function (container, initialChildren, options) { listenToAllSupportedEvents(container); return new ReactDOMHydrationRoot(initialChildren); }; -exports.version = "19.3.0-canary-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 0ca9f558105d0..782e6b26078e5 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 @@ -30480,11 +30480,11 @@ }; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -30521,10 +30521,10 @@ !(function () { var internals = { bundleType: 1, - version: "19.3.0-canary-24d8716e-20260123", + version: "19.3.0-canary-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-24d8716e-20260123" + reconcilerVersion: "19.3.0-canary-10680271-20260126" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -30992,7 +30992,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-canary-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; "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 0af0f069083a3..83ca3febfaab0 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 @@ -19957,14 +19957,14 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) { }; var isomorphicReactPackageVersion$jscomp$inline_2348 = React.version; if ( - "19.3.0-canary-24d8716e-20260123" !== + "19.3.0-canary-10680271-20260126" !== isomorphicReactPackageVersion$jscomp$inline_2348 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2348, - "19.3.0-canary-24d8716e-20260123" + "19.3.0-canary-10680271-20260126" ) ); ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { @@ -19986,10 +19986,10 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) { }; var internals$jscomp$inline_2951 = { bundleType: 0, - version: "19.3.0-canary-24d8716e-20260123", + version: "19.3.0-canary-10680271-20260126", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-24d8716e-20260123" + reconcilerVersion: "19.3.0-canary-10680271-20260126" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2952 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20248,7 +20248,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-canary-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; "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 6628bdfb55ed2..8ef23d062c1fd 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 @@ -10140,5 +10140,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-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; })(); 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 44337cb8c75d2..1b52b064da81d 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 @@ -6763,4 +6763,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-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 1d102cce82f15..8aeb1a7fca2a5 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 @@ -10140,5 +10140,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-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; })(); 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 53ade1e2d0973..89c4c725c1710 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 @@ -6855,4 +6855,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-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 64627f1a54dc0..65afdf817b92b 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 @@ -9103,11 +9103,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -10913,5 +10913,5 @@ startWork(request); }); }; - exports.version = "19.3.0-canary-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; })(); 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 95d79a3c98d68..289e25dcd0c5b 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 @@ -7365,12 +7365,12 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== isomorphicReactPackageVersion) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion, - "19.3.0-canary-24d8716e-20260123" + "19.3.0-canary-10680271-20260126" ) ); } @@ -7621,4 +7621,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-canary-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 7b9286b584816..1847bdfc9e67b 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 @@ -7073,11 +7073,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7622,4 +7622,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-canary-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 c30674f9ba140..b2a26ca16bc33 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 @@ -9126,11 +9126,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } var React = require("next/dist/compiled/react"), @@ -10932,5 +10932,5 @@ startWork(request); }); }; - exports.version = "19.3.0-canary-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; })(); 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 0e9b1525b397d..7ffb99625238d 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 @@ -7472,11 +7472,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7726,4 +7726,4 @@ exports.resumeAndPrerender = function (children, postponedState, options) { startWork(request); }); }; -exports.version = "19.3.0-canary-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 63fd0b726e018..5a2a07c38c3ff 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 @@ -9000,11 +9000,11 @@ } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } function createDrainHandler(destination, request) { @@ -11112,5 +11112,5 @@ } }; }; - exports.version = "19.3.0-canary-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; })(); 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 a603c1fd39666..63f1436ec6f4f 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 @@ -7363,11 +7363,11 @@ function getPostponedState(request) { } function ensureCorrectIsomorphicReactVersion() { var isomorphicReactPackageVersion = React.version; - if ("19.3.0-canary-24d8716e-20260123" !== isomorphicReactPackageVersion) + if ("19.3.0-canary-10680271-20260126" !== 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-24d8716e-20260123\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.3.0-canary-10680271-20260126\nLearn more: https://react.dev/warnings/version-mismatch") ); } ensureCorrectIsomorphicReactVersion(); @@ -7917,4 +7917,4 @@ exports.resumeToPipeableStream = function (children, postponedState, options) { } }; }; -exports.version = "19.3.0-canary-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 00e5488b330b9..c88194d77e30f 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 @@ -422,7 +422,7 @@ exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.3.0-canary-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; "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 89e6184458b08..f7d7454f5e59b 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 @@ -213,4 +213,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.3.0-canary-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 c44b7f1fe8ba4..bca941adb2c00 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 @@ -336,5 +336,5 @@ })) : Internals.d.m(href)); }; - exports.version = "19.3.0-canary-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; })(); 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 91de6df43478b..7875e8c7b5837 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 @@ -149,4 +149,4 @@ exports.preloadModule = function (href, options) { }); } else Internals.d.m(href); }; -exports.version = "19.3.0-canary-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; diff --git a/packages/next/src/compiled/react-dom/package.json b/packages/next/src/compiled/react-dom/package.json index 0c86540cb3d26..33f114faef463 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-24d8716e-20260123" + "scheduler": "0.28.0-canary-10680271-20260126" }, "peerDependencies": { - "react": "19.3.0-canary-24d8716e-20260123" + "react": "19.3.0-canary-10680271-20260126" }, "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 650bdc5e5fb20..2670e59aac395 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-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; "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 c10761c0efd3a..290e3a19901ad 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-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; 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 29027c08644a7..7dcd2dc985a73 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-24d8716e-20260123"; + exports.version = "19.3.0-experimental-10680271-20260126"; })(); 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 e42fd14be952b..15b93c4311fe0 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-24d8716e-20260123"; +exports.version = "19.3.0-experimental-10680271-20260126"; diff --git a/packages/next/src/compiled/react-is/package.json b/packages/next/src/compiled/react-is/package.json index c9babb5ac9692..78f85577b06cf 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-24d8716e-20260123", + "version": "19.3.0-canary-10680271-20260126", "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 f26a58de53aa5..48c72f130a719 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 @@ -5019,10 +5019,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-8c34556c-20260126", + version: "19.3.0-experimental-10680271-20260126", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-8c34556c-20260126", + reconcilerVersion: "19.3.0-experimental-10680271-20260126", getCurrentComponentInfo: function () { return currentOwnerInDEV; } 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 b615e82b3143a..9d10946515874 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-8c34556c-20260126", - "react-dom": "0.0.0-experimental-8c34556c-20260126" + "react": "0.0.0-experimental-10680271-20260126", + "react-dom": "0.0.0-experimental-10680271-20260126" } } \ No newline at end of file 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 1436a60edb977..d26b237af955c 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 @@ -5019,10 +5019,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-8c34556c-20260126", + version: "19.3.0-canary-10680271-20260126", rendererPackageName: "react-server-dom-turbopack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-8c34556c-20260126", + reconcilerVersion: "19.3.0-canary-10680271-20260126", getCurrentComponentInfo: function () { return currentOwnerInDEV; } 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 5af775e6b78ee..57d4597b844b6 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-8c34556c-20260126", - "react-dom": "19.3.0-canary-8c34556c-20260126" + "react": "19.3.0-canary-10680271-20260126", + "react-dom": "19.3.0-canary-10680271-20260126" } } \ No newline at end of file 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 54f5589a854fb..0ed755139020b 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 @@ -5035,10 +5035,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-experimental-8c34556c-20260126", + version: "19.3.0-experimental-10680271-20260126", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-experimental-8c34556c-20260126", + reconcilerVersion: "19.3.0-experimental-10680271-20260126", getCurrentComponentInfo: function () { return currentOwnerInDEV; } 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 9d354b483b17b..0bd5c285cb492 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-8c34556c-20260126", - "react-dom": "0.0.0-experimental-8c34556c-20260126", + "react": "0.0.0-experimental-10680271-20260126", + "react-dom": "0.0.0-experimental-10680271-20260126", "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 58d330511f7e8..6e941fd638069 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 @@ -5035,10 +5035,10 @@ return hook.checkDCE ? !0 : !1; })({ bundleType: 1, - version: "19.3.0-canary-8c34556c-20260126", + version: "19.3.0-canary-10680271-20260126", rendererPackageName: "react-server-dom-webpack", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.3.0-canary-8c34556c-20260126", + reconcilerVersion: "19.3.0-canary-10680271-20260126", getCurrentComponentInfo: function () { return currentOwnerInDEV; } 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 ee4f544bc9f4d..88c86789abf70 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-8c34556c-20260126", - "react-dom": "19.3.0-canary-8c34556c-20260126", + "react": "19.3.0-canary-10680271-20260126", + "react-dom": "19.3.0-canary-10680271-20260126", "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 e2d2ebd1534b6..3f4e52caa0c6c 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-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; "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 92bf291d9377c..f20e0817fa5ab 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-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; 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 4ce9d01925e5c..1a1c36475f7a7 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-24d8716e-20260123"; + exports.version = "19.3.0-canary-10680271-20260126"; })(); 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 e71f30e14e5ef..6ba652ae99c05 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-24d8716e-20260123"; +exports.version = "19.3.0-canary-10680271-20260126"; diff --git a/packages/next/src/compiled/unistore/unistore.js b/packages/next/src/compiled/unistore/unistore.js index 4dce1f1bec8f4..1825ac2dd542c 100644 --- a/packages/next/src/compiled/unistore/unistore.js +++ b/packages/next/src/compiled/unistore/unistore.js @@ -1 +1 @@ -(()=>{var t={135:t=>{function n(t,i){for(var _ in i)t[_]=i[_];return t}t.exports=function(t){var i=[];function u(t){for(var _=[],a=0;a{var t={402: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=14.0.0'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -2905,8 +2905,8 @@ packages: resolution: {integrity: sha512-9+uaWyF1o/PgXqHLJnC81IIG0HlV3o9eFCQ5hWZDMx5NHrFk0rrwqEFGQOB8lti/rnbxNPi+kYYw1D4e8xSn/Q==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -3061,7 +3061,7 @@ packages: resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} peerDependencies: '@types/react': '*' - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -3078,7 +3078,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks@1.0.1': resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 '@emotion/utils@1.2.1': resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} @@ -3583,20 +3583,20 @@ packages: '@floating-ui/react-dom@2.1.0': resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 '@floating-ui/react-dom@2.1.5': resolution: {integrity: sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 '@floating-ui/react@0.26.16': resolution: {integrity: sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} @@ -4313,13 +4313,13 @@ packages: resolution: {integrity: sha512-l9ypojKN3PjwO1CSLIsqxi7mA25+7w+xc71Q+JuCCREI0tuGwkZsKbIOpuTATIJOjPh8ycLiW7QxX1LYsRTq6w==} peerDependencies: '@mantine/hooks': 7.10.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 '@mantine/hooks@7.11.2': resolution: {integrity: sha512-jhyVe/sbDEG2U8rr2lMecUPgQxcfr5hh9HazqGfkS7ZRIMDO7uJ947yAcTMGGkp5Lxtt5TBFt1Cb6tiB2/1agg==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 '@mapbox/node-pre-gyp@1.0.5': resolution: {integrity: sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==} @@ -4339,13 +4339,13 @@ packages: '@mdx-js/react@2.2.1': resolution: {integrity: sha512-YdXcMcEnqZhzql98RNrqYo9cEhTTesBiCclEtoiQUbJwx87q9453GTapYU6kJ8ZZ2ek1Vp25SiAXEFy5O/eAPw==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 '@mdx-js/react@3.1.0': resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 '@modelcontextprotocol/sdk@1.18.1': resolution: {integrity: sha512-d//GE8/Yh7aC3e7p+kZG8JqqEAwwDUmAfvH1quogtbk+ksS6E0RR6toKKESPYYZVre0meqkJb27zb+dhqE9Sgw==} @@ -5016,8 +5016,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5029,8 +5029,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5042,8 +5042,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5055,8 +5055,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5068,8 +5068,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5081,8 +5081,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5094,8 +5094,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5106,7 +5106,7 @@ packages: resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5115,7 +5115,7 @@ packages: resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5124,7 +5124,7 @@ packages: resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5133,7 +5133,7 @@ packages: resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5142,7 +5142,7 @@ packages: resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5151,7 +5151,7 @@ packages: resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5161,8 +5161,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5174,8 +5174,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5186,7 +5186,7 @@ packages: resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5195,7 +5195,7 @@ packages: resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5205,8 +5205,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5218,8 +5218,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5231,8 +5231,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5243,7 +5243,7 @@ packages: resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5252,7 +5252,7 @@ packages: resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5262,8 +5262,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5275,8 +5275,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5287,7 +5287,7 @@ packages: resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5296,7 +5296,7 @@ packages: resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5306,8 +5306,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5319,8 +5319,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5332,8 +5332,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5345,8 +5345,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5358,8 +5358,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5371,8 +5371,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5384,8 +5384,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5397,8 +5397,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5410,8 +5410,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5423,8 +5423,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5436,8 +5436,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5449,8 +5449,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5462,8 +5462,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5475,8 +5475,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5488,8 +5488,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5501,8 +5501,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5514,8 +5514,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5527,8 +5527,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5540,8 +5540,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5552,7 +5552,7 @@ packages: resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5561,7 +5561,7 @@ packages: resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5570,7 +5570,7 @@ packages: resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5580,8 +5580,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5593,8 +5593,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5606,8 +5606,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5619,8 +5619,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5631,7 +5631,7 @@ packages: resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5640,7 +5640,7 @@ packages: resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5649,7 +5649,7 @@ packages: resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5658,7 +5658,7 @@ packages: resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5667,7 +5667,7 @@ packages: resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5676,7 +5676,7 @@ packages: resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5685,7 +5685,7 @@ packages: resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5694,7 +5694,7 @@ packages: resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5703,7 +5703,7 @@ packages: resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5712,7 +5712,7 @@ packages: resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5721,7 +5721,7 @@ packages: resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5730,7 +5730,7 @@ packages: resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5739,7 +5739,7 @@ packages: resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5748,7 +5748,7 @@ packages: resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5758,8 +5758,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -5771,8 +5771,8 @@ packages: peerDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -6076,8 +6076,8 @@ packages: '@storybook/blocks@8.6.0': resolution: {integrity: sha512-3PNxlB5Ooj8CIhttbDxeV6kW7ui+2GEdTngtqhnsUHVjzeTKpilsk2lviOeUzqlyq5FDK+rhpZ3L3DJ9pDvioA==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 storybook: ^8.6.0 peerDependenciesMeta: react: @@ -6127,8 +6127,8 @@ packages: resolution: {integrity: sha512-Nz/UzeYQdUZUhacrPyfkiiysSjydyjgg/p0P9HxB4p/WaJUUjMAcaoaLgy3EXx61zZJ3iD36WPuDkZs5QYrA0A==} engines: {node: '>=14.0.0'} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 '@storybook/instrumenter@8.6.0': resolution: {integrity: sha512-eEY/Hfa3Vj5Nv4vHRHlSqjoyW6oAKNK3rKIXfL/eawQwb7rKhzijDLG5YBH44Hh7dEPIqUp0LEdgpyIY7GXezg==} @@ -6144,8 +6144,8 @@ packages: resolution: {integrity: sha512-04T86VG0UJtiozgZkTR5sY1qM3E0Rgwqwllvyy7kFFdkV+Sv/VsPjW9sC38s9C8FtCYRL8pJZz81ey3oylpIMA==} engines: {node: '>=18.0.0'} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 storybook: ^8.6.0 typescript: '*' peerDependenciesMeta: @@ -6166,16 +6166,16 @@ packages: '@storybook/react-dom-shim@8.6.0': resolution: {integrity: sha512-5Y+vMHhcx0xnaNsLQMbkmjc3zkDn/fGBNsiLH2e4POvW3ZQvOxjoyxAsEQaKwLtFgsdCFSd2tR89F6ItYrA2JQ==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 storybook: ^8.6.0 '@storybook/react-webpack5@8.6.0': resolution: {integrity: sha512-2L9CYDPn1OL0B8K5EU/Wpo9Slg8f0vkYPaPioQnmcK3Q4SJR4JAuDVWHUtNdxhaPOkHIy887Tfrf6BEC/blMaQ==} engines: {node: '>=18.0.0'} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 storybook: ^8.6.0 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -6187,8 +6187,8 @@ packages: engines: {node: '>=18.0.0'} peerDependencies: '@storybook/test': 8.6.0 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 storybook: ^8.6.0 typescript: '>= 4.2.x' peerDependenciesMeta: @@ -6456,8 +6456,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -8395,8 +8395,8 @@ packages: cmdk@1.0.4: resolution: {integrity: sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -10062,8 +10062,8 @@ packages: peerDependencies: eslint: '>=8.0.0' - eslint-plugin-react-hooks@0.0.0-experimental-24d8716e-20260123: - resolution: {integrity: sha512-tEnrKVERUjAi55XD9ZnGRE5lthl7R5X9AGailw2gd/9Y+esGpyj2Kcg0MPA/sBqfjS79+LDT5aT4r2Zm6hQxvw==} + eslint-plugin-react-hooks@0.0.0-experimental-10680271-20260126: + resolution: {integrity: sha512-jZlyOgvfF+xB6jyZ92132Chx4wreBzfezM+r6Igl9caayoomgRmyfJ7EZ9O8KCouIJtxQfYqUde7EEVvLudGCg==} engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -10712,8 +10712,8 @@ packages: '@types/react': 19.2.2 algoliasearch: 5.x.x next: 14.x.x || 15.x.x - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 react-router: 7.x.x waku: ^0.26.0 peerDependenciesMeta: @@ -10745,7 +10745,7 @@ packages: '@fumadocs/mdx-remote': ^1.4.0 fumadocs-core: ^14.0.0 || ^15.0.0 next: ^15.3.0 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 vite: 6.x.x || 7.x.x peerDependenciesMeta: '@fumadocs/mdx-remote': @@ -10762,8 +10762,8 @@ packages: peerDependencies: '@types/react': 19.2.2 next: 14.x.x || 15.x.x - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 tailwindcss: ^3.4.14 || ^4.0.0 peerDependenciesMeta: '@types/react': @@ -13092,12 +13092,12 @@ packages: lucide-react@0.383.0: resolution: {integrity: sha512-13xlG0CQCJtzjSQYwwJ3WRqMHtRj3EXmLlorrARt7y+IHnxUCp3XyFNL1DfaGySWxHObDvnu1u1dV+0VMKHUSg==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 lucide-react@0.554.0: resolution: {integrity: sha512-St+z29uthEJVx0Is7ellNkgTEhaeSoA42I7JjOCBCrc5X6LYMGSv0P/2uS5HDLTExP5tpiqRD2PyUEOS6s9UXA==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -13893,8 +13893,8 @@ packages: next-themes@0.4.6: resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 next-tick@1.0.0: resolution: {integrity: sha512-mc/caHeUcdjnC/boPWJefDr4KUIWQNv+tlnFnJd38QMou86QtxQzBJfxgGRzvx8jazYRqrVlaHarfO72uNxPOg==} @@ -13908,8 +13908,8 @@ packages: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -13930,8 +13930,8 @@ packages: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -15823,23 +15823,23 @@ packages: resolution: {integrity: sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==} engines: {node: '>=16.14.0'} - react-dom@0.0.0-experimental-24d8716e-20260123: - resolution: {integrity: sha512-plS1PRiWYWPbN7yZgYvn0IwtrZ31Gui5/O2GNK+z42xJKqwuyAaPWcAugfItkxVzey0pcsMjVomA2gEfE5E1aw==} + react-dom@0.0.0-experimental-10680271-20260126: + resolution: {integrity: sha512-RF/om+q6tJgVardAgNxyvELal9gUY1MUFOg+Z336tboFiLO4r3hTPMK0IXn7t9OyNyyQa3sCsCLfCce0d8qLUg==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 - react-dom@19.3.0-canary-24d8716e-20260123: - resolution: {integrity: sha512-3WpIrjlK6QNrpE2/3vsoz7VuYJXAaZMqFsH/xtr7VmkVtrmde5ywoEjlVF/PExV/bqtjIKSGtxmMh/uPdDQiQQ==} + react-dom@19.3.0-canary-10680271-20260126: + resolution: {integrity: sha512-ZtunrzXFf1/FuzW2bjkliwPY7LfShX5V4FgOrrOWjnldEMaVJkJrSrpXZdyejPQ4O6eE0i5VMxa9s78FDWTpLg==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 react-dom@19.3.0-canary-fd524fe0-20251121: resolution: {integrity: sha512-+M3m+8ysDcPmt7ncitPOX5O71OOKF6lq6INFZFUMJjEGDxvl4CS2D41DJG5MnXcwiWTZLAp/uILZtt4sKTRSyQ==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 - react-is@19.3.0-canary-24d8716e-20260123: - resolution: {integrity: sha512-5ZKfF3+jsuW04FvkTfUCJmRU6+3z0KVTIeUxiS90q/gskG8NT/GSOOTlfPuO6KCJRXMWn4GiObAR1YeAwMh0ig==} + react-is@19.3.0-canary-10680271-20260126: + resolution: {integrity: sha512-ozpB25AJ7O6brSaFwfqw1vREfi31JNa0OtBD4ynw045oevWnIwgBtqO7sNFgTrn/FPpIVh7T5+HNhkTMjtDGhQ==} react-is@19.3.0-canary-fd524fe0-20251121: resolution: {integrity: sha512-06VG41yCv5V7FPCLxo4hBaiLEoReJ35LK9VvEqveBJq5cbEhakZznJLnPU1oJ3CCrL4DyBsPXw9EiYlrOL8c3Q==} @@ -15850,14 +15850,14 @@ packages: react-medium-image-zoom@5.3.0: resolution: {integrity: sha512-RCIzVlsKqy3BYgGgYbolUfuvx0aSKC7YhX/IJGEp+WJxsqdIVYJHkBdj++FAj6VD7RiWj6VVmdCfa/9vJE9hZg==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 react-number-format@5.4.0: resolution: {integrity: sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 react-refresh@0.12.0: resolution: {integrity: sha512-suLIhrU2IHKL5JEKR/fAwJv7bbeq4kJ+pJopf77jHwuR+HmJS/HbrPIGsTBUVfw7tXPOmYv7UJ7PCaN49e8x4A==} @@ -15868,7 +15868,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -15878,7 +15878,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -15888,7 +15888,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -15898,58 +15898,58 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true - react-server-dom-turbopack@0.0.0-experimental-24d8716e-20260123: - resolution: {integrity: sha512-uKdnfSu4rYOZIoAlBY1Rmt3qCUxKKxiGvvPcbCI5H9hrExKCSHo3nGsxG6l60cY16fzKzXXYvLKM21NEN6ImUg==} + react-server-dom-turbopack@0.0.0-experimental-10680271-20260126: + resolution: {integrity: sha512-uK7V/uHiidSw4y5rmWLlEt+bkTFtTd3S8wheYqwtKLz37TmCtY+CT2jEQBUuin/c8/I0dng4xa6UWskTMmN92w==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 - react-server-dom-turbopack@19.3.0-canary-24d8716e-20260123: - resolution: {integrity: sha512-M8c/wt1wNoSSnLNEc9IpVVzl/ik3jODryuYVG793wqN+ahDi9pHr+GU5G0tJHH0xILfCmxD7Wblq1zLqVfaQRw==} + react-server-dom-turbopack@19.3.0-canary-10680271-20260126: + resolution: {integrity: sha512-hpDglsJZ9NfgQqjNBv0by84apbUI1Id5uMg/Eap92TFyuZpn8cZXRl46oI+R/tJZ3EvmiGVzplNWWK7h9VsGpw==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 - react-server-dom-webpack@0.0.0-experimental-24d8716e-20260123: - resolution: {integrity: sha512-q2f5vEq6KEKuSTaUT3d7hocoVuuGJiF3YvWGoz/OSdZR5WbDKIxi/EfoRIdiLBZTgvZr4r5gURzvaQT+VvReew==} + react-server-dom-webpack@0.0.0-experimental-10680271-20260126: + resolution: {integrity: sha512-FUA7swEY3Hoto04A2gmxctPmxbrW/9XYyJRRvfanP7QsmePUtvYFyycCNSKk95s/iDM+jZwWHRF/QaBATzlXVg==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 webpack: 5.98.0 - react-server-dom-webpack@19.3.0-canary-24d8716e-20260123: - resolution: {integrity: sha512-lkCV/chVw6IlXVztLr5D2NAk1ZWDIYKPYt3Brdn+6ndd1XLgC1W52yGb7m1wNsNVbtMGWK2cnok05+bidu9Eiw==} + react-server-dom-webpack@19.3.0-canary-10680271-20260126: + resolution: {integrity: sha512-2hO69gAvowSZKvopJFm57mbvDGH9ZgvlURRW4dR0fw8qihrGuQj/WDeN+/bMmJU5/LLIxRKFEGrSNWgADGC4KA==} engines: {node: '>=0.10.0'} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 webpack: 5.98.0 react-shallow-renderer@16.15.0: resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 react-ssr-prepass@1.0.8: resolution: {integrity: sha512-O0gfRA1SaK+9ITKxqfnXsej2jF+OHGP/+GxD4unROQaM/0/UczGF9fuF+wTboxaQoKdIf4FvS3h/OigWh704VA==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-is: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-is: 19.3.0-canary-10680271-20260126 react-style-singleton@2.2.1: resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -15959,7 +15959,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -15967,26 +15967,26 @@ packages: react-test-renderer@18.2.0: resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 react-textarea-autosize@8.5.3: resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 react-virtualized@9.22.3: resolution: {integrity: sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126 - react@0.0.0-experimental-24d8716e-20260123: - resolution: {integrity: sha512-eOO912CfYicDSQNbUIrDR7D81cHQq2y7cN3nfu6MrGu7PRf3IQmmTPwRIjnK4hDXcdeiVy7sP3fxEZQorxMSyw==} + react@0.0.0-experimental-10680271-20260126: + resolution: {integrity: sha512-xsy8Tyg6q+yXIBk9l2rj847AMXmGXthpIPDgTEQnS4DdG2Rlud9c21SxzYv0X64BKhZBV37B2RqLCJRnQkTwcQ==} engines: {node: '>=0.10.0'} - react@19.3.0-canary-24d8716e-20260123: - resolution: {integrity: sha512-OhXCecUjSc9CQ62J96xi7XETxKTFNA/6v7/bpCWm6MZO2AGYLlNsCAt+F3FQb7O3AyvPuo3MEsytO0smWu0rEQ==} + react@19.3.0-canary-10680271-20260126: + resolution: {integrity: sha512-fuP0oGQanJPA1MSSfC2Fbit/QBMufrZ2md1nVIdr8Dnw4ZWJ20IgWFMEO/zLIBzZAIJ1+6/xBJCw5opXfMn7Hg==} engines: {node: '>=0.10.0'} react@19.3.0-canary-fd524fe0-20251121: @@ -16593,11 +16593,11 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.0.0-experimental-24d8716e-20260123: - resolution: {integrity: sha512-/27RIPF/wc0+J/HSP5AOxCQYyWsDgyYNhqNWg4TvL8zszUUIkqtZ59UkWP3K6g0TWsjdnltfgAYnqoljyRDtdQ==} + scheduler@0.0.0-experimental-10680271-20260126: + resolution: {integrity: sha512-d9NOoqlJoBoQqet8HKezu3fS8kFFVmTWjkTnxDfHM+8jWAziAYwpQ0DpKrCAp1tVqP3lWK+UURYGJE65z0uDTw==} - scheduler@0.28.0-canary-24d8716e-20260123: - resolution: {integrity: sha512-vPJsommz4TdEI13QCgzNH/qomXO8wPpIJgVvabh0X8qEntHig2avu30zfNUWnU3CO/zOHKjm0WZElxs8xfEW5Q==} + scheduler@0.28.0-canary-10680271-20260126: + resolution: {integrity: sha512-wCz7Df+upVq9bZD4rto2ULoz1X4LMimDO4Iezeqm4/aaeE7fBs2oz8iNwla7WJW+5RnY7WWv5DD2DXeePmzddA==} schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} @@ -17282,7 +17282,7 @@ packages: peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@babel/core': optional: true @@ -17369,7 +17369,7 @@ packages: swr@2.2.4: resolution: {integrity: sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 symbol-observable@1.0.1: resolution: {integrity: sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==} @@ -18232,7 +18232,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -18242,7 +18242,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -18250,13 +18250,13 @@ packages: use-composed-ref@1.3.0: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 use-isomorphic-layout-effect@1.1.2: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -18265,7 +18265,7 @@ packages: resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -18275,7 +18275,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -18285,7 +18285,7 @@ packages: engines: {node: '>=10'} peerDependencies: '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 peerDependenciesMeta: '@types/react': optional: true @@ -18293,7 +18293,7 @@ packages: use-sync-external-store@1.5.0: resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} peerDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -19908,28 +19908,28 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@base-ui-components/react@1.0.0-beta.2(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@base-ui-components/react@1.0.0-beta.2(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@babel/runtime': 7.27.6 - '@base-ui-components/utils': 0.1.0(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) + '@base-ui-components/utils': 0.1.0(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) '@floating-ui/utils': 0.2.10 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) reselect: 5.1.1 tabbable: 6.2.0 - use-sync-external-store: 1.5.0(react@19.3.0-canary-24d8716e-20260123) + use-sync-external-store: 1.5.0(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 - '@base-ui-components/utils@0.1.0(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@base-ui-components/utils@0.1.0(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@babel/runtime': 7.27.6 '@floating-ui/utils': 0.2.10 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) reselect: 5.1.1 - use-sync-external-store: 1.5.0(react@19.3.0-canary-24d8716e-20260123) + use-sync-external-store: 1.5.0(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 @@ -20102,17 +20102,17 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@emotion/react@11.11.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: '@babel/runtime': 7.27.0 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.3.0-canary-24d8716e-20260123) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.3.0-canary-10680271-20260126) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 transitivePeerDependencies: @@ -20130,9 +20130,9 @@ snapshots: '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.3.0-canary-24d8716e-20260123)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 '@emotion/utils@1.2.1': {} @@ -20555,11 +20555,11 @@ snapshots: react: 19.3.0-canary-fd524fe0-20251121 react-dom: 19.3.0-canary-fd524fe0-20251121(react@19.3.0-canary-fd524fe0-20251121) - '@floating-ui/react-dom@2.1.5(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@floating-ui/react-dom@2.1.5(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@floating-ui/dom': 1.7.3 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) '@floating-ui/react@0.26.16(react-dom@19.3.0-canary-fd524fe0-20251121(react@19.3.0-canary-fd524fe0-20251121))(react@19.3.0-canary-fd524fe0-20251121)': dependencies: @@ -21519,11 +21519,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@2.2.1(react@19.3.0-canary-24d8716e-20260123)': + '@mdx-js/react@2.2.1(react@19.3.0-canary-10680271-20260126)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 '@mdx-js/react@2.2.1(react@19.3.0-canary-fd524fe0-20251121)': dependencies: @@ -21531,11 +21531,11 @@ snapshots: '@types/react': 19.2.2 react: 19.3.0-canary-fd524fe0-20251121 - '@mdx-js/react@3.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@mdx-js/react@3.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.2.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 '@modelcontextprotocol/sdk@1.18.1': dependencies: @@ -22305,749 +22305,749 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-arrow@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-arrow@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-collection@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-collection@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-compose-refs@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-context@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-context@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-context@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-context@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-context@1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-context@1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) aria-hidden: 1.2.6 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-dialog@1.1.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) aria-hidden: 1.2.6 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-direction@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-direction@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-direction@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-direction@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-focus-scope@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-id@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-id@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-id@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-id@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) aria-hidden: 1.2.6 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-popover@1.1.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-popover@1.1.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-dismissable-layer': 1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-scope': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-popper': 1.2.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-portal': 1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) aria-hidden: 1.2.6 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-popper@1.2.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-popper@1.2.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-arrow': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) '@radix-ui/rect': 1.1.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-portal@1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-portal@1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-portal@1.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-presence@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-primitive@2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-slot': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-slot': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-slot': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) aria-hidden: 1.2.6 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-slot@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-slot@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-slot@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-slot@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-slot@1.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-slot@1.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-toggle-group@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-toggle': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-toggle@1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-context': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-rect@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/rect': 1.1.0 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-size@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@types/react': 19.2.2 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 '@types/react-dom': 19.2.1(@types/react@19.2.2) @@ -23345,12 +23345,12 @@ snapshots: '@storybook/addon-docs@8.6.0(@types/react@19.2.2)(storybook@8.6.0(prettier@3.6.2))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@storybook/blocks': 8.6.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2)) + '@mdx-js/react': 3.1.0(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@storybook/blocks': 8.6.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2)) '@storybook/csf-plugin': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2)) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2)) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) storybook: 8.6.0(prettier@3.6.2) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -23415,14 +23415,14 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.6.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2))': + '@storybook/blocks@8.6.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2))': dependencies: - '@storybook/icons': 1.3.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) + '@storybook/icons': 1.3.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) storybook: 8.6.0(prettier@3.6.2) ts-dedent: 2.2.0 optionalDependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) '@storybook/builder-webpack5@8.6.0(@rspack/core@1.6.7(@swc/helpers@0.5.15))(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2)': dependencies: @@ -23501,10 +23501,10 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.3.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@storybook/icons@1.3.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) '@storybook/instrumenter@8.6.0(storybook@8.6.0(prettier@3.6.2))': dependencies: @@ -23516,17 +23516,17 @@ snapshots: dependencies: storybook: 8.6.0(prettier@3.6.2) - '@storybook/preset-react-webpack@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2)': + '@storybook/preset-react-webpack@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2)': dependencies: '@storybook/core-webpack': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) + '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.9.2)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)) '@types/semver': 7.5.6 find-up: 5.0.0 magic-string: 0.30.19 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 react-docgen: 7.1.0 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) resolve: 1.22.10 semver: 7.6.3 storybook: 8.6.0(prettier@3.6.2) @@ -23560,19 +23560,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.6.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2))': + '@storybook/react-dom-shim@8.6.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2))': dependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) storybook: 8.6.0(prettier@3.6.2) - '@storybook/react-webpack5@8.6.0(@rspack/core@1.6.7(@swc/helpers@0.5.15))(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2)': + '@storybook/react-webpack5@8.6.0(@rspack/core@1.6.7(@swc/helpers@0.5.15))(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2)': dependencies: '@storybook/builder-webpack5': 8.6.0(@rspack/core@1.6.7(@swc/helpers@0.5.15))(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) - '@storybook/preset-react-webpack': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) - '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + '@storybook/preset-react-webpack': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) + '@storybook/react': 8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) storybook: 8.6.0(prettier@3.6.2) optionalDependencies: typescript: 5.9.2 @@ -23585,16 +23585,16 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2)': + '@storybook/react@8.6.0(@storybook/test@8.6.0(storybook@8.6.0(prettier@3.6.2)))(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2))(typescript@5.9.2)': dependencies: '@storybook/components': 8.6.0(storybook@8.6.0(prettier@3.6.2)) '@storybook/global': 5.0.0 '@storybook/manager-api': 8.6.0(storybook@8.6.0(prettier@3.6.2)) '@storybook/preview-api': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(storybook@8.6.0(prettier@3.6.2)) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(storybook@8.6.0(prettier@3.6.2)) '@storybook/theming': 8.6.0(storybook@8.6.0(prettier@3.6.2)) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) storybook: 8.6.0(prettier@3.6.2) optionalDependencies: '@storybook/test': 8.6.0(storybook@8.6.0(prettier@3.6.2)) @@ -23872,13 +23872,13 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@15.0.7(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)': + '@testing-library/react@15.0.7(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)': dependencies: '@babel/runtime': 7.27.0 '@testing-library/dom': 10.1.0 '@types/react-dom': 19.2.1(@types/react@19.2.2) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 @@ -26116,14 +26116,14 @@ snapshots: cmd-shim@7.0.0: {} - cmdk@1.0.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123): + cmdk@1.0.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126): dependencies: - '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - use-sync-external-store: 1.5.0(react@19.3.0-canary-24d8716e-20260123) + '@radix-ui/react-dialog': 1.1.4(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + use-sync-external-store: 1.5.0(react@19.3.0-canary-10680271-20260126) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -28157,7 +28157,7 @@ snapshots: - bluebird - supports-color - eslint-plugin-react-hooks@0.0.0-experimental-24d8716e-20260123(eslint@9.37.0(jiti@2.5.1)): + eslint-plugin-react-hooks@0.0.0-experimental-10680271-20260126(eslint@9.37.0(jiti@2.5.1)): dependencies: '@babel/core': 7.26.10 '@babel/parser': 7.27.0 @@ -29115,7 +29115,7 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@15.7.12(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8))(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123): + fumadocs-core@15.7.12(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8))(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126): dependencies: '@formatjs/intl-localematcher': 0.6.1 '@orama/orama': 3.1.13 @@ -29127,7 +29127,7 @@ snapshots: image-size: 2.0.2 negotiator: 1.0.0 npm-to-yarn: 3.0.1 - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) remark: 15.0.1 remark-gfm: 4.0.1 remark-rehype: 11.1.2 @@ -29136,20 +29136,20 @@ snapshots: unist-util-visit: 5.0.0 optionalDependencies: '@types/react': 19.2.2 - next: 15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8) - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + next: 15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) transitivePeerDependencies: - supports-color - fumadocs-mdx@11.10.0(fumadocs-core@15.7.12(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8))(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123))(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8))(react@19.3.0-canary-24d8716e-20260123): + fumadocs-mdx@11.10.0(fumadocs-core@15.7.12(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8))(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126))(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8))(react@19.3.0-canary-10680271-20260126): dependencies: '@mdx-js/mdx': 3.1.1 '@standard-schema/spec': 1.0.0 chokidar: 4.0.3 esbuild: 0.25.9 estree-util-value-to-estree: 3.5.0 - fumadocs-core: 15.7.12(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8))(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) + fumadocs-core: 15.7.12(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8))(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) js-yaml: 4.1.0 lru-cache: 11.2.1 picocolors: 1.1.1 @@ -29161,36 +29161,36 @@ snapshots: unist-util-visit: 5.0.0 zod: 4.1.13 optionalDependencies: - next: 15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8) - react: 19.3.0-canary-24d8716e-20260123 + next: 15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8) + react: 19.3.0-canary-10680271-20260126 transitivePeerDependencies: - supports-color - fumadocs-ui@15.7.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8))(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(tailwindcss@4.1.13): - dependencies: - '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) + fumadocs-ui@15.7.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8))(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(tailwindcss@4.1.13): + dependencies: + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) class-variance-authority: 0.7.1 - fumadocs-core: 15.7.12(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8))(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) + fumadocs-core: 15.7.12(@types/react@19.2.2)(next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8))(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) lodash.merge: 4.6.2 - next-themes: 0.4.6(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) + next-themes: 0.4.6(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) postcss-selector-parser: 7.1.0 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - react-medium-image-zoom: 5.3.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + react-medium-image-zoom: 5.3.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126) scroll-into-view-if-needed: 3.1.0 tailwind-merge: 3.3.1 optionalDependencies: '@types/react': 19.2.2 - next: 15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8) + next: 15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8) tailwindcss: 4.1.13 transitivePeerDependencies: - '@mixedbread/sdk' @@ -29862,7 +29862,7 @@ snapshots: hoist-non-react-statics@3.3.2: dependencies: - react-is: 19.3.0-canary-24d8716e-20260123 + react-is: 19.3.0-canary-10680271-20260126 homedir-polyfill@1.0.3: dependencies: @@ -32135,9 +32135,9 @@ snapshots: dependencies: react: 19.3.0-canary-fd524fe0-20251121 - lucide-react@0.554.0(react@19.3.0-canary-24d8716e-20260123): + lucide-react@0.554.0(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 lz-string@1.5.0: {} @@ -33495,22 +33495,22 @@ snapshots: dependencies: inherits: 2.0.4 - next-themes@0.4.6(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123): + next-themes@0.4.6(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) next-tick@1.0.0: {} - next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8): + next@15.5.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8): dependencies: '@next/env': 15.5.8 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001746 postcss: 8.4.31 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@next/swc-darwin-arm64': 15.5.7 '@next/swc-darwin-x64': 15.5.7 @@ -33529,15 +33529,15 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@16.0.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(sass@1.77.8): + next@16.0.8(@babel/core@7.26.10)(@opentelemetry/api@1.6.0)(@playwright/test@1.51.1)(babel-plugin-macros@3.1.0)(babel-plugin-react-compiler@0.0.0-experimental-3fde738-20250918)(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(sass@1.77.8): dependencies: '@next/env': 16.0.8 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001746 postcss: 8.4.31 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) - styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) + styled-jsx: 5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@next/swc-darwin-arm64': 16.0.8 '@next/swc-darwin-x64': 16.0.8 @@ -35373,31 +35373,31 @@ snapshots: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-24d8716e-20260123 + react-is: 19.3.0-canary-10680271-20260126 pretty-format@29.5.0: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-24d8716e-20260123 + react-is: 19.3.0-canary-10680271-20260126 pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-24d8716e-20260123 + react-is: 19.3.0-canary-10680271-20260126 pretty-format@30.0.0-alpha.6: dependencies: '@jest/schemas': 30.0.0-alpha.6 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-24d8716e-20260123 + react-is: 19.3.0-canary-10680271-20260126 pretty-format@30.2.0: dependencies: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 - react-is: 19.3.0-canary-24d8716e-20260123 + react-is: 19.3.0-canary-10680271-20260126 pretty-ms@7.0.0: dependencies: @@ -35461,7 +35461,7 @@ snapshots: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - react-is: 19.3.0-canary-24d8716e-20260123 + react-is: 19.3.0-canary-10680271-20260126 property-information@5.6.0: dependencies: @@ -35673,31 +35673,31 @@ snapshots: transitivePeerDependencies: - supports-color - react-dom@0.0.0-experimental-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123): + react-dom@0.0.0-experimental-10680271-20260126(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 - scheduler: 0.28.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + scheduler: 0.28.0-canary-10680271-20260126 - react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123): + react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 - scheduler: 0.28.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + scheduler: 0.28.0-canary-10680271-20260126 react-dom@19.3.0-canary-fd524fe0-20251121(react@19.3.0-canary-fd524fe0-20251121): dependencies: react: 19.3.0-canary-fd524fe0-20251121 - scheduler: 0.28.0-canary-24d8716e-20260123 + scheduler: 0.28.0-canary-10680271-20260126 - react-is@19.3.0-canary-24d8716e-20260123: {} + react-is@19.3.0-canary-10680271-20260126: {} react-is@19.3.0-canary-fd524fe0-20251121: {} react-lifecycles-compat@3.0.4: {} - react-medium-image-zoom@5.3.0(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123): + react-medium-image-zoom@5.3.0(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) react-number-format@5.4.0(react-dom@19.3.0-canary-fd524fe0-20251121(react@19.3.0-canary-fd524fe0-20251121))(react@19.3.0-canary-fd524fe0-20251121): dependencies: @@ -35715,10 +35715,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123): + react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.2 @@ -35734,59 +35734,59 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - react-remove-scroll@2.7.1(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123): + react-remove-scroll@2.7.1(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) - use-sidecar: 1.1.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123) + use-callback-ref: 1.3.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) + use-sidecar: 1.1.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126) optionalDependencies: '@types/react': 19.2.2 - react-server-dom-turbopack@0.0.0-experimental-24d8716e-20260123(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123): + react-server-dom-turbopack@0.0.0-experimental-10680271-20260126(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) - react-server-dom-turbopack@19.3.0-canary-24d8716e-20260123(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123): + react-server-dom-turbopack@19.3.0-canary-10680271-20260126(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) - react-server-dom-webpack@0.0.0-experimental-24d8716e-20260123(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15))): + react-server-dom-webpack@0.0.0-experimental-10680271-20260126(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15)) webpack-sources: 3.2.3(patch_hash=jbynf5dc46ambamq3wuyho6hkq) - react-server-dom-webpack@19.3.0-canary-24d8716e-20260123(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15))): + react-server-dom-webpack@19.3.0-canary-10680271-20260126(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126)(webpack@5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15))): dependencies: acorn-loose: 8.3.0 neo-async: 2.6.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15)) webpack-sources: 3.2.3(patch_hash=jbynf5dc46ambamq3wuyho6hkq) - react-shallow-renderer@16.15.0(react@19.3.0-canary-24d8716e-20260123): + react-shallow-renderer@16.15.0(react@19.3.0-canary-10680271-20260126): dependencies: object-assign: 4.1.1 - react: 19.3.0-canary-24d8716e-20260123 - react-is: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-is: 19.3.0-canary-10680271-20260126 - react-ssr-prepass@1.0.8(react-is@19.3.0-canary-fd524fe0-20251121)(react@19.3.0-canary-24d8716e-20260123): + react-ssr-prepass@1.0.8(react-is@19.3.0-canary-fd524fe0-20251121)(react@19.3.0-canary-10680271-20260126): dependencies: object-is: 1.0.2 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 react-is: 19.3.0-canary-fd524fe0-20251121 react-style-singleton@2.2.1(@types/react@19.2.2)(react@19.3.0-canary-fd524fe0-20251121): @@ -35798,10 +35798,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - react-style-singleton@2.2.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123): + react-style-singleton@2.2.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126): dependencies: get-nonce: 1.0.1 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.2 @@ -35814,12 +35814,12 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - react-test-renderer@18.2.0(react@19.3.0-canary-24d8716e-20260123): + react-test-renderer@18.2.0(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 - react-is: 19.3.0-canary-24d8716e-20260123 - react-shallow-renderer: 16.15.0(react@19.3.0-canary-24d8716e-20260123) - scheduler: 0.28.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 + react-is: 19.3.0-canary-10680271-20260126 + react-shallow-renderer: 16.15.0(react@19.3.0-canary-10680271-20260126) + scheduler: 0.28.0-canary-10680271-20260126 react-textarea-autosize@8.5.3(@types/react@19.2.2)(react@19.3.0-canary-fd524fe0-20251121): dependencies: @@ -35830,20 +35830,20 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-virtualized@9.22.3(react-dom@19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123))(react@19.3.0-canary-24d8716e-20260123): + react-virtualized@9.22.3(react-dom@19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126))(react@19.3.0-canary-10680271-20260126): dependencies: '@babel/runtime': 7.27.0 clsx: 1.1.1 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.3.0-canary-24d8716e-20260123 - react-dom: 19.3.0-canary-24d8716e-20260123(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + react-dom: 19.3.0-canary-10680271-20260126(react@19.3.0-canary-10680271-20260126) react-lifecycles-compat: 3.0.4 - react@0.0.0-experimental-24d8716e-20260123: {} + react@0.0.0-experimental-10680271-20260126: {} - react@19.3.0-canary-24d8716e-20260123: {} + react@19.3.0-canary-10680271-20260126: {} react@19.3.0-canary-fd524fe0-20251121: {} @@ -36671,9 +36671,9 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.0.0-experimental-24d8716e-20260123: {} + scheduler@0.0.0-experimental-10680271-20260126: {} - scheduler@0.28.0-canary-24d8716e-20260123: {} + scheduler@0.28.0-canary-10680271-20260126: {} schema-utils@2.7.1: dependencies: @@ -37566,10 +37566,10 @@ snapshots: postcss: 7.0.32 postcss-load-plugins: 2.3.0 - styled-jsx@5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-24d8716e-20260123): + styled-jsx@5.1.6(@babel/core@7.26.10)(babel-plugin-macros@3.1.0)(react@19.3.0-canary-10680271-20260126): dependencies: client-only: 0.0.1 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 optionalDependencies: '@babel/core': 7.26.10 babel-plugin-macros: 3.1.0 @@ -37673,11 +37673,11 @@ snapshots: '@swc/counter': 0.1.3 webpack: 5.98.0(@swc/core@1.11.24(@swc/helpers@0.5.15))(esbuild@0.25.9) - swr@2.2.4(react@19.3.0-canary-24d8716e-20260123): + swr@2.2.4(react@19.3.0-canary-10680271-20260126): dependencies: client-only: 0.0.1 - react: 19.3.0-canary-24d8716e-20260123 - use-sync-external-store: 1.5.0(react@19.3.0-canary-24d8716e-20260123) + react: 19.3.0-canary-10680271-20260126 + use-sync-external-store: 1.5.0(react@19.3.0-canary-10680271-20260126) symbol-observable@1.0.1: {} @@ -38533,9 +38533,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unistore@3.4.1(react@19.3.0-canary-24d8716e-20260123): + unistore@3.4.1(react@19.3.0-canary-10680271-20260126): optionalDependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 universal-github-app-jwt@1.1.1: dependencies: @@ -38670,9 +38670,9 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - use-callback-ref@1.3.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123): + use-callback-ref@1.3.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.2 @@ -38702,17 +38702,17 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 - use-sidecar@1.1.3(@types/react@19.2.2)(react@19.3.0-canary-24d8716e-20260123): + use-sidecar@1.1.3(@types/react@19.2.2)(react@19.3.0-canary-10680271-20260126): dependencies: detect-node-es: 1.1.0 - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 tslib: 2.8.1 optionalDependencies: '@types/react': 19.2.2 - use-sync-external-store@1.5.0(react@19.3.0-canary-24d8716e-20260123): + use-sync-external-store@1.5.0(react@19.3.0-canary-10680271-20260126): dependencies: - react: 19.3.0-canary-24d8716e-20260123 + react: 19.3.0-canary-10680271-20260126 util-deprecate@1.0.2: {} diff --git a/run-tests.js b/run-tests.js index 377e8f3e3e723..351a0054d139e 100644 --- a/run-tests.js +++ b/run-tests.js @@ -17,7 +17,7 @@ const { checkBuildFreshness } = require('./test/lib/check-build-freshness') // Do not rename or format. sync-react script relies on this line. // prettier-ignore -const nextjsReactPeerVersion = "19.2.3"; +const nextjsReactPeerVersion = "19.2.4"; let argv = require('yargs/yargs')(process.argv.slice(2)) .string('type') diff --git a/test/.stats-app/package.json b/test/.stats-app/package.json index 4a3da9043c8e2..4bf410a8d4df2 100644 --- a/test/.stats-app/package.json +++ b/test/.stats-app/package.json @@ -4,8 +4,8 @@ "license": "MIT", "dependencies": { "next": "latest", - "react": "19.2.3", - "react-dom": "19.2.3" + "react": "19.2.4", + "react-dom": "19.2.4" }, "engines": { "node": ">=20.9.0" diff --git a/test/e2e/next-test/first-time-setup-js/package.json b/test/e2e/next-test/first-time-setup-js/package.json index c7a572f5f7276..bbc12446cf6a5 100644 --- a/test/e2e/next-test/first-time-setup-js/package.json +++ b/test/e2e/next-test/first-time-setup-js/package.json @@ -8,7 +8,7 @@ }, "dependencies": { "next": "canary", - "react": "19.2.3", - "react-dom": "19.2.3" + "react": "19.2.4", + "react-dom": "19.2.4" } } diff --git a/test/e2e/next-test/first-time-setup-ts/package.json b/test/e2e/next-test/first-time-setup-ts/package.json index 5d5d3a31f86ae..0f83b1580d036 100644 --- a/test/e2e/next-test/first-time-setup-ts/package.json +++ b/test/e2e/next-test/first-time-setup-ts/package.json @@ -8,8 +8,8 @@ }, "dependencies": { "next": "canary", - "react": "19.2.3", - "react-dom": "19.2.3" + "react": "19.2.4", + "react-dom": "19.2.4" }, "devDependencies": { "@types/react": "^18", diff --git a/test/lib/next-modes/base.ts b/test/lib/next-modes/base.ts index 455d11ba5943f..1d816c9cb4bef 100644 --- a/test/lib/next-modes/base.ts +++ b/test/lib/next-modes/base.ts @@ -68,7 +68,7 @@ type OmitFirstArgument = F extends ( // Do not rename or format. sync-react script relies on this line. // prettier-ignore -const nextjsReactPeerVersion = "19.2.3"; +const nextjsReactPeerVersion = "19.2.4"; export class NextInstance { protected files: ResolvedFileConfig From 2ed773fd534d147fa5ec22d13efcb17e2d9b14e1 Mon Sep 17 00:00:00 2001 From: nextjs-bot Date: Mon, 26 Jan 2026 23:25:40 +0000 Subject: [PATCH 08/11] v16.2.0-canary.10 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 ++-- packages/eslint-plugin-internal/package.json | 2 +- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-routing/package.json | 2 +- packages/next-rspack/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 +++++++------- packages/react-refresh-utils/package.json | 2 +- packages/third-parties/package.json | 4 ++-- pnpm-lock.yaml | 16 ++++++++-------- 20 files changed, 35 insertions(+), 35 deletions(-) diff --git a/lerna.json b/lerna.json index a815c19bdf77f..8f212c280612b 100644 --- a/lerna.json +++ b/lerna.json @@ -15,5 +15,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "16.2.0-canary.9" + "version": "16.2.0-canary.10" } \ No newline at end of file diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index b20b0e9ff8dcb..d7c99cd7fe4d3 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index c65816f60327a..b33ac01eb0d93 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "description": "ESLint configuration used by Next.js.", "license": "MIT", "repository": { @@ -12,7 +12,7 @@ "dist" ], "dependencies": { - "@next/eslint-plugin-next": "16.2.0-canary.9", + "@next/eslint-plugin-next": "16.2.0-canary.10", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index 54012022a2d0b..2679c811859a4 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -1,7 +1,7 @@ { "name": "@next/eslint-plugin-internal", "private": true, - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "description": "ESLint plugin for working on Next.js.", "exports": { ".": "./src/eslint-plugin-internal.js" diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index 5ed2f23748168..562e21b29c037 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/font/package.json b/packages/font/package.json index e93cd5870479d..c379b11da816e 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 880678e83a79f..329a45f471e56 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 6b76b7d2d0bcc..11095b892ed83 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 88cf131953204..fbf5ae577843c 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index eff23d00ba747..d12c8a894b744 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index cb76cf35a4a5b..f6821773adfd8 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index 9773cb0457346..766b7b1617e12 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 9dd7fa9f85870..2412250824875 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-routing/package.json b/packages/next-routing/package.json index 57f33d27f3f67..7af961be5336d 100644 --- a/packages/next-routing/package.json +++ b/packages/next-routing/package.json @@ -1,6 +1,6 @@ { "name": "@next/routing", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "keywords": [ "react", "next", diff --git a/packages/next-rspack/package.json b/packages/next-rspack/package.json index e046738578e32..7e50527167946 100644 --- a/packages/next-rspack/package.json +++ b/packages/next-rspack/package.json @@ -1,6 +1,6 @@ { "name": "next-rspack", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "repository": { "url": "vercel/next.js", "directory": "packages/next-rspack" diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index 985e770a7dd44..503c0ea6a242e 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "private": true, "files": [ "native/" diff --git a/packages/next/package.json b/packages/next/package.json index ab2285597a692..e04627e93a151 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -97,7 +97,7 @@ ] }, "dependencies": { - "@next/env": "16.2.0-canary.9", + "@next/env": "16.2.0-canary.10", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", @@ -162,11 +162,11 @@ "@modelcontextprotocol/sdk": "1.18.1", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "16.2.0-canary.9", - "@next/polyfill-module": "16.2.0-canary.9", - "@next/polyfill-nomodule": "16.2.0-canary.9", - "@next/react-refresh-utils": "16.2.0-canary.9", - "@next/swc": "16.2.0-canary.9", + "@next/font": "16.2.0-canary.10", + "@next/polyfill-module": "16.2.0-canary.10", + "@next/polyfill-nomodule": "16.2.0-canary.10", + "@next/react-refresh-utils": "16.2.0-canary.10", + "@next/swc": "16.2.0-canary.10", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.51.1", "@rspack/core": "1.6.7", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index 572b8dfb66b80..ad97ba3e15f46 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index a4b9816f5f9f2..0ab5e392e395e 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "16.2.0-canary.9", + "version": "16.2.0-canary.10", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "16.2.0-canary.9", + "next": "16.2.0-canary.10", "outdent": "0.8.0", "prettier": "2.5.1", "typescript": "5.9.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6f931d921c7d..aa0624c35b127 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1008,7 +1008,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 16.2.0-canary.9 + specifier: 16.2.0-canary.10 version: link:../eslint-plugin-next eslint: specifier: '>=9.0.0' @@ -1085,7 +1085,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 16.2.0-canary.9 + specifier: 16.2.0-canary.10 version: link:../next-env '@swc/helpers': specifier: 0.5.15 @@ -1213,19 +1213,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 16.2.0-canary.9 + specifier: 16.2.0-canary.10 version: link:../font '@next/polyfill-module': - specifier: 16.2.0-canary.9 + specifier: 16.2.0-canary.10 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 16.2.0-canary.9 + specifier: 16.2.0-canary.10 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 16.2.0-canary.9 + specifier: 16.2.0-canary.10 version: link:../react-refresh-utils '@next/swc': - specifier: 16.2.0-canary.9 + specifier: 16.2.0-canary.10 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1943,7 +1943,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 16.2.0-canary.9 + specifier: 16.2.0-canary.10 version: link:../next outdent: specifier: 0.8.0 From 8003df97c9ab9eb04ec8c52d6941370d6670ec3d Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Mon, 26 Jan 2026 15:53:05 -0800 Subject: [PATCH 09/11] Apply segment changes to adapters outputs (#89072) This applies the following builder changes to the adapters outputs as well: - https://github.com/vercel/vercel/pull/14689 - https://github.com/vercel/vercel/pull/14695 --- .../next/src/build/adapter/build-complete.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/next/src/build/adapter/build-complete.ts b/packages/next/src/build/adapter/build-complete.ts index f0a062929f9fc..457e10c9efe0f 100644 --- a/packages/next/src/build/adapter/build-complete.ts +++ b/packages/next/src/build/adapter/build-complete.ts @@ -1085,10 +1085,7 @@ export async function handleBuildComplete({ const handleAppMeta = async ( route: string, initialOutput: AdapterOutput['PRERENDER'], - meta: { - postponed?: string - segmentPaths?: string[] - }, + meta: AppRouteMeta, ctx: { htmlAllowQuery?: string[] dataAllowQuery?: string[] @@ -1127,15 +1124,17 @@ export async function handleBuildComplete({ ) + prefetchSegmentSuffix // Only use the fallback value when the allowQuery is defined and - // is empty, which means that the segments do not vary based on - // the route parameters. This is safer than ensuring that we only - // use the fallback when this is not a fallback because we know in - // this new logic that it doesn't vary based on the route - // parameters and therefore can be used for all requests instead. - const fallbackPathname = - segmentAllowQuery && segmentAllowQuery.length === 0 - ? path.join(segmentsDir, segmentPath + prefetchSegmentSuffix) - : undefined + // either: (1) it is empty, meaning segments do not vary by params, + // or (2) client param parsing is enabled, meaning the segment + // payloads are safe to reuse across params. + const shouldAttachSegmentFallback = + segmentAllowQuery && + (segmentAllowQuery.length === 0 || + routesManifest.rsc.clientParamParsing) + + const fallbackPathname = shouldAttachSegmentFallback + ? path.join(segmentsDir, segmentPath + prefetchSegmentSuffix) + : undefined outputs.prerenders.push({ id: outputSegmentPath, @@ -1156,6 +1155,7 @@ export async function handleBuildComplete({ initialRevalidate: initialOutput.fallback?.initialRevalidate, initialHeaders: { + ...meta.headers, ...initialOutput.fallback?.initialHeaders, vary: varyHeader, 'content-type': rscContentTypeHeader, From 7b2c80e24ab4609041bd9b2f31a2bc76e3ebca01 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff Date: Mon, 26 Jan 2026 16:02:34 -0800 Subject: [PATCH 10/11] Revert "Fix react-loadable-manifest chunk hash mismatch by preserving async loader mapping" (#89073) Reverts vercel/next.js#88775 This is breaking the v0 marketing site, reverting to unblock. --- crates/next-api/src/app.rs | 4 ++ crates/next-api/src/dynamic_imports.rs | 57 +++++++---------- crates/next-api/src/pages.rs | 29 +++++---- .../next_app/app_client_references_chunks.rs | 2 +- .../components/FeatureCard.tsx | 23 ------- .../components/UserProfile.tsx | 20 ------ .../components/nested/NestedBadge.tsx | 3 - .../components/nested/NestedIcon.tsx | 3 - .../components/nested/NestedStats.tsx | 3 - .../nested-dynamic-components.test.ts | 58 ----------------- .../nested-dynamic-components/pages/index.tsx | 22 ------- .../turbopack-browser/src/chunking_context.rs | 34 ++++++---- .../turbopack-core/src/chunk/chunk_group.rs | 43 +++---------- .../src/chunk/chunking_context.rs | 63 +++++++------------ .../turbopack-nodejs/src/chunking_context.rs | 31 +++++---- 15 files changed, 120 insertions(+), 275 deletions(-) delete mode 100644 test/development/nested-dynamic-components/components/FeatureCard.tsx delete mode 100644 test/development/nested-dynamic-components/components/UserProfile.tsx delete mode 100644 test/development/nested-dynamic-components/components/nested/NestedBadge.tsx delete mode 100644 test/development/nested-dynamic-components/components/nested/NestedIcon.tsx delete mode 100644 test/development/nested-dynamic-components/components/nested/NestedStats.tsx delete mode 100644 test/development/nested-dynamic-components/nested-dynamic-components.test.ts delete mode 100644 test/development/nested-dynamic-components/pages/index.tsx diff --git a/crates/next-api/src/app.rs b/crates/next-api/src/app.rs index b6f903eac1849..cfaafe8ad8ba1 100644 --- a/crates/next-api/src/app.rs +++ b/crates/next-api/src/app.rs @@ -1566,6 +1566,8 @@ impl AppEndpoint { if emit_manifests == EmitManifests::Full { let dynamic_import_entries = collect_next_dynamic_chunks( + *module_graphs.full, + *client_chunking_context, next_dynamic_imports, NextDynamicChunkAvailability::ClientReferences( &*(client_references_chunks.await?), @@ -1680,6 +1682,8 @@ impl AppEndpoint { let loadable_manifest_output = if emit_manifests == EmitManifests::Full { // create react-loadable-manifest for next/dynamic let dynamic_import_entries = collect_next_dynamic_chunks( + *module_graphs.full, + *client_chunking_context, next_dynamic_imports, NextDynamicChunkAvailability::ClientReferences( &*(client_references_chunks.await?), diff --git a/crates/next-api/src/dynamic_imports.rs b/crates/next-api/src/dynamic_imports.rs index 87a48d80ddd92..dad3bfdc4ad16 100644 --- a/crates/next-api/src/dynamic_imports.rs +++ b/crates/next-api/src/dynamic_imports.rs @@ -30,29 +30,24 @@ use turbo_tasks::{ debug::ValueDebugFormat, trace::TraceRawVcs, }; use turbopack_core::{ - chunk::{ChunkGroupResult, ChunkableModule}, + chunk::{ChunkableModule, ChunkingContext, availability_info::AvailabilityInfo}, module::Module, - module_graph::ModuleGraphLayer, + module_graph::{ModuleGraph, ModuleGraphLayer}, output::{OutputAssetsReference, OutputAssetsWithReferenced}, }; use crate::module_graph::DynamicImportEntriesWithImporter; pub(crate) enum NextDynamicChunkAvailability<'a> { - /// In App Router, the client references chunks contain the async loaders + /// In App Router, the client references ClientReferences(&'a ClientReferencesChunks), - /// In Pages Router, the base page chunk group result - PageChunkGroup(&'a ChunkGroupResult), + /// In Pages Router, the base page chunk group + AvailabilityInfo(AvailabilityInfo), } -/// Collects the chunk outputs for next/dynamic imports by looking up pre-computed -/// async loaders from the chunk group results. -/// -/// This function no longer recomputes chunks - instead it looks up the async loader -/// outputs that were already computed by `make_chunk_group` when the parent chunk -/// groups were created. This ensures consistency between the manifest and the actual -/// chunks served at runtime. pub(crate) async fn collect_next_dynamic_chunks( + module_graph: Vc, + chunking_context: Vc>, dynamic_import_entries: ReadRef, chunking_availability: NextDynamicChunkAvailability<'_>, ) -> Result> { @@ -62,36 +57,28 @@ pub(crate) async fn collect_next_dynamic_chunks( .map(|(dynamic_entry, parent_client_reference)| async move { let module = ResolvedVc::upcast::>(*dynamic_entry); - // Look up the pre-computed async loader from the parent chunk group - let async_loader = match chunking_availability { + // This is the availability info for the parent chunk group, i.e. the client reference + // containing the next/dynamic imports + let availability_info = match chunking_availability { NextDynamicChunkAvailability::ClientReferences(client_reference_chunks) => { - // For App Router: look up the chunk group for the parent client reference, - // then find the async loader for this dynamic entry - let parent_ref = parent_client_reference - .context("Parent client reference not found for next/dynamic import")?; - let chunk_group = client_reference_chunks + client_reference_chunks .client_component_client_chunks - .get(&parent_ref) + .get( + &parent_client_reference.context( + "Parent client reference not found for next/dynamic import", + )?, + ) .context("Client reference chunk group not found for next/dynamic import")? - .await?; - // Copy the ResolvedVc out of the map to avoid lifetime issues - *chunk_group.async_loaders_by_module.get(&module).context( - "Dynamic entry not found in async loaders - this may indicate the dynamic \ - import is not reachable from the client reference", - )? + .await? + .availability_info } - NextDynamicChunkAvailability::PageChunkGroup(chunk_group) => { - // For Pages Router: look up directly in the page's chunk group - // Copy the ResolvedVc out of the map to avoid lifetime issues - *chunk_group.async_loaders_by_module.get(&module).context( - "Dynamic entry not found in async loaders - this may indicate the dynamic \ - import is not reachable from the page entry", - )? + NextDynamicChunkAvailability::AvailabilityInfo(availability_info) => { + *availability_info } }; - // Get the output assets from the async loader reference - // Upcast to OutputAssetsReference to call references() + let async_loader = + chunking_context.async_loader_chunk_item(*module, module_graph, availability_info); let async_chunk_group = async_loader.references().to_resolved().await?; Ok((*dynamic_entry, (*dynamic_entry, async_chunk_group))) diff --git a/crates/next-api/src/pages.rs b/crates/next-api/src/pages.rs index be0f68c0cb910..ecfa167d27a3a 100644 --- a/crates/next-api/src/pages.rs +++ b/crates/next-api/src/pages.rs @@ -927,7 +927,7 @@ impl PageEndpoint { let ssr_module_graph = self.ssr_module_graph(); let next_dynamic_imports = if let PageEndpointType::Html = this.ty { - let client_chunk_group = self.client_chunk_group().await?; + let client_availability_info = self.client_chunk_group().await?.availability_info; let client_module_graph = self.client_module_graph(); let per_page_module_graph = *project.per_page_module_graph().await?; @@ -966,21 +966,26 @@ impl PageEndpoint { NextDynamicGraphs::new(client_module_graph, per_page_module_graph) .get_next_dynamic_imports_for_endpoint(self.client_module()) .await?; - Some((next_dynamic_imports, client_chunk_group)) + Some((next_dynamic_imports, client_availability_info)) } else { None }; - let dynamic_import_entries = - if let Some((next_dynamic_imports, client_chunk_group)) = next_dynamic_imports { - collect_next_dynamic_chunks( - next_dynamic_imports, - NextDynamicChunkAvailability::PageChunkGroup(&client_chunk_group), - ) - .await? - } else { - DynamicImportedChunks::default().resolved_cell() - }; + let dynamic_import_entries = if let Some(( + next_dynamic_imports, + client_availability_info, + )) = next_dynamic_imports + { + collect_next_dynamic_chunks( + self.client_module_graph(), + project.client_chunking_context(), + next_dynamic_imports, + NextDynamicChunkAvailability::AvailabilityInfo(client_availability_info), + ) + .await? + } else { + DynamicImportedChunks::default().resolved_cell() + }; let chunking_context: Vc> = match runtime { NextRuntime::NodeJs => Vc::upcast(node_chunking_context), diff --git a/crates/next-core/src/next_app/app_client_references_chunks.rs b/crates/next-core/src/next_app/app_client_references_chunks.rs index bc8113106dcfe..21b2e04dfffd9 100644 --- a/crates/next-core/src/next_app/app_client_references_chunks.rs +++ b/crates/next-core/src/next_app/app_client_references_chunks.rs @@ -164,8 +164,8 @@ pub async fn get_app_client_references_chunks( let mut current_client_chunk_group = ChunkGroupResult { assets: ResolvedVc::cell(vec![]), referenced_assets: ResolvedVc::cell(vec![]), + references: ResolvedVc::cell(vec![]), availability_info: client_availability_info, - async_loaders_by_module: FxIndexMap::default(), } .resolved_cell(); let mut current_ssr_chunk_group = ChunkGroupResult::empty_resolved(); diff --git a/test/development/nested-dynamic-components/components/FeatureCard.tsx b/test/development/nested-dynamic-components/components/FeatureCard.tsx deleted file mode 100644 index a884c822933b4..0000000000000 --- a/test/development/nested-dynamic-components/components/FeatureCard.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import dynamic from 'next/dynamic' - -const NestedIcon = dynamic(() => import('./nested/NestedIcon')) -const NestedBadge = dynamic(() => import('./nested/NestedBadge')) - -export default function FeatureCard({ - title, - description, -}: { - title: string - description: string -}) { - return ( -
-
- -

{title}

- -
-

{description}

-
- ) -} diff --git a/test/development/nested-dynamic-components/components/UserProfile.tsx b/test/development/nested-dynamic-components/components/UserProfile.tsx deleted file mode 100644 index fee3cc4b426d5..0000000000000 --- a/test/development/nested-dynamic-components/components/UserProfile.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import dynamic from 'next/dynamic' - -const NestedIcon = dynamic(() => import('./nested/NestedIcon')) -const NestedStats = dynamic(() => import('./nested/NestedStats')) - -export default function UserProfile({ - name, - count, -}: { - name: string - count: number -}) { - return ( -
- -

{name}

- -
- ) -} diff --git a/test/development/nested-dynamic-components/components/nested/NestedBadge.tsx b/test/development/nested-dynamic-components/components/nested/NestedBadge.tsx deleted file mode 100644 index 1baa13e063fd1..0000000000000 --- a/test/development/nested-dynamic-components/components/nested/NestedBadge.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function NestedBadge({ text }: { text: string }) { - return {text} -} diff --git a/test/development/nested-dynamic-components/components/nested/NestedIcon.tsx b/test/development/nested-dynamic-components/components/nested/NestedIcon.tsx deleted file mode 100644 index 9868c14f8ff62..0000000000000 --- a/test/development/nested-dynamic-components/components/nested/NestedIcon.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function NestedIcon({ icon }: { icon: string }) { - return 🎯 {icon} -} diff --git a/test/development/nested-dynamic-components/components/nested/NestedStats.tsx b/test/development/nested-dynamic-components/components/nested/NestedStats.tsx deleted file mode 100644 index ada7e8f18322e..0000000000000 --- a/test/development/nested-dynamic-components/components/nested/NestedStats.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function NestedStats({ value }: { value: number }) { - return Stats: {value} -} diff --git a/test/development/nested-dynamic-components/nested-dynamic-components.test.ts b/test/development/nested-dynamic-components/nested-dynamic-components.test.ts deleted file mode 100644 index 6131b20a7c523..0000000000000 --- a/test/development/nested-dynamic-components/nested-dynamic-components.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { nextTestSetup } from 'e2e-utils' -import fs from 'fs' -import path from 'path' - -describe('nested-dynamic-components', () => { - const { next, isTurbopack } = nextTestSetup({ - files: __dirname, - }) - - it('should render the page with nested dynamic components', async () => { - const $ = await next.render$('/') - expect($('h1').text()).toBe('Nested Dynamic Components Test') - expect($('.dynamic-component').length).toBe(2) - }) - - it('should generate react-loadable-manifest with valid chunk references', async () => { - // Trigger the page to ensure manifest is generated - await next.render('/') - - // The manifest path differs between Turbopack and Webpack - // For Turbopack, each page has its own manifest in .next/dev/server/pages// - const manifestPath = isTurbopack - ? '.next/dev/server/pages/index/react-loadable-manifest.json' - : '.next/react-loadable-manifest.json' - - const manifestExists = await next - .readFile(manifestPath) - .then(() => true) - .catch(() => false) - - if (!manifestExists) { - // Skip if manifest doesn't exist (e.g., no dynamic imports detected) - console.log('Manifest not found, skipping chunk validation') - return - } - - const manifest = await next.readJSON(manifestPath) - - // Verify the manifest is not empty - we expect entries for our dynamic imports - const values = Object.values(manifest) - expect(values.length).toBeGreaterThan(0) - - // Verify each chunk file referenced in the manifest actually exists - // This catches the bug where manifest references chunks with wrong hashes - for (const entry of values) { - const { files } = entry as { id: string; files: string[] } - for (const file of files) { - // The file paths in manifest are relative (e.g., "static/chunks/...") - // We need to check in .next/dev for Turbopack - const chunkPath = isTurbopack - ? path.join(next.testDir, '.next/dev', file) - : path.join(next.testDir, '.next', file) - - expect(fs.existsSync(chunkPath)).toBe(true) - } - } - }) -}) diff --git a/test/development/nested-dynamic-components/pages/index.tsx b/test/development/nested-dynamic-components/pages/index.tsx deleted file mode 100644 index 67c6cea58835b..0000000000000 --- a/test/development/nested-dynamic-components/pages/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import dynamic from 'next/dynamic' - -// Multiple dynamic components that themselves have nested dynamic imports -const FeatureCard = dynamic(() => import('../components/FeatureCard')) -const UserProfile = dynamic(() => import('../components/UserProfile')) - -export default function Page() { - return ( -
-

Nested Dynamic Components Test

-
- -
-
- -
-
- ) -} diff --git a/turbopack/crates/turbopack-browser/src/chunking_context.rs b/turbopack/crates/turbopack-browser/src/chunking_context.rs index 7b7e00f04d8df..c406db9ad5fa7 100644 --- a/turbopack/crates/turbopack-browser/src/chunking_context.rs +++ b/turbopack/crates/turbopack-browser/src/chunking_context.rs @@ -14,7 +14,9 @@ use turbopack_core::{ AssetSuffix, Chunk, ChunkGroupResult, ChunkItem, ChunkType, ChunkableModule, ChunkingConfig, ChunkingConfigs, ChunkingContext, EntryChunkGroupResult, EvaluatableAsset, EvaluatableAssets, MinifyType, SourceMapSourceType, SourceMapsType, UnusedReferences, - UrlBehavior, availability_info::AvailabilityInfo, chunk_group::make_chunk_group, + UrlBehavior, + availability_info::AvailabilityInfo, + chunk_group::{MakeChunkGroupResult, make_chunk_group}, chunk_id_strategy::ModuleIdStrategy, }, context::AssetContext, @@ -711,7 +713,12 @@ impl ChunkingContext for BrowserChunkingContext { let this = self.await?; let entries = chunk_group.entries(); let input_availability_info = availability_info; - let result = make_chunk_group( + let MakeChunkGroupResult { + chunks, + referenced_output_assets, + references, + availability_info, + } = make_chunk_group( entries, module_graph, ResolvedVc::upcast(self), @@ -719,7 +726,7 @@ impl ChunkingContext for BrowserChunkingContext { ) .await?; - let chunks = result.chunks.await?; + let chunks = chunks.await?; let mut assets = chunks .iter() @@ -748,9 +755,9 @@ impl ChunkingContext for BrowserChunkingContext { Ok(ChunkGroupResult { assets: ResolvedVc::cell(assets), - referenced_assets: ResolvedVc::cell(result.referenced_output_assets), - availability_info: result.availability_info, - async_loaders_by_module: result.async_loaders_by_module, + referenced_assets: ResolvedVc::cell(referenced_output_assets), + references: ResolvedVc::cell(references), + availability_info, } .cell()) } @@ -774,7 +781,12 @@ impl ChunkingContext for BrowserChunkingContext { async move { let this = self.await?; let entries = chunk_group.entries(); - let result = make_chunk_group( + let MakeChunkGroupResult { + chunks, + referenced_output_assets, + references, + availability_info, + } = make_chunk_group( entries, module_graph, ResolvedVc::upcast(self), @@ -782,7 +794,7 @@ impl ChunkingContext for BrowserChunkingContext { ) .await?; - let chunks = result.chunks.await?; + let chunks = chunks.await?; let mut assets: Vec>> = chunks .iter() @@ -828,9 +840,9 @@ impl ChunkingContext for BrowserChunkingContext { Ok(ChunkGroupResult { assets: ResolvedVc::cell(assets), - referenced_assets: ResolvedVc::cell(result.referenced_output_assets), - availability_info: result.availability_info, - async_loaders_by_module: result.async_loaders_by_module, + referenced_assets: ResolvedVc::cell(referenced_output_assets), + references: ResolvedVc::cell(references), + availability_info, } .cell()) } diff --git a/turbopack/crates/turbopack-core/src/chunk/chunk_group.rs b/turbopack/crates/turbopack-core/src/chunk/chunk_group.rs index 244462844916f..103d8f1dfcfee 100644 --- a/turbopack/crates/turbopack-core/src/chunk/chunk_group.rs +++ b/turbopack/crates/turbopack-core/src/chunk/chunk_group.rs @@ -3,7 +3,7 @@ use std::{collections::HashSet, sync::atomic::AtomicBool}; use anyhow::{Context, Result}; use rustc_hash::FxHashMap; use turbo_rcstr::rcstr; -use turbo_tasks::{FxIndexMap, FxIndexSet, ResolvedVc, TryFlatJoinIterExt, TryJoinIterExt, Vc}; +use turbo_tasks::{FxIndexSet, ResolvedVc, TryFlatJoinIterExt, TryJoinIterExt, Vc}; use super::{ ChunkGroupContent, ChunkItemWithAsyncModuleInfo, ChunkingContext, @@ -11,7 +11,7 @@ use super::{ }; use crate::{ chunk::{ - ChunkItem, ChunkableModule, ChunkingType, Chunks, + ChunkableModule, ChunkingType, Chunks, available_modules::AvailableModuleItem, chunk_item_batch::{ChunkItemBatchGroup, ChunkItemOrBatchWithAsyncModuleInfo}, }, @@ -37,24 +37,8 @@ use crate::{ pub struct MakeChunkGroupResult { pub chunks: ResolvedVc, pub referenced_output_assets: Vec>>, + pub references: Vec>>, pub availability_info: AvailabilityInfo, - /// Map from async module to its async loader chunk item. - /// This preserves the module→loader relationship for async loaders, - /// allowing downstream code to look up pre-computed chunk outputs - /// instead of recomputing them. - #[allow(clippy::type_complexity)] - pub async_loaders_by_module: - FxIndexMap>, ResolvedVc>>, -} - -impl MakeChunkGroupResult { - // Returns all the assets referenced by this chunk group. - pub fn references(&self) -> Vec>> { - self.async_loaders_by_module - .values() - .map(|loader| ResolvedVc::upcast(*loader)) - .collect() - } } /// Creates a chunk group from a set of entries. @@ -137,28 +121,19 @@ pub async fn make_chunk_group( } else { availability_info }; - // Build async loaders while preserving the module→loader mapping - let async_loaders_with_modules: Vec<_> = async_modules + let async_loaders = async_modules .into_iter() .map(async |module| { - let loader = chunking_context + chunking_context .async_loader_chunk_item(*module, module_graph, async_availability_info) .to_resolved() - .await?; - Ok((module, loader)) + .await }) .try_join() .await?; - - // Build the module→loader mapping - let async_loaders_by_module: FxIndexMap<_, _> = async_loaders_with_modules - .iter() - .map(|(module, loader)| (*module, *loader)) - .collect(); - - let async_loader_chunk_items = async_loaders_with_modules.iter().map(|(_, chunk_item)| { + let async_loader_chunk_items = async_loaders.iter().map(|&chunk_item| { ChunkItemOrBatchWithAsyncModuleInfo::ChunkItem(ChunkItemWithAsyncModuleInfo { - chunk_item: *chunk_item, + chunk_item, module: None, async_info: None, }) @@ -190,8 +165,8 @@ pub async fn make_chunk_group( Ok(MakeChunkGroupResult { chunks, referenced_output_assets, + references: ResolvedVc::upcast_vec(async_loaders), availability_info: new_availability_info, - async_loaders_by_module, }) } diff --git a/turbopack/crates/turbopack-core/src/chunk/chunking_context.rs b/turbopack/crates/turbopack-core/src/chunk/chunking_context.rs index 0861b70e82eb9..9c72453978a00 100644 --- a/turbopack/crates/turbopack-core/src/chunk/chunking_context.rs +++ b/turbopack/crates/turbopack-core/src/chunk/chunking_context.rs @@ -3,9 +3,7 @@ use bincode::{Decode, Encode}; use rustc_hash::{FxHashMap, FxHashSet}; use serde::{Deserialize, Serialize}; use turbo_rcstr::RcStr; -use turbo_tasks::{ - FxIndexMap, NonLocalValue, ResolvedVc, TaskInput, Upcast, Vc, trace::TraceRawVcs, -}; +use turbo_tasks::{NonLocalValue, ResolvedVc, TaskInput, Upcast, Vc, trace::TraceRawVcs}; use turbo_tasks_fs::FileSystemPath; use turbo_tasks_hash::DeterministicHash; @@ -24,8 +22,8 @@ use crate::{ module_batches::BatchingConfig, }, output::{ - ExpandOutputAssetsInput, OutputAsset, OutputAssets, OutputAssetsWithReferenced, - expand_output_assets, + ExpandOutputAssetsInput, OutputAsset, OutputAssets, OutputAssetsReferences, + OutputAssetsWithReferenced, expand_output_assets, }, reference::ModuleReference, }; @@ -129,15 +127,8 @@ pub enum ChunkGroupType { pub struct ChunkGroupResult { pub assets: ResolvedVc, pub referenced_assets: ResolvedVc, + pub references: ResolvedVc, pub availability_info: AvailabilityInfo, - /// Map from async module to its async loader chunk item. - /// This preserves the module→loader relationship for async loaders, - /// allowing downstream code to look up pre-computed chunk outputs - /// instead of recomputing them. - #[bincode(with = "turbo_bincode::indexmap")] - #[allow(clippy::type_complexity)] - pub async_loaders_by_module: - FxIndexMap>, ResolvedVc>>, } impl ChunkGroupResult { @@ -145,8 +136,8 @@ impl ChunkGroupResult { ChunkGroupResult { assets: ResolvedVc::cell(vec![]), referenced_assets: ResolvedVc::cell(vec![]), + references: ResolvedVc::cell(vec![]), availability_info: AvailabilityInfo::root(), - async_loaders_by_module: FxIndexMap::default(), } .cell() } @@ -155,8 +146,8 @@ impl ChunkGroupResult { ChunkGroupResult { assets: ResolvedVc::cell(vec![]), referenced_assets: ResolvedVc::cell(vec![]), + references: ResolvedVc::cell(vec![]), availability_info: AvailabilityInfo::root(), - async_loaders_by_module: FxIndexMap::default(), } .resolved_cell() } @@ -166,16 +157,10 @@ impl ChunkGroupResult { impl ChunkGroupResult { #[turbo_tasks::function] pub async fn output_assets_with_referenced(&self) -> Result> { - let references: Vec<_> = self - .async_loaders_by_module - .values() - .map(|loader| ResolvedVc::upcast(*loader)) - .collect(); - Ok(OutputAssetsWithReferenced { assets: self.assets, referenced_assets: self.referenced_assets, - references: ResolvedVc::cell(references), + references: self.references, } .cell()) } @@ -183,11 +168,6 @@ impl ChunkGroupResult { #[turbo_tasks::function] pub async fn concatenate(&self, next: Vc) -> Result> { let next = next.await?; - - // Merge async_loaders_by_module maps - let mut merged_async_loaders = self.async_loaders_by_module.clone(); - merged_async_loaders.extend(next.async_loaders_by_module.iter().map(|(k, v)| (*k, *v))); - Ok(ChunkGroupResult { assets: self.assets.concatenate(*next.assets).to_resolved().await?, referenced_assets: self @@ -195,8 +175,12 @@ impl ChunkGroupResult { .concatenate(*next.referenced_assets) .to_resolved() .await?, + references: self + .references + .concatenate(*next.references) + .to_resolved() + .await?, availability_info: next.availability_info, - async_loaders_by_module: merged_async_loaders, } .cell()) } @@ -212,9 +196,11 @@ impl ChunkGroupResult { .copied() .map(ExpandOutputAssetsInput::Asset) .chain( - self.async_loaders_by_module - .values() - .map(|v| ExpandOutputAssetsInput::Reference(ResolvedVc::upcast(*v))), + self.references + .await? + .into_iter() + .copied() + .map(ExpandOutputAssetsInput::Reference), ), false, ) @@ -231,13 +217,6 @@ impl ChunkGroupResult { #[turbo_tasks::function] pub async fn referenced_assets(&self) -> Result> { - // Derive references from async_loaders_by_module - let references = self - .async_loaders_by_module - .values() - .copied() - .map(ResolvedVc::upcast); - Ok(Vc::cell( expand_output_assets( self.referenced_assets @@ -245,7 +224,13 @@ impl ChunkGroupResult { .into_iter() .copied() .map(ExpandOutputAssetsInput::Asset) - .chain(references.map(ExpandOutputAssetsInput::Reference)), + .chain( + self.references + .await? + .into_iter() + .copied() + .map(ExpandOutputAssetsInput::Reference), + ), false, ) .await?, diff --git a/turbopack/crates/turbopack-nodejs/src/chunking_context.rs b/turbopack/crates/turbopack-nodejs/src/chunking_context.rs index 0cd868470c9ab..30dd73bef7377 100644 --- a/turbopack/crates/turbopack-nodejs/src/chunking_context.rs +++ b/turbopack/crates/turbopack-nodejs/src/chunking_context.rs @@ -9,7 +9,8 @@ use turbopack_core::{ AssetSuffix, Chunk, ChunkGroupResult, ChunkItem, ChunkType, ChunkableModule, ChunkingConfig, ChunkingConfigs, ChunkingContext, EntryChunkGroupResult, EvaluatableAssets, MinifyType, SourceMapSourceType, SourceMapsType, UnusedReferences, UrlBehavior, - availability_info::AvailabilityInfo, chunk_group::make_chunk_group, + availability_info::AvailabilityInfo, + chunk_group::{MakeChunkGroupResult, make_chunk_group}, chunk_id_strategy::ModuleIdStrategy, }, environment::Environment, @@ -492,7 +493,12 @@ impl ChunkingContext for NodeJsChunkingContext { let span = tracing::info_span!("chunking", name = display(ident.to_string().await?)); async move { let modules = chunk_group.entries(); - let result = make_chunk_group( + let MakeChunkGroupResult { + chunks, + referenced_output_assets, + references, + availability_info, + } = make_chunk_group( modules, module_graph, ResolvedVc::upcast(self), @@ -500,7 +506,7 @@ impl ChunkingContext for NodeJsChunkingContext { ) .await?; - let chunks = result.chunks.await?; + let chunks = chunks.await?; let assets = chunks .iter() @@ -510,9 +516,9 @@ impl ChunkingContext for NodeJsChunkingContext { Ok(ChunkGroupResult { assets: ResolvedVc::cell(assets), - referenced_assets: ResolvedVc::cell(result.referenced_output_assets), - availability_info: result.availability_info, - async_loaders_by_module: result.async_loaders_by_module, + referenced_assets: ResolvedVc::cell(referenced_output_assets), + references: ResolvedVc::cell(references), + availability_info, } .cell()) } @@ -541,7 +547,12 @@ impl ChunkingContext for NodeJsChunkingContext { .iter() .map(|&asset| ResolvedVc::upcast::>(asset)); - let result = make_chunk_group( + let MakeChunkGroupResult { + chunks, + mut referenced_output_assets, + references, + availability_info, + } = make_chunk_group( entries, module_graph, ResolvedVc::upcast(self), @@ -549,9 +560,7 @@ impl ChunkingContext for NodeJsChunkingContext { ) .await?; - let chunks = result.chunks.await?; - let references = result.references(); - let mut referenced_output_assets = result.referenced_output_assets; + let chunks = chunks.await?; let extra_chunks = extra_chunks.await?; let mut other_chunks = chunks @@ -585,7 +594,7 @@ impl ChunkingContext for NodeJsChunkingContext { Ok(EntryChunkGroupResult { asset, - availability_info: result.availability_info, + availability_info, } .cell()) } From 59db275d982c054615b7e71988c31ae400967ac6 Mon Sep 17 00:00:00 2001 From: nextjs-bot Date: Tue, 27 Jan 2026 00:08:02 +0000 Subject: [PATCH 11/11] v16.2.0-canary.11 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 ++-- packages/eslint-plugin-internal/package.json | 2 +- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-routing/package.json | 2 +- packages/next-rspack/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 +++++++------- packages/react-refresh-utils/package.json | 2 +- packages/third-parties/package.json | 4 ++-- pnpm-lock.yaml | 16 ++++++++-------- 20 files changed, 35 insertions(+), 35 deletions(-) diff --git a/lerna.json b/lerna.json index 8f212c280612b..22613c40c9a99 100644 --- a/lerna.json +++ b/lerna.json @@ -15,5 +15,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "16.2.0-canary.10" + "version": "16.2.0-canary.11" } \ No newline at end of file diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index d7c99cd7fe4d3..76c45bec5819c 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index b33ac01eb0d93..f8123e3fa30d2 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "description": "ESLint configuration used by Next.js.", "license": "MIT", "repository": { @@ -12,7 +12,7 @@ "dist" ], "dependencies": { - "@next/eslint-plugin-next": "16.2.0-canary.10", + "@next/eslint-plugin-next": "16.2.0-canary.11", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index 2679c811859a4..564cf8fd7aa28 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -1,7 +1,7 @@ { "name": "@next/eslint-plugin-internal", "private": true, - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "description": "ESLint plugin for working on Next.js.", "exports": { ".": "./src/eslint-plugin-internal.js" diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index 562e21b29c037..f9a83ce13467c 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "description": "ESLint plugin for Next.js.", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/font/package.json b/packages/font/package.json index c379b11da816e..0f9243d9090a9 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,7 +1,7 @@ { "name": "@next/font", "private": true, - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 329a45f471e56..01b1dfa663eee 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 11095b892ed83..7996b02f9d501 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index fbf5ae577843c..e37da5b92152c 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index d12c8a894b744..4a62b28c426a2 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index f6821773adfd8..35565cb46f587 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index 766b7b1617e12..e428b25ff9018 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 2412250824875..75f9521fa9404 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-routing/package.json b/packages/next-routing/package.json index 7af961be5336d..130d6c7925e3c 100644 --- a/packages/next-routing/package.json +++ b/packages/next-routing/package.json @@ -1,6 +1,6 @@ { "name": "@next/routing", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "keywords": [ "react", "next", diff --git a/packages/next-rspack/package.json b/packages/next-rspack/package.json index 7e50527167946..b840826b52cbe 100644 --- a/packages/next-rspack/package.json +++ b/packages/next-rspack/package.json @@ -1,6 +1,6 @@ { "name": "next-rspack", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "repository": { "url": "vercel/next.js", "directory": "packages/next-rspack" diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index 503c0ea6a242e..94844c44cf613 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "private": true, "files": [ "native/" diff --git a/packages/next/package.json b/packages/next/package.json index e04627e93a151..25c39d35dff82 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -97,7 +97,7 @@ ] }, "dependencies": { - "@next/env": "16.2.0-canary.10", + "@next/env": "16.2.0-canary.11", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", @@ -162,11 +162,11 @@ "@modelcontextprotocol/sdk": "1.18.1", "@mswjs/interceptors": "0.23.0", "@napi-rs/triples": "1.2.0", - "@next/font": "16.2.0-canary.10", - "@next/polyfill-module": "16.2.0-canary.10", - "@next/polyfill-nomodule": "16.2.0-canary.10", - "@next/react-refresh-utils": "16.2.0-canary.10", - "@next/swc": "16.2.0-canary.10", + "@next/font": "16.2.0-canary.11", + "@next/polyfill-module": "16.2.0-canary.11", + "@next/polyfill-nomodule": "16.2.0-canary.11", + "@next/react-refresh-utils": "16.2.0-canary.11", + "@next/swc": "16.2.0-canary.11", "@opentelemetry/api": "1.6.0", "@playwright/test": "1.51.1", "@rspack/core": "1.6.7", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index ad97ba3e15f46..ea7c0ac108937 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/packages/third-parties/package.json b/packages/third-parties/package.json index 0ab5e392e395e..957f8f1c80f8e 100644 --- a/packages/third-parties/package.json +++ b/packages/third-parties/package.json @@ -1,6 +1,6 @@ { "name": "@next/third-parties", - "version": "16.2.0-canary.10", + "version": "16.2.0-canary.11", "repository": { "url": "vercel/next.js", "directory": "packages/third-parties" @@ -26,7 +26,7 @@ "third-party-capital": "1.0.20" }, "devDependencies": { - "next": "16.2.0-canary.10", + "next": "16.2.0-canary.11", "outdent": "0.8.0", "prettier": "2.5.1", "typescript": "5.9.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa0624c35b127..d71b2f409946c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1008,7 +1008,7 @@ importers: packages/eslint-config-next: dependencies: '@next/eslint-plugin-next': - specifier: 16.2.0-canary.10 + specifier: 16.2.0-canary.11 version: link:../eslint-plugin-next eslint: specifier: '>=9.0.0' @@ -1085,7 +1085,7 @@ importers: packages/next: dependencies: '@next/env': - specifier: 16.2.0-canary.10 + specifier: 16.2.0-canary.11 version: link:../next-env '@swc/helpers': specifier: 0.5.15 @@ -1213,19 +1213,19 @@ importers: specifier: 1.2.0 version: 1.2.0 '@next/font': - specifier: 16.2.0-canary.10 + specifier: 16.2.0-canary.11 version: link:../font '@next/polyfill-module': - specifier: 16.2.0-canary.10 + specifier: 16.2.0-canary.11 version: link:../next-polyfill-module '@next/polyfill-nomodule': - specifier: 16.2.0-canary.10 + specifier: 16.2.0-canary.11 version: link:../next-polyfill-nomodule '@next/react-refresh-utils': - specifier: 16.2.0-canary.10 + specifier: 16.2.0-canary.11 version: link:../react-refresh-utils '@next/swc': - specifier: 16.2.0-canary.10 + specifier: 16.2.0-canary.11 version: link:../next-swc '@opentelemetry/api': specifier: 1.6.0 @@ -1943,7 +1943,7 @@ importers: version: 1.0.20 devDependencies: next: - specifier: 16.2.0-canary.10 + specifier: 16.2.0-canary.11 version: link:../next outdent: specifier: 0.8.0